"""Order routes.""" from fastapi import APIRouter, Depends, Query, status from sqlalchemy.ext.asyncio import AsyncSession from app.api.schemas.order import ( CreateOrderRequest, CreateOrderResponse, OrderDetailResponse, OrderListResponse, ) from app.application.services.order_service import OrderService from app.domain.enums import OrderStatus from app.infra.db.session import get_db_session router = APIRouter(prefix="/orders", tags=["orders"]) order_service = OrderService() @router.post("", response_model=CreateOrderResponse, status_code=status.HTTP_201_CREATED) async def create_order( payload: CreateOrderRequest, session: AsyncSession = Depends(get_db_session), ) -> CreateOrderResponse: """Create a new image pipeline order.""" return await order_service.create_order(session, payload) @router.get("", response_model=OrderListResponse) async def list_orders( page: int = Query(default=1, ge=1), limit: int = Query(default=20, ge=1, le=100), query: str | None = Query(default=None, min_length=1), status_filter: OrderStatus | None = Query(default=None, alias="status"), order_id: int | None = Query(default=None, ge=1), session: AsyncSession = Depends(get_db_session), ) -> OrderListResponse: """Fetch recent orders for dashboard overview pages.""" return await order_service.list_orders( session, page=page, limit=limit, query=query, status_filter=status_filter, order_id=order_id, ) @router.get("/{order_id}", response_model=OrderDetailResponse) async def get_order( order_id: int, session: AsyncSession = Depends(get_db_session), ) -> OrderDetailResponse: """Fetch order details.""" return await order_service.get_order(session, order_id)