intra_max_chatbot/database/schema.sql
2026-03-26 00:25:37 +03:00

66 lines
2.7 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,
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,
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'))
);