c53bcb6c99
POST /api/admin/cover-sources/research bumps cover_art_sources_meta. current_version unconditionally; the next enrichment pass re-eligibles every 'none' row. Existing positively-sourced rows are not affected — the version-mismatch eligibility rule only kicks in for 'none'. Admin Cover Art panel gains a "Re-search missing art" button that calls the endpoint and shows a confirmation toast. Operator's escape hatch when: - They've added a Last.fm key and want to retry failed rows immediately rather than waiting for the next scheduled scan. - An upstream provider's catalog has updated (e.g. Deezer added a back-catalog import). - They want to verify a fix end-to-end before the next scheduled scan fires. SettingsService.BumpVersion (the unconditional version of T5's BumpVersionIfProvidersChanged) is the single-call DB writer; both endpoints route through it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 lines
919 B
Go
23 lines
919 B
Go
package api
|
|
|
|
import "net/http"
|
|
|
|
// handleResearchMissingArt bumps the cover-art version unconditionally
|
|
// so every 'none' row becomes eligible at the next enrichment pass.
|
|
// Operator's escape hatch when adding a Last.fm key, when an upstream
|
|
// provider's catalog has updated, or when verifying a fix without
|
|
// waiting for the next scheduled scan.
|
|
//
|
|
// Existing positively-sourced rows (sidecar/embedded/mbcaa/theaudiodb/
|
|
// deezer/lastfm) are not affected — the version-mismatch eligibility
|
|
// rule only kicks in for 'none'.
|
|
func (h *handlers) handleResearchMissingArt(w http.ResponseWriter, r *http.Request) {
|
|
newVer, err := h.coverSettings.BumpVersion(r.Context())
|
|
if err != nil {
|
|
h.logger.Error("admin: research missing art bump failed", "err", err)
|
|
writeErr(w, http.StatusInternalServerError, "server_error", "bump failed")
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, map[string]any{"version": newVer})
|
|
}
|