ifixkart-backend/app/api/v1/routers/CheckoutRouter.py

36 lines
1.2 KiB
Python

"""
@router CheckoutRouter (Backend/app/api/v1/routers/CheckoutRouter.py)
@purpose Database-driven customer checkout pipeline delegating to unified OrderService.
"""
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from typing import Optional
from sqlalchemy.orm import Session
from app.core.database.db_session import get_db
from app.api.v1.routers.CustomerProfileRouter import get_current_customer
from app.models.EcomCustomerModel import EcomCustomer
from app.services.OrderService import OrderService
router = APIRouter(prefix="/api/v1/checkout", tags=["Checkout Engine"])
class CheckoutCreateRequest(BaseModel):
address_id: str
payment_method: str = "COD"
coupon_code: Optional[str] = None
@router.post("/create")
def create_checkout_order(
payload: CheckoutCreateRequest,
customer: EcomCustomer = Depends(get_current_customer),
db: Session = Depends(get_db)
):
"""
Validate cart item stock, register checkout order reservation, and empty the customer's cart.
"""
return OrderService.create_ecommerce_order(
db=db,
customer=customer,
address_id=payload.address_id,
payment_method=payload.payment_method or "COD"
)