Files
opus-agent/src/backend/db/database.py
T

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()