133 lines
5.3 KiB
SQL
133 lines
5.3 KiB
SQL
PRAGMA journal_mode=WAL;
|
|
PRAGMA foreign_keys=ON;
|
|
|
|
CREATE TABLE IF NOT EXISTS organizations (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
intradesk_id INTEGER UNIQUE, -- id из intradesk_clients (NULL = ручное создание)
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- Белый список телефонов по организациям.
|
|
-- phone хранится только цифрами, напр. "79001234567"
|
|
CREATE TABLE IF NOT EXISTS org_users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
org_id INTEGER NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
|
|
phone TEXT NOT NULL,
|
|
display_name TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
UNIQUE(phone)
|
|
);
|
|
|
|
-- Реальные пользователи MAX, которые написали боту
|
|
CREATE TABLE IF NOT EXISTS bot_users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
max_user_id INTEGER NOT NULL UNIQUE,
|
|
max_chat_id INTEGER,
|
|
username TEXT,
|
|
first_name TEXT,
|
|
phone TEXT, -- заполняется после шаринга контакта
|
|
org_id INTEGER REFERENCES organizations(id),
|
|
is_authorized INTEGER NOT NULL DEFAULT 0, -- 1 = авторизован
|
|
is_blocked INTEGER NOT NULL DEFAULT 0, -- 1 = заблокирован
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tickets (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
org_id INTEGER NOT NULL REFERENCES organizations(id),
|
|
created_by INTEGER NOT NULL REFERENCES bot_users(id),
|
|
description TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'open', -- open / in_progress / closed
|
|
last_comment TEXT,
|
|
intradesk_task_id INTEGER, -- id задачи в Intradesk (NULL = не создано)
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS ticket_attachments (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
ticket_id INTEGER NOT NULL REFERENCES tickets(id) ON DELETE CASCADE,
|
|
attachment_type TEXT NOT NULL, -- image / audio / file / video
|
|
attachment_url TEXT,
|
|
filename TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- Лог всех входящих и исходящих сообщений
|
|
CREATE TABLE IF NOT EXISTS message_log (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
direction TEXT NOT NULL, -- 'in' / 'out'
|
|
max_user_id INTEGER,
|
|
max_chat_id INTEGER,
|
|
message_id TEXT,
|
|
text TEXT,
|
|
attachment_json TEXT, -- JSON-строка списка вложений
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- ── Intradesk: синхронизируемые справочники ────────────────────────────────
|
|
|
|
-- Клиенты/организации из Intradesk (clientType 10=компания, 20=физлицо)
|
|
CREATE TABLE IF NOT EXISTS intradesk_clients (
|
|
id INTEGER PRIMARY KEY, -- id из Intradesk
|
|
name TEXT NOT NULL,
|
|
client_type INTEGER, -- 10 / 20
|
|
email TEXT,
|
|
address TEXT,
|
|
description TEXT,
|
|
updated_at TEXT,
|
|
synced_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- Пользователи (контактные лица) клиентов из Intradesk
|
|
CREATE TABLE IF NOT EXISTS intradesk_users (
|
|
id INTEGER PRIMARY KEY, -- id (contactPersonId) из Intradesk
|
|
name TEXT,
|
|
first_name TEXT,
|
|
last_name TEXT,
|
|
middle_name TEXT,
|
|
email TEXT,
|
|
phone TEXT,
|
|
client_id INTEGER, -- userGroup.id из Intradesk
|
|
is_archived INTEGER NOT NULL DEFAULT 0,
|
|
synced_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- Заявки из Intradesk
|
|
CREATE TABLE IF NOT EXISTS intradesk_tasks (
|
|
id INTEGER PRIMARY KEY, -- id из Intradesk
|
|
task_number INTEGER,
|
|
name TEXT,
|
|
description TEXT,
|
|
status_id INTEGER,
|
|
status_name TEXT,
|
|
priority_id INTEGER,
|
|
priority_name TEXT,
|
|
client_id INTEGER, -- clientid из Intradesk
|
|
initiator_id INTEGER,
|
|
initiator_name TEXT,
|
|
executor_id INTEGER,
|
|
executor_name TEXT,
|
|
executor_group INTEGER,
|
|
service_name TEXT,
|
|
service_full_name TEXT,
|
|
created_at TEXT,
|
|
updated_at TEXT,
|
|
closed_at TEXT,
|
|
created_by TEXT,
|
|
updated_by TEXT,
|
|
synced_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
-- Лог запусков синхронизации
|
|
CREATE TABLE IF NOT EXISTS intradesk_sync_log (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
sync_type TEXT NOT NULL, -- clients / users / tasks / all
|
|
started_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
finished_at TEXT,
|
|
status TEXT NOT NULL DEFAULT 'running', -- running / success / error
|
|
records_synced INTEGER NOT NULL DEFAULT 0,
|
|
error_message TEXT
|
|
);
|