b5fb954ab6
- 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
222 lines
6.8 KiB
SQL
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.'; |