Files
admin-netmonster-db/sql/migration_add_missing_tables.sql
2026-10-21 21:54:23 +02:00

108 lines
5.0 KiB
SQL

-- 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).