-- ============================================================ -- Script : meta_lead_db.sql -- Base : meta_lead_db -- -- Objectif : -- Créer une base intermédiaire permettant de stocker les -- formulaires et leads Meta Lead Gen avant leur injection -- dans OscarCRM. -- -- Remarques techniques : -- - Les IDs Meta sont stockés en VARCHAR car ils sont fournis -- sous forme de chaînes numériques. -- - Les données brutes Meta sont conservées en JSON pour garder -- une traçabilité complète. -- - Les colonnes indexées sont limitées pour rester compatibles -- avec les anciennes limites MySQL/InnoDB en utf8mb4. -- ============================================================ DROP DATABASE IF EXISTS meta_lead_db; CREATE DATABASE meta_lead_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE meta_lead_db; -- ============================================================ -- Table : meta_forms -- -- Rôle : -- Stocke les formulaires Lead Gen récupérés depuis Meta. -- Chaque formulaire peut être lié à un campus ou à une campagne. -- ============================================================ CREATE TABLE meta_forms ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, meta_form_id VARCHAR(64) NOT NULL, page_id VARCHAR(64) NOT NULL, name VARCHAR(255) NOT NULL, status VARCHAR(50) NOT NULL, locale VARCHAR(20) NULL, campus VARCHAR(100) NULL, raw_payload JSON NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT uq_meta_forms_meta_form_id UNIQUE (meta_form_id), INDEX idx_meta_forms_status (status), INDEX idx_meta_forms_campus (campus) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Formulaires Meta Lead Gen récupérés depuis l API Meta.'; -- ============================================================ -- Table : meta_form_questions -- -- Rôle : -- Stocke les questions/champs associés à chaque formulaire Meta. -- Cette table permet de connaître la structure exacte des -- formulaires utilisés pour générer les leads. -- -- Note : -- field_key est limité à 100 caractères afin d éviter les erreurs -- d index avec utf8mb4 sur certaines versions MySQL/InnoDB. -- ============================================================ CREATE TABLE meta_form_questions ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, meta_form_id VARCHAR(64) NOT NULL, question_id VARCHAR(64) NULL, field_key VARCHAR(100) NOT NULL, label VARCHAR(255) NULL, question_type VARCHAR(100) NULL, question_options JSON NULL, raw_payload JSON NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT uq_meta_form_questions_form_field UNIQUE (meta_form_id, field_key), CONSTRAINT fk_meta_form_questions_form FOREIGN KEY (meta_form_id) REFERENCES meta_forms(meta_form_id) ON UPDATE CASCADE ON DELETE CASCADE, INDEX idx_meta_form_questions_form (meta_form_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Questions et champs des formulaires Meta Lead Gen.'; -- ============================================================ -- Table : meta_leads -- -- Rôle : -- Stocke les leads récupérés depuis les formulaires Meta. -- Les colonnes principales reprennent les champs du formulaire -- Meta et correspondent au format attendu pour OscarCRM. -- -- Statuts : -- RECEIVED : lead récupéré depuis Meta -- READY_TO_SEND : lead prêt à être envoyé vers OscarCRM -- SENT : lead envoyé avec succès vers OscarCRM -- ERROR : erreur pendant le traitement ou l envoi -- INVALID : données obligatoires manquantes ou invalides -- ============================================================ CREATE TABLE meta_leads ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, meta_lead_id VARCHAR(64) NOT NULL, meta_form_id VARCHAR(64) NOT NULL, meta_ad_id VARCHAR(64) NULL, meta_campaign_id VARCHAR(64) NULL, created_time DATETIME NULL, je_suis VARCHAR(255) NULL, nom VARCHAR(255) NULL, first_name VARCHAR(255) NULL, adresse_email VARCHAR(191) NULL, phone_number VARCHAR(50) NULL, city VARCHAR(255) NULL, source VARCHAR(100) NOT NULL DEFAULT 'META_LEAD_GEN', campus VARCHAR(100) NULL, raw_payload JSON NOT NULL, oscar_payload JSON NULL, oscar_response JSON NULL, status VARCHAR(50) NOT NULL DEFAULT 'RECEIVED', error_message TEXT NULL, synced_at DATETIME NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT uq_meta_leads_meta_lead_id UNIQUE (meta_lead_id), CONSTRAINT fk_meta_leads_form FOREIGN KEY (meta_form_id) REFERENCES meta_forms(meta_form_id) ON UPDATE CASCADE ON DELETE RESTRICT, CONSTRAINT chk_meta_leads_status CHECK (status IN ('RECEIVED', 'READY_TO_SEND', 'SENT', 'ERROR', 'INVALID')), INDEX idx_meta_leads_status (status), INDEX idx_meta_leads_meta_form_id (meta_form_id), INDEX idx_meta_leads_created_time (created_time), INDEX idx_meta_leads_adresse_email (adresse_email), INDEX idx_meta_leads_synced_at (synced_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Leads Meta Lead Gen stockés avant injection vers OscarCRM.'; -- ============================================================ -- Table : oscar_sync_logs -- -- Rôle : -- Trace chaque tentative d injection d un lead vers OscarCRM. -- Cette table permet de conserver l historique des succès, -- erreurs et réponses API sans écraser les données du lead. -- -- Statuts : -- SENT : injection réussie -- ERROR : erreur lors de l injection -- INVALID : payload non valide pour OscarCRM -- ============================================================ CREATE TABLE oscar_sync_logs ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, lead_id BIGINT UNSIGNED NOT NULL, oscar_payload JSON NOT NULL, oscar_response JSON NULL, status VARCHAR(50) NOT NULL, error_message TEXT NULL, attempted_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_oscar_sync_logs_lead FOREIGN KEY (lead_id) REFERENCES meta_leads(id) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT chk_oscar_sync_logs_status CHECK (status IN ('SENT', 'ERROR', 'INVALID')), INDEX idx_oscar_sync_logs_lead_id (lead_id), INDEX idx_oscar_sync_logs_status (status), INDEX idx_oscar_sync_logs_attempted_at (attempted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Historique des tentatives d injection des leads vers OscarCRM.';