-- admin/sql/migration_add_missing_tables.sql -- -- Corrige un oubli de livraison : plusieurs pages admin referencent -- des tables qui n'ont jamais ete creees dans install_full_schema.sql -- ni dans aucune migration precedente, causant des erreurs 500 -- (SQLSTATE 42S02 "Base table or view not found") des l'ouverture : -- - admin/backup.php -> backup_log -- - admin/map_layers.php -> map_layers -- - admin/audit_log.php -> audit_log -- - admin/import_history.php -> import_batches, import_errors -- -- A executer sur TOUTE base existante (prod ou test) : -- mysql -u netmonster_user -p netmonster < migration_add_missing_tables.sql -- -- Idempotent (IF NOT EXISTS) : sans risque a rejouer. -- --------------------------------------------------------------------- -- Utilisee par admin/backup.php (journal des sauvegardes effectuees -- manuellement ou par cron, aucun contenu de sauvegarde n'est stocke -- ici, uniquement des metadonnees). -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS backup_log ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, admin_username VARCHAR(100) NOT NULL, label VARCHAR(255) NOT NULL, note TEXT NULL, size_bytes_reported BIGINT UNSIGNED NULL, PRIMARY KEY (id), KEY idx_created_at (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Utilisee par admin/map_layers.php (configuration des couches -- cartographiques affichees sur la carte : nom, couleur, visibilite, -- ordre d'affichage). -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS map_layers ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, layer_key VARCHAR(100) NOT NULL UNIQUE, color CHAR(7) NOT NULL DEFAULT '#3388ff', is_visible TINYINT(1) NOT NULL DEFAULT 1, sort_order INT NOT NULL DEFAULT 0, description VARCHAR(255) NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Utilisee par admin/audit_log.php (historique en lecture seule des -- actions administratives). Cette table n'est actuellement remplie par -- AUCUNE page : voir la note importante en bas de fichier. -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS audit_log ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, admin_username VARCHAR(100) NOT NULL, action VARCHAR(50) NOT NULL, entity_type VARCHAR(50) NOT NULL, entity_id BIGINT NULL, details TEXT NULL, PRIMARY KEY (id), KEY idx_created_at (created_at), KEY idx_entity (entity_type, entity_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --------------------------------------------------------------------- -- Utilisees par admin/import_history.php. Distinctes de la table -- `imports` (deja existante, alimentee par lib/ntm_import_to_staging.php -- et utilisee par admin/import_ntm.php) : import_batches/import_errors -- ne sont actuellement alimentees par AUCUNE page non plus, meme -- probleme que audit_log (voir note importante ci-dessous). -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS import_batches ( id INT AUTO_INCREMENT PRIMARY KEY, filename VARCHAR(255) NOT NULL, country_id INT NULL, imported_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, imported_by VARCHAR(100) NOT NULL, status ENUM('success','partial','failed') NOT NULL DEFAULT 'success', rows_total INT NOT NULL DEFAULT 0, rows_imported INT NOT NULL DEFAULT 0, rows_rejected INT NOT NULL DEFAULT 0, FOREIGN KEY (country_id) REFERENCES countries(id), KEY idx_imported_at (imported_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS import_errors ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, batch_id INT NOT NULL, line_number INT NOT NULL, message VARCHAR(500) NOT NULL, raw_line TEXT NULL, PRIMARY KEY (id), FOREIGN KEY (batch_id) REFERENCES import_batches(id) ON DELETE CASCADE, KEY idx_batch (batch_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- NOTE IMPORTANTE : ces 4 tables (backup_log, map_layers, audit_log, -- import_batches/import_errors) resoudront les erreurs 500 (les pages -- pourront s'afficher), mais audit_log, import_batches et import_errors -- resteront VIDES tant qu'aucune page n'insere explicitement dedans a -- chaque action concernee. Cette instrumentation n'a jamais ete ecrite : -- ces pages de consultation ont ete livrees en supposant a tort que -- d'autres pages les alimentaient deja. Une correction complementaire -- sera necessaire si vous voulez que ces journaux soient utiles au -- quotidien (par exemple: brancher import_history.php sur la table -- `imports` deja existante et alimentee par import_ntm.php, plutot que -- sur import_batches qui fait doublon et n'est jamais rempli).