feat(backend): log file views
deploy / deploy (push) Successful in 1m0s

The activity.file_views table existed but nothing ever wrote to it. Add a
POST /files/{id}/views endpoint: FileRepo.RecordView inserts a history row,
FileService.RecordView enforces view ACL first. The file viewer fires it
(fire-and-forget) when a file is opened, including while paging prev/next.

Documented in openapi.yaml; covered by TestRecordFileView (204 on view,
repeatable, 404 for unknown file).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 14:49:14 +03:00
parent 8f213e780c
commit a78fc5ba9a
8 changed files with 93 additions and 0 deletions
@@ -77,6 +77,9 @@
isPublic = fileData.is_public ?? false;
dirty = false;
void fetchPreview(id);
// Log the view (activity.file_views). Fire-and-forget — never block or
// fail the viewer over view tracking.
void api.post(`/files/${id}/views`).catch(() => {});
} catch (e) {
error = e instanceof ApiError ? e.message : 'Failed to load file';
} finally {