42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""# Summary
|
|
|
|
Item route handlers — names must match openapi.yaml operationIds.
|
|
"""
|
|
from fastapi import Request
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from domain.item.models import Item
|
|
|
|
|
|
def svc(request: Request):
|
|
"""Resolve the item CRUD service from app state."""
|
|
return request.app.state.db_resources["item_svc"]
|
|
|
|
|
|
async def create_item(request: Request, body: dict):
|
|
"""Create an item from the request body."""
|
|
data = body.model_dump() if hasattr(body, "model_dump") else dict(body)
|
|
doc = await svc(request).create(Item(**data))
|
|
return JSONResponse(status_code=201, content=doc.model_dump(mode="json", by_alias=True))
|
|
|
|
|
|
async def get_item(request: Request, id: str):
|
|
"""Fetch one item by id."""
|
|
doc = await svc(request).read(id)
|
|
if doc is None:
|
|
return JSONResponse(status_code=404, content={"detail": "item not found"})
|
|
return doc.model_dump(mode="json", by_alias=True)
|
|
|
|
|
|
async def list_items(request: Request):
|
|
"""List all items."""
|
|
docs = await svc(request).search({})
|
|
return [d.model_dump(mode="json", by_alias=True) for d in docs]
|
|
|
|
|
|
async def delete_item(request: Request, id: str):
|
|
"""Delete one item by id."""
|
|
ok = await svc(request).delete(id)
|
|
if not ok:
|
|
return JSONResponse(status_code=404, content={"detail": "item not found"})
|
|
return {"deleted": True} |