from typing import Annotated from fastapi import APIRouter, Depends, Query import asyncpg from app.core.pagination import pagination_params from app.core.responses import ok, paginated from app.dependencies import get_db, get_current_user from app.models.orders import OrderCreate from app.services import order_service router = APIRouter(prefix="/orders", tags=["Orders"]) @router.post("", status_code=201) async def create_order( body: OrderCreate, user: dict = Depends(get_current_user), db: asyncpg.Connection = Depends(get_db), ): result = await order_service.create_order(db, str(user["id"]), body) return ok(result) @router.get("") async def list_my_orders( pagination: Annotated[tuple, Depends(pagination_params)], status: str | None = Query(None), user: dict = Depends(get_current_user), db: asyncpg.Connection = Depends(get_db), ): page, per_page, offset = pagination orders, total = await order_service.list_orders(db, page, per_page, offset, user_id=str(user["id"]), status=status) return paginated(orders, total, page, per_page) @router.get("/{order_id}") async def get_order( order_id: str, user: dict = Depends(get_current_user), db: asyncpg.Connection = Depends(get_db), ): order = await order_service.get_order(db, order_id, user_id=str(user["id"])) return ok(order)