Files
minstrel/internal/db/dbq/history.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

102 lines
2.7 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: history.sql
package dbq
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const listUserHistory = `-- name: ListUserHistory :many
SELECT pe.id AS event_id,
pe.started_at,
t.id, t.title, t.album_id, t.artist_id, t.track_number, t.disc_number, t.duration_ms, t.file_path, t.file_size, t.file_format, t.bitrate, t.mbid, t.genre, t.added_at, t.updated_at, t.tag_source, t.tag_sources_version, t.tag_read_version, t.missing_since, t.mbid_source, t.song_id, t.song_key, t.source_verdict, t.source_verdict_at, t.emptied_at,
albums.title AS album_title,
artists.name AS artist_name
FROM play_events pe
JOIN tracks t ON t.id = pe.track_id
JOIN albums ON albums.id = t.album_id
JOIN artists ON artists.id = t.artist_id
WHERE pe.user_id = $1
AND pe.was_skipped = false
AND NOT EXISTS (
SELECT 1 FROM quarantine q
WHERE q.user_id = $1 AND q.track_id = t.id
)
ORDER BY pe.started_at DESC
LIMIT $2 OFFSET $3
`
type ListUserHistoryParams struct {
UserID pgtype.UUID
Limit int32
Offset int32
}
type ListUserHistoryRow struct {
EventID pgtype.UUID
StartedAt pgtype.Timestamptz
Track Track
AlbumTitle string
ArtistName string
}
// Track-level listening history. Returns one row per
// play_events entry, newest first, joined with tracks/albums/artists
// so the SPA can render a TrackRef without follow-up fetches. Filters
// out skipped events and tracks the user has quarantined (per-user
// soft-hide). $1 = user_id, $2 = limit, $3 = offset.
func (q *Queries) ListUserHistory(ctx context.Context, arg ListUserHistoryParams) ([]ListUserHistoryRow, error) {
rows, err := q.db.Query(ctx, listUserHistory, arg.UserID, arg.Limit, arg.Offset)
if err != nil {
return nil, err
}
defer rows.Close()
var items []ListUserHistoryRow
for rows.Next() {
var i ListUserHistoryRow
if err := rows.Scan(
&i.EventID,
&i.StartedAt,
&i.Track.ID,
&i.Track.Title,
&i.Track.AlbumID,
&i.Track.ArtistID,
&i.Track.TrackNumber,
&i.Track.DiscNumber,
&i.Track.DurationMs,
&i.Track.FilePath,
&i.Track.FileSize,
&i.Track.FileFormat,
&i.Track.Bitrate,
&i.Track.Mbid,
&i.Track.Genre,
&i.Track.AddedAt,
&i.Track.UpdatedAt,
&i.Track.TagSource,
&i.Track.TagSourcesVersion,
&i.Track.TagReadVersion,
&i.Track.MissingSince,
&i.Track.MbidSource,
&i.Track.SongID,
&i.Track.SongKey,
&i.Track.SourceVerdict,
&i.Track.SourceVerdictAt,
&i.Track.EmptiedAt,
&i.AlbumTitle,
&i.ArtistName,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}