From f3281883beb9db3cb2a0398866897e1a64ee0ff0 Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Mon, 25 May 2026 18:42:00 +0200 Subject: [PATCH] feat: add SQLite database layer with schema init --- src/backend/db/database.py | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/backend/db/database.py diff --git a/src/backend/db/database.py b/src/backend/db/database.py new file mode 100644 index 0000000..173e6f3 --- /dev/null +++ b/src/backend/db/database.py @@ -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()