diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-30 00:55:27 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-30 00:55:27 +0300 |
| commit | b94ec8410d7a7ef5bb14bee2f9930abda52f28fe (patch) | |
| tree | 6066d4d01a5d513fb871748ec32b18745d6be73f /internal | |
| parent | 8982cda8afc40f3268bfc2614faa202fe6dea6d3 (diff) | |
fix: exclude soft-deleted media from GetMediaByID
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/repository/media.go | 2 | ||||
| -rw-r--r-- | internal/repository/sqlite_test.go | 25 |
2 files changed, 26 insertions, 1 deletions
diff --git a/internal/repository/media.go b/internal/repository/media.go index 2d6f13c..95016e5 100644 --- a/internal/repository/media.go +++ b/internal/repository/media.go @@ -70,7 +70,7 @@ func scanMedia(row sqlScanner) (*model.Media, error) { // GetMediaByID retrieves a media by ID. func (s *SQLite) GetMediaByID(ctx context.Context, id int64) (*model.Media, error) { row := s.db.QueryRowContext(ctx, - `SELECT id, set_id, rel_path, file_name, abs_path, type, duration, codec, resolution, bitrate, file_size_bytes, thumbnail_path, play_count, deleted_at, created_at FROM media WHERE id = ?`, id) + `SELECT id, set_id, rel_path, file_name, abs_path, type, duration, codec, resolution, bitrate, file_size_bytes, thumbnail_path, play_count, deleted_at, created_at FROM media WHERE id = ? AND deleted_at IS NULL`, id) return scanMedia(row) } diff --git a/internal/repository/sqlite_test.go b/internal/repository/sqlite_test.go index 5e6f3fd..faa4fb6 100644 --- a/internal/repository/sqlite_test.go +++ b/internal/repository/sqlite_test.go @@ -243,6 +243,31 @@ func TestSQLite_MediaRepo(t *testing.T) { }, }, { + name: "excludes soft-deleted from get by id", + run: func(t *testing.T, ctx context.Context, s *SQLite) { + now := time.Now().Truncate(time.Second) + sid, _ := s.CreateSet(ctx, &model.Set{Name: "s", RootPath: "/s", CreatedAt: now}) + mid, _ := s.CreateMedia(ctx, &model.Media{SetID: sid, RelPath: "a.mp4", FileName: "a.mp4", AbsPath: "/s/a.mp4", Type: model.MediaTypeVideo, CreatedAt: now}) + if err := s.SoftDeleteMedia(ctx, mid); err != nil { + t.Fatalf("soft delete: %v", err) + } + m, err := s.GetMediaByID(ctx, mid) + if err == nil { + t.Fatal("expected error for soft-deleted media") + } + if m != nil { + t.Fatalf("expected nil media for soft-deleted record, got %+v", m) + } + deleted, _ := s.ListDeletedMedia(ctx) + if len(deleted) != 1 { + t.Fatalf("expected 1 deleted media, got %d", len(deleted)) + } + if deleted[0].ID != mid { + t.Fatalf("expected deleted media ID %d, got %d", mid, deleted[0].ID) + } + }, + }, + { name: "hard delete", run: func(t *testing.T, ctx context.Context, s *SQLite) { now := time.Now().Truncate(time.Second) |
