Files
minstrel/internal/db/dbq/system_playlist_rotation.sql.go
T
bvandeusenandClaude Opus 5.5 1d4ef1a23f docs: query comments say what each query selects and why, not how it came to be (#6277)
Rewrites the internal/db/queries comments to rule 32 and regenerates
dbq, whose doc comments and embedded SQL carry them. The bugs behind the
tiered mixes, the md5 order seed, the score bands and the round-robin
arms are restated as the constraint each one enforces; counts from one
library and stale cross-references are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 12:31:13 -04:00

92 lines
2.8 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: system_playlist_rotation.sql
package dbq
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const appendRotationPlayed = `-- name: AppendRotationPlayed :exec
INSERT INTO system_playlist_rotation_state (
user_id, playlist_kind, played_track_ids, rotation_started_at, updated_at
) VALUES (
$1, $2,
array_append('{}'::uuid[], $3::uuid), now(), now()
)
ON CONFLICT (user_id, playlist_kind) DO UPDATE
SET played_track_ids =
CASE WHEN $3::uuid = ANY(system_playlist_rotation_state.played_track_ids)
THEN system_playlist_rotation_state.played_track_ids
ELSE array_append(system_playlist_rotation_state.played_track_ids, $3::uuid)
END,
updated_at = now()
`
type AppendRotationPlayedParams struct {
UserID pgtype.UUID
PlaylistKind string
TrackID pgtype.UUID
}
// Rotation state for system-playlist sample-history dedup.
// One row per (user, playlist_kind). played_track_ids accumulates
// tracks heard from that playlist in the current rotation; shuffle
// prefers ids NOT in this set, then resets when the snapshot is
// exhausted.
// Records that the given track was played from the (user, kind)
// system playlist. Creates the row on first play; on conflict
// appends only if not already present so the array stays a set.
func (q *Queries) AppendRotationPlayed(ctx context.Context, arg AppendRotationPlayedParams) error {
_, err := q.db.Exec(ctx, appendRotationPlayed, arg.UserID, arg.PlaylistKind, arg.TrackID)
return err
}
const getRotationState = `-- name: GetRotationState :one
SELECT user_id, playlist_kind, played_track_ids, rotation_started_at, updated_at FROM system_playlist_rotation_state
WHERE user_id = $1 AND playlist_kind = $2
`
type GetRotationStateParams struct {
UserID pgtype.UUID
PlaylistKind string
}
func (q *Queries) GetRotationState(ctx context.Context, arg GetRotationStateParams) (SystemPlaylistRotationState, error) {
row := q.db.QueryRow(ctx, getRotationState, arg.UserID, arg.PlaylistKind)
var i SystemPlaylistRotationState
err := row.Scan(
&i.UserID,
&i.PlaylistKind,
&i.PlayedTrackIds,
&i.RotationStartedAt,
&i.UpdatedAt,
)
return i, err
}
const resetRotationState = `-- name: ResetRotationState :exec
UPDATE system_playlist_rotation_state
SET played_track_ids = '{}',
rotation_started_at = now(),
updated_at = now()
WHERE user_id = $1 AND playlist_kind = $2
`
type ResetRotationStateParams struct {
UserID pgtype.UUID
PlaylistKind string
}
// Clears the played set and advances the rotation window. Called
// when the playlist snapshot has been fully sampled (Stage 2).
func (q *Queries) ResetRotationState(ctx context.Context, arg ResetRotationStateParams) error {
_, err := q.db.Exec(ctx, resetRotationState, arg.UserID, arg.PlaylistKind)
return err
}