refactor: step 2 - extract domain services (tasks, prompts, snapshots, knowledge)
This commit is contained in:
+151
@@ -0,0 +1,151 @@
|
||||
"""
|
||||
===============================================================================
|
||||
FILE: core/schema.py
|
||||
PROJECT: SCUD Orion AI (Unified Architecture)
|
||||
ROLE: DDL-схемы таблиц, создание индексов и инициализация базы данных.
|
||||
===============================================================================
|
||||
"""
|
||||
|
||||
import logging
|
||||
from core.connection import get_connection
|
||||
|
||||
logger = logging.getLogger("DB_SCHEMA")
|
||||
|
||||
|
||||
def init_all_tables() -> None:
|
||||
"""Инициализирует все таблицы и индексы системы."""
|
||||
with get_connection() as conn:
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 1. Логи СКУД
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS scud_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
log_date TEXT NOT NULL,
|
||||
fio TEXT NOT NULL,
|
||||
fio_clean TEXT NOT NULL,
|
||||
department TEXT,
|
||||
position TEXT,
|
||||
time_in TEXT,
|
||||
first_activity TEXT DEFAULT '—',
|
||||
time_out TEXT,
|
||||
time_in_building TEXT,
|
||||
is_present INTEGER NOT NULL,
|
||||
anomaly_flag TEXT DEFAULT 'NONE',
|
||||
snapshot_time TEXT DEFAULT NULL,
|
||||
snapshot_id TEXT DEFAULT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
# 2. Кадровые реестры 1С
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS zup_staff (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
snapshot_date TEXT NOT NULL,
|
||||
fio TEXT NOT NULL,
|
||||
fio_clean TEXT NOT NULL,
|
||||
department TEXT,
|
||||
position TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS zup_absences (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
absence_date TEXT NOT NULL,
|
||||
fio TEXT NOT NULL,
|
||||
fio_clean TEXT NOT NULL,
|
||||
absence_type TEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
# 3. Аномалии и база знаний
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS anomalies_history (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
anomaly_date TEXT NOT NULL,
|
||||
fio TEXT NOT NULL,
|
||||
anomaly_type TEXT NOT NULL,
|
||||
details TEXT NOT NULL,
|
||||
human_status TEXT DEFAULT 'Pending',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS ai_knowledge_base (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
rule_text TEXT UNIQUE NOT NULL,
|
||||
added_by TEXT DEFAULT 'Human',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS department_synonyms (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
short_name TEXT UNIQUE NOT NULL,
|
||||
full_name TEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
# 4. Узлы системного промпта и сессии
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS system_prompt_nodes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
prompt_name TEXT DEFAULT 'main_agent',
|
||||
section_id INTEGER NOT NULL,
|
||||
item_id INTEGER NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
is_active INTEGER DEFAULT 1,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(prompt_name, section_id, item_id)
|
||||
);
|
||||
""")
|
||||
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS session_states (
|
||||
session_id TEXT PRIMARY KEY,
|
||||
state_type TEXT NOT NULL,
|
||||
pending_data TEXT,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS chat_messages (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
session_id TEXT NOT NULL,
|
||||
role TEXT NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
is_ephemeral INTEGER DEFAULT 0,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
# 5. Задачи
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS tasks (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
task_id TEXT,
|
||||
module TEXT DEFAULT 'general',
|
||||
title TEXT NOT NULL,
|
||||
priority TEXT DEFAULT 'MEDIUM',
|
||||
status TEXT DEFAULT 'BACKLOG',
|
||||
due_date TEXT,
|
||||
user_id INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
# 6. Индексы
|
||||
cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_date ON scud_logs(log_date);")
|
||||
cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_fio ON scud_logs(fio_clean);")
|
||||
cursor.execute("CREATE INDEX IF NOT EXISTS idx_scud_snapshot ON scud_logs(snapshot_time);")
|
||||
cursor.execute("CREATE INDEX IF NOT EXISTS idx_prompt_nodes ON system_prompt_nodes(prompt_name, section_id, item_id);")
|
||||
|
||||
conn.commit()
|
||||
Reference in New Issue
Block a user