"""# Summary Job 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_jobs(request: Request, limit: int = 20, offset: int = 0) -> dict: """List jobs (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[Job]}``. """ docs = await svc(request, "job").search({}) return paginate([dump(d) for d in docs], limit, offset) async def create_job(request: Request, body: dict, response: Response) -> dict: """Create a job. Args: request (Request): Incoming request. body (dict): Job fields (``id`` ignored). response (Response): Response object; set to 201 on success. Returns: dict: The created job. """ response.status_code = 201 body.pop("id", None) doc = await svc(request, "job").create(body) return dump(doc) async def get_job(request: Request, id: int) -> dict: """Fetch one job by id. Args: request (Request): Incoming request. id (int): Job identifier. Returns: dict: The job document. Raises: HTTPException: 404 when the job does not exist. """ return dump(await read_or_404(svc(request, "job"), id, "job")) async def update_job(request: Request, id: int, body: dict) -> dict: """Replace a job by id. Args: request (Request): Incoming request. id (int): Job identifier. body (dict): Full replacement payload. Returns: dict: The updated job. Raises: HTTPException: 404 when the job does not exist. """ await read_or_404(svc(request, "job"), id, "job") body.pop("id", None) doc = await svc(request, "job").update(id, body) return dump(doc) async def delete_job(request: Request, id: int, response: Response) -> None: """Delete a job by id. Args: request (Request): Incoming request. id (int): Job identifier. response (Response): Response object; set to 204 on success. Raises: HTTPException: 404 when the job does not exist. """ await delete_or_404(svc(request, "job"), id, "job") response.status_code = 204