rswag-online/backend/app/api/orders.py

54 lines
1.7 KiB
Python

"""Orders API 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
from app.services.order_service import OrderService
router = APIRouter()
def get_order_service(db: AsyncSession = Depends(get_db)) -> OrderService:
return OrderService(db)
@router.get("/{order_id}", response_model=OrderResponse)
async def get_order(
order_id: UUID,
email: str = Query(..., description="Email used for the order"),
service: OrderService = Depends(get_order_service),
):
"""Get order by ID (requires email verification)."""
order = await service.get_order_by_id_and_email(order_id, email)
if not order:
raise HTTPException(status_code=404, detail="Order not found")
return order
@router.get("/{order_id}/tracking")
async def get_order_tracking(
order_id: UUID,
email: str = Query(..., description="Email used for the order"),
service: OrderService = Depends(get_order_service),
):
"""Get tracking information for an order."""
order = await service.get_order_by_id_and_email(order_id, email)
if not order:
raise HTTPException(status_code=404, detail="Order not found")
tracking = []
for item in order.items:
if item.pod_tracking_number:
tracking.append({
"product": item.product_name,
"tracking_number": item.pod_tracking_number,
"tracking_url": item.pod_tracking_url,
"status": item.pod_status,
})
return {"order_id": order_id, "tracking": tracking}