130 lines
4.8 KiB
SQL
130 lines
4.8 KiB
SQL
-- IDEE-4 / IDEE-5 — Radar mail proto (CRM)
|
||
-- Tables pour l’écran /v4/radar. Moteur Gmail Push + Gemini : story suivante.
|
||
-- Exécuter sur la BD CRM de DEV (devcrmms1_dev), pas en prod.
|
||
|
||
CREATE TABLE IF NOT EXISTS radar_exceptions (
|
||
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
kind ENUM('mailbox', 'sender') NOT NULL DEFAULT 'mailbox',
|
||
value VARCHAR(190) NOT NULL,
|
||
note VARCHAR(255) NOT NULL DEFAULT '',
|
||
active TINYINT(1) NOT NULL DEFAULT 1,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uq_radar_exc (kind, value)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS radar_threads (
|
||
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
gmail_thread_id VARCHAR(64) NOT NULL,
|
||
mailbox VARCHAR(190) NOT NULL DEFAULT '',
|
||
subject VARCHAR(255) NOT NULL DEFAULT '',
|
||
from_email VARCHAR(190) NOT NULL DEFAULT '',
|
||
from_name VARCHAR(190) NOT NULL DEFAULT '',
|
||
gmail_url VARCHAR(500) NOT NULL DEFAULT '',
|
||
client_id INT UNSIGNED NULL DEFAULT NULL,
|
||
projet_id INT UNSIGNED NULL DEFAULT NULL,
|
||
proposed_client_no VARCHAR(32) NOT NULL DEFAULT '',
|
||
status VARCHAR(32) NOT NULL DEFAULT 'a_classer',
|
||
summary VARCHAR(500) NOT NULL DEFAULT '',
|
||
confidence TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||
is_example TINYINT(1) NOT NULL DEFAULT 0,
|
||
received_at DATETIME NULL DEFAULT NULL,
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uq_radar_thread (gmail_thread_id),
|
||
KEY idx_radar_status (status),
|
||
KEY idx_radar_received (received_at)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS radar_thread_skills (
|
||
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
thread_id INT UNSIGNED NOT NULL,
|
||
skill VARCHAR(32) NOT NULL,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uq_radar_skill (thread_id, skill),
|
||
KEY idx_radar_skill (skill)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS radar_rules (
|
||
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
match_type ENUM('email', 'domain') NOT NULL DEFAULT 'email',
|
||
match_value VARCHAR(190) NOT NULL,
|
||
client_id INT UNSIGNED NULL DEFAULT NULL,
|
||
projet_id INT UNSIGNED NULL DEFAULT NULL,
|
||
skill VARCHAR(32) NOT NULL DEFAULT '',
|
||
source VARCHAR(32) NOT NULL DEFAULT 'human',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uq_radar_rule (match_type, match_value, skill)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
INSERT INTO radar_exceptions (kind, value, note, active)
|
||
SELECT 'mailbox', 'confirmation@ms1timing.com', 'Mails transactionnels inscription — ne pas ouvrir', 1
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM radar_exceptions
|
||
WHERE kind = 'mailbox' AND value = 'confirmation@ms1timing.com'
|
||
);
|
||
|
||
INSERT INTO radar_threads (
|
||
gmail_thread_id, mailbox, subject, from_email, from_name, gmail_url,
|
||
proposed_client_no, status, summary, confidence, is_example, received_at
|
||
)
|
||
SELECT
|
||
'proto-ex-1',
|
||
'desjardins.lp@ms1timing.com',
|
||
'Logos dossards + fichiers départ site',
|
||
'marie@course-exemple.ca',
|
||
'Marie Exemple',
|
||
'',
|
||
'1842',
|
||
'a_classer',
|
||
'Deux sujets dans le même fil : logos pour l’imprimeur, et fichiers à déposer pour le site d’inscription.',
|
||
72,
|
||
1,
|
||
NOW()
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (SELECT 1 FROM radar_threads WHERE gmail_thread_id = 'proto-ex-1');
|
||
|
||
INSERT INTO radar_thread_skills (thread_id, skill)
|
||
SELECT t.id, 'dossards' FROM radar_threads t
|
||
WHERE t.gmail_thread_id = 'proto-ex-1'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM radar_thread_skills s WHERE s.thread_id = t.id AND s.skill = 'dossards'
|
||
);
|
||
|
||
INSERT INTO radar_thread_skills (thread_id, skill)
|
||
SELECT t.id, 'site' FROM radar_threads t
|
||
WHERE t.gmail_thread_id = 'proto-ex-1'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM radar_thread_skills s WHERE s.thread_id = t.id AND s.skill = 'site'
|
||
);
|
||
|
||
INSERT INTO radar_threads (
|
||
gmail_thread_id, mailbox, subject, from_email, from_name, gmail_url,
|
||
proposed_client_no, status, summary, confidence, is_example, received_at
|
||
)
|
||
SELECT
|
||
'proto-ex-2',
|
||
'info@ms1timing.com',
|
||
'Question impression dossards',
|
||
'nouveau@inconnu.example',
|
||
'Contact inconnu',
|
||
'',
|
||
'',
|
||
'a_mettre_dans_crm',
|
||
'Adresse absente du CRM. Créer le contact / projet, puis relancer — le fil doit se recoller tout seul.',
|
||
40,
|
||
1,
|
||
DATE_SUB(NOW(), INTERVAL 25 MINUTE)
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (SELECT 1 FROM radar_threads WHERE gmail_thread_id = 'proto-ex-2');
|
||
|
||
INSERT INTO radar_thread_skills (thread_id, skill)
|
||
SELECT t.id, 'dossards' FROM radar_threads t
|
||
WHERE t.gmail_thread_id = 'proto-ex-2'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM radar_thread_skills s WHERE s.thread_id = t.id AND s.skill = 'dossards'
|
||
);
|