feat(db/m7-352): sqlc queries for system playlist runs + seed selection
Adds internal/db/queries/system_playlists.sql with 12 named queries covering active-user enumeration, per-user run tracking (claim/finish/fail), seed-artist/track/cover selection, and playlist CRUD by kind. Runs sqlc generate to emit dbq/system_playlists.sql.go; also updates playlists.sql.go and models.go to reflect the new kind/system_variant/ seed_artist_id columns added in migration 0015. Note: plan specified a.cover_path for PickTopAlbumCoverForArtistByUser but albums uses cover_art_path — corrected in the query file. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -55,7 +55,7 @@ func (q *Queries) AppendPlaylistTrack(ctx context.Context, arg AppendPlaylistTra
|
||||
const createPlaylist = `-- name: CreatePlaylist :one
|
||||
INSERT INTO playlists (user_id, name, description, is_public)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
RETURNING id, user_id, name, description, is_public, cover_path, track_count, duration_sec, created_at, updated_at
|
||||
RETURNING id, user_id, name, description, is_public, cover_path, track_count, duration_sec, created_at, updated_at, kind, system_variant, seed_artist_id
|
||||
`
|
||||
|
||||
type CreatePlaylistParams struct {
|
||||
@@ -84,6 +84,9 @@ func (q *Queries) CreatePlaylist(ctx context.Context, arg CreatePlaylistParams)
|
||||
&i.DurationSec,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Kind,
|
||||
&i.SystemVariant,
|
||||
&i.SeedArtistID,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
@@ -125,7 +128,7 @@ func (q *Queries) DeletePlaylistTrack(ctx context.Context, arg DeletePlaylistTra
|
||||
}
|
||||
|
||||
const getPlaylist = `-- name: GetPlaylist :one
|
||||
SELECT p.id, p.user_id, p.name, p.description, p.is_public, p.cover_path, p.track_count, p.duration_sec, p.created_at, p.updated_at, u.username AS owner_username
|
||||
SELECT p.id, p.user_id, p.name, p.description, p.is_public, p.cover_path, p.track_count, p.duration_sec, p.created_at, p.updated_at, p.kind, p.system_variant, p.seed_artist_id, u.username AS owner_username
|
||||
FROM playlists p
|
||||
JOIN users u ON u.id = p.user_id
|
||||
WHERE p.id = $1
|
||||
@@ -142,6 +145,9 @@ type GetPlaylistRow struct {
|
||||
DurationSec int32
|
||||
CreatedAt pgtype.Timestamptz
|
||||
UpdatedAt pgtype.Timestamptz
|
||||
Kind string
|
||||
SystemVariant *string
|
||||
SeedArtistID pgtype.UUID
|
||||
OwnerUsername string
|
||||
}
|
||||
|
||||
@@ -159,6 +165,9 @@ func (q *Queries) GetPlaylist(ctx context.Context, id pgtype.UUID) (GetPlaylistR
|
||||
&i.DurationSec,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Kind,
|
||||
&i.SystemVariant,
|
||||
&i.SeedArtistID,
|
||||
&i.OwnerUsername,
|
||||
)
|
||||
return i, err
|
||||
@@ -271,7 +280,7 @@ func (q *Queries) ListPlaylistTracks(ctx context.Context, playlistID pgtype.UUID
|
||||
}
|
||||
|
||||
const listPlaylistsForUser = `-- name: ListPlaylistsForUser :many
|
||||
SELECT p.id, p.user_id, p.name, p.description, p.is_public, p.cover_path, p.track_count, p.duration_sec, p.created_at, p.updated_at, u.username AS owner_username
|
||||
SELECT p.id, p.user_id, p.name, p.description, p.is_public, p.cover_path, p.track_count, p.duration_sec, p.created_at, p.updated_at, p.kind, p.system_variant, p.seed_artist_id, u.username AS owner_username
|
||||
FROM playlists p
|
||||
JOIN users u ON u.id = p.user_id
|
||||
WHERE p.user_id = $1 OR p.is_public = true
|
||||
@@ -289,6 +298,9 @@ type ListPlaylistsForUserRow struct {
|
||||
DurationSec int32
|
||||
CreatedAt pgtype.Timestamptz
|
||||
UpdatedAt pgtype.Timestamptz
|
||||
Kind string
|
||||
SystemVariant *string
|
||||
SeedArtistID pgtype.UUID
|
||||
OwnerUsername string
|
||||
}
|
||||
|
||||
@@ -314,6 +326,9 @@ func (q *Queries) ListPlaylistsForUser(ctx context.Context, userID pgtype.UUID)
|
||||
&i.DurationSec,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Kind,
|
||||
&i.SystemVariant,
|
||||
&i.SeedArtistID,
|
||||
&i.OwnerUsername,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
@@ -365,7 +380,7 @@ SET
|
||||
is_public = CASE WHEN $5::boolean THEN $6::boolean ELSE is_public END,
|
||||
updated_at = now()
|
||||
WHERE id = $7
|
||||
RETURNING id, user_id, name, description, is_public, cover_path, track_count, duration_sec, created_at, updated_at
|
||||
RETURNING id, user_id, name, description, is_public, cover_path, track_count, duration_sec, created_at, updated_at, kind, system_variant, seed_artist_id
|
||||
`
|
||||
|
||||
type UpdatePlaylistParams struct {
|
||||
@@ -403,6 +418,9 @@ func (q *Queries) UpdatePlaylist(ctx context.Context, arg UpdatePlaylistParams)
|
||||
&i.DurationSec,
|
||||
&i.CreatedAt,
|
||||
&i.UpdatedAt,
|
||||
&i.Kind,
|
||||
&i.SystemVariant,
|
||||
&i.SeedArtistID,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user