import sqlite3 from fastapi import APIRouter from pydantic import BaseModel class CreateSpeakerRequest(BaseModel): name: str def make_router(settings, db_factory): router = APIRouter(prefix="/api/speakers") @router.get("") def list_speakers(): db: sqlite3.Connection = db_factory() rows = db.execute(""" SELECT s.id, s.name, s.created_at, COUNT(u.id) as utterance_count FROM speakers s LEFT JOIN utterances u ON u.speaker_id = s.id GROUP BY s.id ORDER BY s.name """).fetchall() return [dict(r) for r in rows] @router.post("") def create_speaker(body: CreateSpeakerRequest): db: sqlite3.Connection = db_factory() cur = db.execute("INSERT INTO speakers (name) VALUES (?)", (body.name,)) db.commit() row = db.execute("SELECT * FROM speakers WHERE id=?", (cur.lastrowid,)).fetchone() return dict(row) return router