53 lines
1.5 KiB
Python

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)