"""# Summary Item route handlers — names must match openapi.yaml operationIds. """ from fastapi import Request, Response from interfaces._common import delete_or_404, dump, paginate, read_or_404, svc async def list_items(request: Request, limit: int = 20, offset: int = 0) -> dict: """List items (paginated). ``limit=0`` returns all remaining items. Args: request (Request): Incoming request. limit (int): Page size. Defaults to 20. offset (int): Items to skip. Defaults to 0. Returns: dict: ``{"total": int, "items": list[Item]}``. """ docs = await svc(request, "item").search({}) return paginate([dump(d) for d in docs], limit, offset) async def create_item(request: Request, body: dict, response: Response) -> dict: """Create an item. Args: request (Request): Incoming request. body (dict): Item fields (``id`` ignored). response (Response): Response object; set to 201 on success. Returns: dict: The created item. """ response.status_code = 201 body.pop("id", None) doc = await svc(request, "item").create(body) return dump(doc) async def get_item(request: Request, id: int) -> dict: """Fetch one item by id. Args: request (Request): Incoming request. id (int): Item identifier. Returns: dict: The item document. Raises: HTTPException: 404 when the item does not exist. """ return dump(await read_or_404(svc(request, "item"), id, "item")) async def update_item(request: Request, id: int, body: dict) -> dict: """Replace an item by id. Args: request (Request): Incoming request. id (int): Item identifier. body (dict): Full replacement payload. Returns: dict: The updated item. Raises: HTTPException: 404 when the item does not exist. """ await read_or_404(svc(request, "item"), id, "item") body.pop("id", None) doc = await svc(request, "item").update(id, body) return dump(doc) async def delete_item(request: Request, id: int, response: Response) -> None: """Delete an item by id. Args: request (Request): Incoming request. id (int): Item identifier. response (Response): Response object; set to 204 on success. Raises: HTTPException: 404 when the item does not exist. """ await delete_or_404(svc(request, "item"), id, "item") response.status_code = 204