diff --git a/internal/db/dbq/tracks.sql.go b/internal/db/dbq/tracks.sql.go new file mode 100644 index 00000000..6aa446ee --- /dev/null +++ b/internal/db/dbq/tracks.sql.go @@ -0,0 +1,179 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: tracks.sql + +package dbq + +import ( + "context" + + "github.com/jackc/pgx/v5/pgtype" +) + +const getTrackByID = `-- name: GetTrackByID :one +SELECT id, title, album_id, artist_id, track_number, disc_number, duration_ms, file_path, file_size, file_format, bitrate, mbid, genre, added_at, updated_at FROM tracks WHERE id = $1 +` + +func (q *Queries) GetTrackByID(ctx context.Context, id pgtype.UUID) (Track, error) { + row := q.db.QueryRow(ctx, getTrackByID, id) + var i Track + err := row.Scan( + &i.ID, + &i.Title, + &i.AlbumID, + &i.ArtistID, + &i.TrackNumber, + &i.DiscNumber, + &i.DurationMs, + &i.FilePath, + &i.FileSize, + &i.FileFormat, + &i.Bitrate, + &i.Mbid, + &i.Genre, + &i.AddedAt, + &i.UpdatedAt, + ) + return i, err +} + +const getTrackByPath = `-- name: GetTrackByPath :one +SELECT id, title, album_id, artist_id, track_number, disc_number, duration_ms, file_path, file_size, file_format, bitrate, mbid, genre, added_at, updated_at FROM tracks WHERE file_path = $1 +` + +func (q *Queries) GetTrackByPath(ctx context.Context, filePath string) (Track, error) { + row := q.db.QueryRow(ctx, getTrackByPath, filePath) + var i Track + err := row.Scan( + &i.ID, + &i.Title, + &i.AlbumID, + &i.ArtistID, + &i.TrackNumber, + &i.DiscNumber, + &i.DurationMs, + &i.FilePath, + &i.FileSize, + &i.FileFormat, + &i.Bitrate, + &i.Mbid, + &i.Genre, + &i.AddedAt, + &i.UpdatedAt, + ) + return i, err +} + +const listTracksByAlbum = `-- name: ListTracksByAlbum :many +SELECT id, title, album_id, artist_id, track_number, disc_number, duration_ms, file_path, file_size, file_format, bitrate, mbid, genre, added_at, updated_at FROM tracks WHERE album_id = $1 ORDER BY disc_number NULLS LAST, track_number NULLS LAST +` + +func (q *Queries) ListTracksByAlbum(ctx context.Context, albumID pgtype.UUID) ([]Track, error) { + rows, err := q.db.Query(ctx, listTracksByAlbum, albumID) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Track + for rows.Next() { + var i Track + if err := rows.Scan( + &i.ID, + &i.Title, + &i.AlbumID, + &i.ArtistID, + &i.TrackNumber, + &i.DiscNumber, + &i.DurationMs, + &i.FilePath, + &i.FileSize, + &i.FileFormat, + &i.Bitrate, + &i.Mbid, + &i.Genre, + &i.AddedAt, + &i.UpdatedAt, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const upsertTrack = `-- name: UpsertTrack :one +INSERT INTO tracks ( + title, album_id, artist_id, track_number, disc_number, + duration_ms, file_path, file_size, file_format, bitrate, mbid, genre +) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) +ON CONFLICT (file_path) DO UPDATE SET + title = EXCLUDED.title, + album_id = EXCLUDED.album_id, + artist_id = EXCLUDED.artist_id, + track_number = EXCLUDED.track_number, + disc_number = EXCLUDED.disc_number, + duration_ms = EXCLUDED.duration_ms, + file_size = EXCLUDED.file_size, + file_format = EXCLUDED.file_format, + bitrate = EXCLUDED.bitrate, + mbid = EXCLUDED.mbid, + genre = EXCLUDED.genre, + updated_at = now() +RETURNING id, title, album_id, artist_id, track_number, disc_number, duration_ms, file_path, file_size, file_format, bitrate, mbid, genre, added_at, updated_at +` + +type UpsertTrackParams struct { + Title string + AlbumID pgtype.UUID + ArtistID pgtype.UUID + TrackNumber *int32 + DiscNumber *int32 + DurationMs int32 + FilePath string + FileSize int64 + FileFormat string + Bitrate *int32 + Mbid *string + Genre *string +} + +// file_path is the canonical identity for library scan; mbid is secondary. +func (q *Queries) UpsertTrack(ctx context.Context, arg UpsertTrackParams) (Track, error) { + row := q.db.QueryRow(ctx, upsertTrack, + arg.Title, + arg.AlbumID, + arg.ArtistID, + arg.TrackNumber, + arg.DiscNumber, + arg.DurationMs, + arg.FilePath, + arg.FileSize, + arg.FileFormat, + arg.Bitrate, + arg.Mbid, + arg.Genre, + ) + var i Track + err := row.Scan( + &i.ID, + &i.Title, + &i.AlbumID, + &i.ArtistID, + &i.TrackNumber, + &i.DiscNumber, + &i.DurationMs, + &i.FilePath, + &i.FileSize, + &i.FileFormat, + &i.Bitrate, + &i.Mbid, + &i.Genre, + &i.AddedAt, + &i.UpdatedAt, + ) + return i, err +}