summaryrefslogtreecommitdiff
path: root/internal/repository
diff options
context:
space:
mode:
Diffstat (limited to 'internal/repository')
-rw-r--r--internal/repository/media.go2
-rw-r--r--internal/repository/sqlite_test.go25
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)