from decimal import Decimal from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from app.api import deps from app.models.order import Order, OrderItem from app.schemas.order import OrderCreate, OrderOut router = APIRouter() @router.post("/", response_model=OrderOut, status_code=status.HTTP_202_ACCEPTED) def create_order(order_in: OrderCreate, db: Session = Depends(deps.get_db)): """ Submit a new customer order. Returns status code 202 (Accepted) as the order is pending verification. """ try: total = Decimal("0.00") for item in order_in.items: total += item.price * item.quantity db_order = Order( customer_id=order_in.customer_id, status="PENDING", total_price=total ) db.add(db_order) db.flush() for item in order_in.items: db_item = OrderItem( order_id=db_order.id, product_id=item.product_id, quantity=item.quantity, price=item.price, ) db.add(db_item) db.commit() db.refresh(db_order) return db_order except Exception: db.rollback() raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Could not initialize checkout process.", )