Files
META-LEAD/meta_lead_db.sql
T
SaidSoighiri94 b5fb954ab6 V1 : synchronisation Meta Lead Gen vers MySQL local
- main.py : recuperation formulaires, questions et leads via Meta Graph API
- meta_lead_db.sql : schema des tables MySQL
- gestion anti-doublons et conservation des payloads bruts
2026-06-24 15:22:37 +02:00

222 lines
6.8 KiB
SQL

-- ============================================================
-- 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.';