-- name: InsertContextualLike :exec INSERT INTO contextual_likes (user_id, track_id, session_vector, session_id) VALUES ($1, $2, $3, $4); -- name: SoftDeleteContextualLikesForUserTrack :exec -- Marks all currently-active rows for (user, track) as deleted. Idempotent — -- already-deleted rows aren't re-touched. UPDATE contextual_likes SET deleted_at = now() WHERE user_id = $1 AND track_id = $2 AND deleted_at IS NULL; -- name: ListActiveContextualLikesForUser :many -- Returns all the user's active (non-soft-deleted) contextual_likes with -- non-null vectors. Cardinality is bounded by the user's actual like-while- -- playing history — typically tens to low hundreds. Used by the engine to -- compute contextual_match_score for the candidate pool. SELECT track_id, session_vector FROM contextual_likes WHERE user_id = $1 AND deleted_at IS NULL AND session_vector IS NOT NULL;