Files
minstrel/internal/db/dbq/coverart_settings.sql.go
T
bvandeusen 9a705d0ba4 feat(db/m7-art-providers): migration 0020 + provider-hash queries
Relaxes the artists/albums art_source CHECK constraints to allow the
new 'deezer' and 'lastfm' source values alongside the existing
accepted set. Adds cover_art_sources_meta.last_registered_providers_hash
for the boot-time auto-bump detection: when the registered-provider
set changes between deploys, we bump current_version once so 'none'
rows become eligible for retry against the new chain.

Two sqlc queries added: GetCoverArtProvidersHash reads the stored
hash; BumpVersionAndSetProvidersHash atomically increments the
version and stores a new hash, returning the new version. Both used
by the boot logic in a later task.
2026-05-07 07:39:02 -04:00

164 lines
5.1 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: coverart_settings.sql
package dbq
import (
"context"
)
const bumpSourcesVersion = `-- name: BumpSourcesVersion :one
UPDATE cover_art_sources_meta
SET current_version = current_version + 1
WHERE id = true
RETURNING current_version
`
// Increments and returns the new version. Called by SettingsService
// only when the *enabled set* changes (not on key/display_order
// changes). RETURNING gives the new value back so the handler can
// include it in the response without a follow-up SELECT.
func (q *Queries) BumpSourcesVersion(ctx context.Context) (int32, error) {
row := q.db.QueryRow(ctx, bumpSourcesVersion)
var current_version int32
err := row.Scan(&current_version)
return current_version, err
}
const bumpVersionAndSetProvidersHash = `-- name: BumpVersionAndSetProvidersHash :one
UPDATE cover_art_sources_meta
SET current_version = current_version + 1,
last_registered_providers_hash = $1
WHERE id = true
RETURNING current_version
`
// Atomically increments the version and stores the new provider-set
// hash. Called at boot when the registered-provider set has changed
// since the last start, so 'none' rows become eligible for retry.
// RETURNING gives the new version without a follow-up SELECT.
func (q *Queries) BumpVersionAndSetProvidersHash(ctx context.Context, lastRegisteredProvidersHash string) (int32, error) {
row := q.db.QueryRow(ctx, bumpVersionAndSetProvidersHash, lastRegisteredProvidersHash)
var current_version int32
err := row.Scan(&current_version)
return current_version, err
}
const getCoverArtProvidersHash = `-- name: GetCoverArtProvidersHash :one
SELECT last_registered_providers_hash
FROM cover_art_sources_meta
WHERE id = true
`
func (q *Queries) GetCoverArtProvidersHash(ctx context.Context) (string, error) {
row := q.db.QueryRow(ctx, getCoverArtProvidersHash)
var last_registered_providers_hash string
err := row.Scan(&last_registered_providers_hash)
return last_registered_providers_hash, err
}
const getCurrentSourcesVersion = `-- name: GetCurrentSourcesVersion :one
SELECT current_version FROM cover_art_sources_meta WHERE id = true
`
func (q *Queries) GetCurrentSourcesVersion(ctx context.Context) (int32, error) {
row := q.db.QueryRow(ctx, getCurrentSourcesVersion)
var current_version int32
err := row.Scan(&current_version)
return current_version, err
}
const listProviderSettings = `-- name: ListProviderSettings :many
SELECT provider_id, enabled, api_key, display_order, created_at, updated_at
FROM cover_art_provider_settings
ORDER BY display_order, provider_id
`
// M7 cover-sources: queries for the cover_art_provider_settings table
// and the cover_art_sources_meta singleton. The SettingsService
// consumes these.
// Returns all rows from cover_art_provider_settings. Used by the
// SettingsService at boot for reconciliation and by the admin GET
// handler.
func (q *Queries) ListProviderSettings(ctx context.Context) ([]CoverArtProviderSetting, error) {
rows, err := q.db.Query(ctx, listProviderSettings)
if err != nil {
return nil, err
}
defer rows.Close()
var items []CoverArtProviderSetting
for rows.Next() {
var i CoverArtProviderSetting
if err := rows.Scan(
&i.ProviderID,
&i.Enabled,
&i.ApiKey,
&i.DisplayOrder,
&i.CreatedAt,
&i.UpdatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const updateProviderSettings = `-- name: UpdateProviderSettings :exec
UPDATE cover_art_provider_settings
SET enabled = COALESCE($2, enabled),
api_key = CASE WHEN $3::boolean THEN $4 ELSE api_key END,
updated_at = now()
WHERE provider_id = $1
`
type UpdateProviderSettingsParams struct {
ProviderID string
Enabled bool
Column3 bool
ApiKey *string
}
// Admin PATCH applies one or both fields. Pass NULL for enabled to
// leave it unchanged. Pass FALSE for the apiKeyChanged flag to leave
// the api_key unchanged regardless of apiKey value; pass TRUE with
// empty string to clear, or TRUE with non-empty to set.
func (q *Queries) UpdateProviderSettings(ctx context.Context, arg UpdateProviderSettingsParams) error {
_, err := q.db.Exec(ctx, updateProviderSettings,
arg.ProviderID,
arg.Enabled,
arg.Column3,
arg.ApiKey,
)
return err
}
const upsertProviderSettings = `-- name: UpsertProviderSettings :exec
INSERT INTO cover_art_provider_settings (provider_id, enabled, display_order)
VALUES ($1, $2, $3)
ON CONFLICT (provider_id) DO UPDATE
SET display_order = EXCLUDED.display_order,
updated_at = now()
`
type UpsertProviderSettingsParams struct {
ProviderID string
Enabled bool
DisplayOrder int32
}
// INSERT a default row for a newly-registered provider, or update an
// existing row's display_order on boot reconciliation. Does NOT
// overwrite enabled / api_key on conflict — the operator's settings
// persist across restarts.
func (q *Queries) UpsertProviderSettings(ctx context.Context, arg UpsertProviderSettingsParams) error {
_, err := q.db.Exec(ctx, upsertProviderSettings, arg.ProviderID, arg.Enabled, arg.DisplayOrder)
return err
}