import uuid from datetime import datetime, timezone import aiosqlite from src.backend.config import settings SCHEMA = """ CREATE TABLE IF NOT EXISTS topics ( id TEXT PRIMARY KEY, name TEXT NOT NULL UNIQUE, system_prompt TEXT NOT NULL, summary TEXT DEFAULT '', model TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS requests ( id TEXT PRIMARY KEY, session_id TEXT, topic_id TEXT NOT NULL REFERENCES topics(id), prompt TEXT NOT NULL, model TEXT, summarize INTEGER DEFAULT 0, status TEXT NOT NULL DEFAULT 'pending', result TEXT, error TEXT, created_at TEXT NOT NULL, completed_at TEXT ); CREATE INDEX IF NOT EXISTS idx_requests_status ON requests(status); CREATE INDEX IF NOT EXISTS idx_requests_topic_id ON requests(topic_id); CREATE INDEX IF NOT EXISTS idx_requests_session_id ON requests(session_id); """ def _now() -> str: return datetime.now(timezone.utc).isoformat() def _new_id() -> str: return str(uuid.uuid4()) async def get_db() -> aiosqlite.Connection: db = await aiosqlite.connect(settings.db_path) db.row_factory = aiosqlite.Row await db.execute("PRAGMA journal_mode=WAL") await db.execute("PRAGMA foreign_keys=ON") return db async def init_db(): db = await get_db() try: await db.executescript(SCHEMA) await db.commit() finally: await db.close()