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
This commit is contained in:
@@ -0,0 +1,222 @@
|
||||
-- ============================================================
|
||||
-- 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.';
|
||||
Reference in New Issue
Block a user