58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""Admin order management endpoints."""
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, HTTPException, Depends, Query
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database import get_db
|
|
from app.schemas.order import OrderResponse, OrderStatus
|
|
from app.services.order_service import OrderService
|
|
from app.services.auth_service import get_current_admin
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
def get_order_service(db: AsyncSession = Depends(get_db)) -> OrderService:
|
|
return OrderService(db)
|
|
|
|
|
|
@router.get("", response_model=list[OrderResponse])
|
|
async def list_orders(
|
|
status: OrderStatus | None = None,
|
|
limit: int = Query(default=50, le=100),
|
|
offset: int = Query(default=0, ge=0),
|
|
service: OrderService = Depends(get_order_service),
|
|
_admin=Depends(get_current_admin),
|
|
):
|
|
"""List all orders (admin only)."""
|
|
orders = await service.list_orders(status=status, limit=limit, offset=offset)
|
|
return orders
|
|
|
|
|
|
@router.get("/{order_id}", response_model=OrderResponse)
|
|
async def get_order(
|
|
order_id: UUID,
|
|
service: OrderService = Depends(get_order_service),
|
|
_admin=Depends(get_current_admin),
|
|
):
|
|
"""Get order details (admin only)."""
|
|
order = await service.get_order_by_id(order_id)
|
|
if not order:
|
|
raise HTTPException(status_code=404, detail="Order not found")
|
|
return order
|
|
|
|
|
|
@router.put("/{order_id}/status")
|
|
async def update_order_status(
|
|
order_id: UUID,
|
|
status: OrderStatus,
|
|
service: OrderService = Depends(get_order_service),
|
|
_admin=Depends(get_current_admin),
|
|
):
|
|
"""Update order status (admin only)."""
|
|
order = await service.update_status(order_id, status)
|
|
if not order:
|
|
raise HTTPException(status_code=404, detail="Order not found")
|
|
return {"status": "updated", "order_id": order_id, "new_status": status}
|