feat: add batch metadata jobs, series filters, and translate backoffice to French

- Add metadata_batch job type with background processing via tokio::spawn
- Auto-apply metadata only when single result at 100% confidence
- Support primary + fallback provider per library, "none" to opt out
- Add batch report/results API endpoints and job detail UI
- Add series_status and has_missing filters to both series listing pages
- Add GET /series/statuses endpoint for dynamic filter options
- Normalize series_metadata status values (migration 0036)
- Hide ComicVine provider tab when no API key configured
- Translate entire backoffice UI from English to French

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-18 18:26:44 +01:00
parent 9a8c1577af
commit b955c2697c
46 changed files with 2161 additions and 379 deletions

View File

@@ -0,0 +1,22 @@
-- Add fallback_metadata_provider to libraries
ALTER TABLE libraries ADD COLUMN fallback_metadata_provider TEXT;
-- Table to store batch metadata job results (one row per series per job)
CREATE TABLE metadata_batch_results (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
job_id UUID NOT NULL REFERENCES index_jobs(id) ON DELETE CASCADE,
library_id UUID NOT NULL REFERENCES libraries(id) ON DELETE CASCADE,
series_name TEXT NOT NULL,
status TEXT NOT NULL, -- 'auto_matched', 'pending_review', 'no_results', 'too_many_results', 'low_confidence', 'already_linked', 'error'
provider_used TEXT,
fallback_used BOOLEAN NOT NULL DEFAULT FALSE,
candidates_count INTEGER NOT NULL DEFAULT 0,
best_confidence REAL,
best_candidate_json JSONB,
link_id UUID REFERENCES external_metadata_links(id) ON DELETE SET NULL,
error_message TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_mbr_job_id ON metadata_batch_results(job_id);
CREATE INDEX idx_mbr_status ON metadata_batch_results(status);