feat: add requests CRUD endpoints

This commit is contained in:
2026-05-25 18:48:16 +02:00
parent 3b665715ff
commit 67d479f8ce
5 changed files with 400 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
from fastapi import APIRouter, Depends, Query
from starlette.responses import JSONResponse
from src.backend.api.dependencies import verify_api_key
from src.backend.db.database import (
get_db,
create_request,
get_request,
list_requests,
delete_request,
)
from src.backend.models.api import RequestCreate, ok, fail
router = APIRouter(
prefix="/requests",
tags=["requests"],
dependencies=[Depends(verify_api_key)],
)
async def _get_db():
db = await get_db()
try:
yield db
finally:
await db.close()
@router.post("", summary="Create request")
async def create(body: RequestCreate, db=Depends(_get_db)):
req = await create_request(
db,
prompt=body.prompt,
topic_id=body.topic_id,
session_id=body.session_id,
model=body.model,
summarize=body.summarize,
)
if req is None:
return JSONResponse(
status_code=404,
content=fail("NOT_FOUND", "Topic not found"),
)
if req == "SESSION_CLOSED":
return JSONResponse(
status_code=410,
content=fail("SESSION_CLOSED", "Session is closed"),
)
return JSONResponse(
status_code=202,
content=ok({
"id": req["id"],
"session_id": req["session_id"],
"status": req["status"],
"created_at": req["created_at"],
}),
)
@router.get("", summary="List requests")
async def list_all(
status: str | None = Query(None),
topic_id: str | None = Query(None),
session_id: str | None = Query(None),
db=Depends(_get_db),
):
reqs = await list_requests(db, status=status, topic_id=topic_id, session_id=session_id)
return ok(reqs)
@router.get("/{request_id}", summary="Get request")
async def get_one(request_id: str, db=Depends(_get_db)):
req = await get_request(db, request_id)
if not req:
return JSONResponse(
status_code=404,
content=fail("NOT_FOUND", "Request not found"),
)
return ok(req)
@router.delete("/{request_id}", summary="Delete request")
async def delete(request_id: str, db=Depends(_get_db)):
deleted = await delete_request(db, request_id)
if not deleted:
return JSONResponse(
status_code=404,
content=fail("NOT_FOUND", "Request not found or not in pending status"),
)
return ok({"deleted": True})