from typing import List from sqlalchemy.orm import Session from app.models.cart import CartItem from app.models.order import Order, OrderItem from app.schemas.order import OrderCreate, OrderUpdate from app.services.base import CRUDBase class OrderService(CRUDBase[Order, OrderCreate, OrderUpdate]): def get_user_orders( self, db: Session, *, user_id: int, skip: int = 0, limit: int = 100 ) -> List[Order]: return ( db.query(Order) .filter(Order.user_id == user_id) .offset(skip) .limit(limit) .all() ) def create_from_cart( self, db: Session, *, user_id: int, cart_items: List[CartItem], shipping_address: str ) -> Order: # Calculate total amount total_amount = sum(item.unit_price * item.quantity for item in cart_items) # Create order db_obj = Order( user_id=user_id, total_amount=total_amount, shipping_address=shipping_address ) db.add(db_obj) db.flush() # Flush to get the order ID # Create order items for cart_item in cart_items: order_item = OrderItem( order_id=db_obj.id, product_id=cart_item.product_id, quantity=cart_item.quantity, unit_price=cart_item.unit_price ) db.add(order_item) db.commit() db.refresh(db_obj) return db_obj order_service = OrderService(Order)