feat: add requests CRUD endpoints
This commit is contained in:
@@ -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})
|
||||
Reference in New Issue
Block a user