feat: add SQLite database layer with schema init
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user