-- name: GetMostRecentPlaySessionForUser :one SELECT * FROM play_sessions WHERE user_id = $1 ORDER BY last_event_at DESC LIMIT 1; -- name: InsertPlaySession :one INSERT INTO play_sessions (user_id, started_at, last_event_at, client_id) VALUES ($1, $2, $2, $3) RETURNING *; -- name: TouchPlaySessionLastEvent :exec UPDATE play_sessions SET last_event_at = $2, track_count = track_count + 1 WHERE id = $1; -- name: GetOpenPlayEventForUser :one -- Returns the most recent play_event for a user where ended_at IS NULL. -- Used by the auto-close-prior step in playevents.RecordPlayStarted. SELECT * FROM play_events WHERE user_id = $1 AND ended_at IS NULL ORDER BY started_at DESC LIMIT 1; -- name: InsertPlayEvent :one INSERT INTO play_events ( user_id, track_id, session_id, started_at, client_id ) VALUES ($1, $2, $3, $4, $5) RETURNING *; -- name: UpdatePlayEventEnded :one -- Closes a play_event by id with the given ended_at, duration, and skip flag. -- completion_ratio is computed from duration_played_ms and the track duration -- (looked up by the caller — sqlc doesn't do joins on UPDATE). UPDATE play_events SET ended_at = $2, duration_played_ms = $3, completion_ratio = $4, was_skipped = $5 WHERE id = $1 RETURNING *; -- name: GetPlayEventByID :one SELECT * FROM play_events WHERE id = $1; -- name: InsertSkipEvent :one INSERT INTO skip_events (user_id, track_id, session_id, skipped_at, position_ms) VALUES ($1, $2, $3, $4, $5) RETURNING *;