62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
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()
|