from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from app.database.database import get_db from app.schemas.order import OrderCreate, OrderResponse from app.services.order import ( create_order, get_order_by_id, get_user_orders, update_order_status, ) from app.services.auth import verify_token router = APIRouter(prefix="/api/orders", tags=["orders"]) def get_user_id_from_token(token: str) -> int: user_id = verify_token(token) if user_id is None: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token", ) return user_id @router.post("", response_model=OrderResponse) def create_new_order(token: str, order_data: OrderCreate, db: Session = Depends(get_db)): user_id = get_user_id_from_token(token) order = create_order(db, user_id, order_data) if not order: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Cannot create order with empty cart", ) return order @router.get("/user/orders", response_model=List[OrderResponse]) def get_user_order_history(token: str, db: Session = Depends(get_db)): user_id = get_user_id_from_token(token) return get_user_orders(db, user_id) @router.get("/{order_id}", response_model=OrderResponse) def get_order(order_id: int, token: str, db: Session = Depends(get_db)): user_id = get_user_id_from_token(token) order = get_order_by_id(db, order_id) if not order or order.user_id != user_id: raise HTTPException(status_code=404, detail="Order not found") return order