feat(db): add user-context track query variants honoring quarantine

This commit is contained in:
2026-04-30 19:49:00 -04:00
parent ef3fffb3ea
commit 559fb5dd2c
4 changed files with 182 additions and 0 deletions
+8
View File
@@ -26,6 +26,10 @@ WHERE t.id <> $2
SELECT 1 FROM play_events
WHERE user_id = $1 AND track_id = t.id
AND started_at > now() - $3 * interval '1 hour'
)
AND NOT EXISTS (
SELECT 1 FROM lidarr_quarantine q
WHERE q.user_id = $1 AND q.track_id = t.id
);
-- name: LoadRadioCandidatesV2 :many
@@ -53,6 +57,10 @@ excluded_ids AS (
SELECT pe.track_id AS id
FROM play_events pe
WHERE pe.user_id = $1 AND pe.started_at > now() - $3 * interval '1 hour'
UNION ALL
SELECT q.track_id AS id
FROM lidarr_quarantine q
WHERE q.user_id = $1
),
lb_similar AS (
SELECT ts.track_b_id AS track_id, ts.score AS sim_score
+31
View File
@@ -39,3 +39,34 @@ LIMIT $2 OFFSET $3;
-- name: CountTracksMatching :one
SELECT COUNT(*) FROM tracks WHERE title ILIKE '%' || $1::text || '%';
-- name: ListTracksByAlbumForUser :many
-- Same as ListTracksByAlbum but excludes tracks the user has quarantined.
-- $1 = album_id, $2 = user_id.
SELECT * FROM tracks
WHERE album_id = $1
AND NOT EXISTS (
SELECT 1 FROM lidarr_quarantine q
WHERE q.user_id = $2 AND q.track_id = tracks.id
)
ORDER BY disc_number NULLS LAST, track_number NULLS LAST;
-- name: SearchTracksForUser :many
-- $1 = title query, $2 = user_id, $3 = limit, $4 = offset.
SELECT * FROM tracks
WHERE title ILIKE '%' || $1 || '%'
AND NOT EXISTS (
SELECT 1 FROM lidarr_quarantine q
WHERE q.user_id = $2 AND q.track_id = tracks.id
)
ORDER BY title
LIMIT $3 OFFSET $4;
-- name: CountTracksMatchingForUser :one
-- $1 = title query, $2 = user_id.
SELECT COUNT(*) FROM tracks
WHERE title ILIKE '%' || $1::text || '%'
AND NOT EXISTS (
SELECT 1 FROM lidarr_quarantine q
WHERE q.user_id = $2 AND q.track_id = tracks.id
);