metalfrom.eu/apps/api/migrations/007_locked_fields_and_jobs.sql
Nicolas Fryder c90b5063f1 feat: locked_fields, genres splittés, conflits, géocodage, jobs dashboard
Migration 007 :
- bands.locked_fields : champs édités manuellement = ne jamais réécrire
- bands.crawler_pending : valeurs MA différentes des valeurs verrouillées
- job_triggers : déclenchement de jobs depuis l'admin sans docker socket
- DELETE non-EU bands (6852 bands US/BR/CA/… entrés via crawl incrémental)

Crawler :
- upsert_band_enriched respecte locked_fields et stocke crawler_pending
- run_incremental filtre les bands hors Europe (EU-only désormais confirmé)
- update_crawl_run_progress toutes les 10 bands (granularité améliorée)
- main loop consomme job_triggers (enrich / incremental / full_crawl)
- retry sur JSONDecodeError dans get_json (FlareSolverr corps vide)

Admin PATCH bands :
- les champs édités sont automatiquement ajoutés à locked_fields

Dashboard :
- Genres découpés en mots-clés (Doom/Death Metal → Doom, Death Metal…)
- Listes pays/statut/genre sans limite, avec scroll interne

Bands admin :
- Colonne Thèmes + champ recherche thèmes_q
- Indicateur 🔒 sur les bands avec champs verrouillés

Nouvelles pages admin :
- Conflits : résolution champ par champ (garder ma valeur / accepter MA)
- Géocodage : stats queue, barre de progression, 20 derniers géocodages
- Jobs : boutons pour déclencher enrich/incremental/full_crawl manuellement

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 23:06:20 +02:00

33 lines
1.4 KiB
SQL

-- 007: champs verrouillés (éditions manuelles), conflits crawler, déclencheurs de jobs,
-- et nettoyage des 6852 bands non-européens entrés via le crawl incrémental global.
-- 1. Protection des éditions manuelles
ALTER TABLE bands
ADD COLUMN IF NOT EXISTS locked_fields JSONB NOT NULL DEFAULT '{}',
ADD COLUMN IF NOT EXISTS crawler_pending JSONB;
-- 2. Table de déclencheurs de jobs (depuis le dashboard admin sans socket Docker)
CREATE TABLE IF NOT EXISTS job_triggers (
id BIGSERIAL PRIMARY KEY,
job_type TEXT NOT NULL, -- 'enrich'|'incremental'|'full_crawl'|'geocode'
status TEXT NOT NULL DEFAULT 'pending', -- pending|running|done|error
requested_by TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
started_at TIMESTAMPTZ,
finished_at TIMESTAMPTZ,
error TEXT
);
CREATE INDEX IF NOT EXISTS idx_job_triggers_pending ON job_triggers (status, created_at)
WHERE status = 'pending';
-- 3. Suppression des bands hors Europe (entrés via crawl incrémental global)
-- Liste officielle des codes pays européens utilisés par Metal Archives.
DELETE FROM bands
WHERE country IS NOT NULL
AND country NOT IN (
'AD','AL','AT','BA','BE','BG','BY','CH','CY','CZ',
'DE','DK','EE','ES','FI','FR','GB','GE','GR','HR',
'HU','IE','IS','IT','LI','LT','LU','LV','MC','MD',
'ME','MK','MT','NL','NO','PL','PT','RO','RS','RU',
'SE','SI','SK','SM','TR','UA','VA','XK'
);