metalfrom.eu/apps/api/migrations
Nicolas FRYDER 1081ea4965 feat(schéma): contraintes de domaine sur les statuts, purge, table morte retirée
Dix-huit migrations, zéro CHECK. crawl_run.status, job_triggers.job_type et
band_locations.geocode_status étaient du texte libre dont les valeurs admises ne
vivaient que dans des commentaires. C'est le dénominateur commun de plusieurs
bugs de ce dépôt : un statut 'error' que plus personne n'écrivait mais qu'un
bouton d'admin ciblait encore, des lignes 'processing' qu'aucune requête ne
reprenait, un job_type réclamé par le mauvais daemon. Une faute de frappe
écrivait une ligne durablement invisible, sans jamais rien faire échouer.

Vérifié contre PostgreSQL : 'runnning' et le job_type 'geocode' sont désormais
rejetés, les valeurs légitimes passent. Les contraintes restent NOT VALID de
façon assumée — cette migration tourne au démarrage de chaque conteneur API, et
une seule ligne héritée hors domaine empêcherait l'API de démarrer. Le but est
d'arrêter la dérive, pas de réécrire le passé.

Retire geocode_queue, vestige du pipeline Nominatim que plus aucune ligne de
code ne référence.

Ajoute enfin une purge de rétention sur crawl_log, admin_audit_log et
admin_login_attempts, qui grossissaient sans fin — alors que la migration 015
avait explicitement conçu service_health pour éviter « une table qui grossit ».
Elle est appelée par migrate.js au démarrage, seul point d'accroche périodique
disponible, et volontairement tolérante : ce nettoyage ne doit jamais empêcher
l'API de démarrer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 14:26:31 +02:00
..
001_initial_schema.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
002_add_missing_columns.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
003_geocode_tables.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
004_crawl_tracking.sql feat(db): système de migrations SQL + refonte schéma 2026-06-27 15:09:35 +02:00
005_fix_checkpoints_and_data.sql fix(crawler): FlareSolverr persistent sessions + DB data field + scraper schema 2026-06-30 20:29:33 +02:00
006_admin_dashboard.sql feat(admin): dashboard admin complet (auth forte, API, monitoring) 2026-06-30 22:15:13 +02:00
007_locked_fields_and_jobs.sql feat: locked_fields, genres splittés, conflits, géocodage, jobs dashboard 2026-06-30 23:06:20 +02:00
008_band_locations.sql fix(geocoder): band_locations.ma_id en BIGINT — débloque 62k bands 2026-07-02 19:47:30 +02:00
009_band_locations_bigint.sql fix(geocoder): band_locations.ma_id en BIGINT — débloque 62k bands 2026-07-02 19:47:30 +02:00
010_band_locations_geom.sql feat(map): carte multi-localisations — un point par step géocodé 2026-07-02 19:52:40 +02:00
011_llm_cache_linkage.sql feat(admin): observabilité & provenance du géocodage + fix parser 2026-07-02 20:10:18 +02:00
012_geocode_confidence.sql feat(geocoder): seuil de confiance strict, dedup, purge ancien pipeline 2026-07-02 20:32:16 +02:00
013_geocode_dirty_trigger.sql feat(geocoder): seuil de confiance strict, dedup, purge ancien pipeline 2026-07-02 21:07:16 +02:00
014_run_cancellation_and_geo_sync.sql feat(qualité): outillage de test complet, CI locale, annulation réelle des runs 2026-08-18 10:05:40 +02:00
015_service_health.sql feat: validation syntaxique du SQL + supervision des services de fond 2026-08-18 18:20:15 +02:00
016_updated_at_only_on_change.sql fix(crawler): boucle de ré-enrichissement infinie, politesse et résilience 2026-08-20 16:43:48 +02:00
017_enrich_pending_signal.sql fix(crawler): boucle de ré-enrichissement infinie, politesse et résilience 2026-08-20 16:43:48 +02:00
018_protect_admin_locations.sql fix(géocodage): les corrections manuelles n'étaient protégées par rien 2026-08-22 14:20:44 +02:00
019_status_constraints_and_retention.sql feat(schéma): contraintes de domaine sur les statuts, purge, table morte retirée 2026-08-22 14:26:31 +02:00