36 lines
1.2 KiB
Python
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"
|
|
)
|