add: order model, order create api, order create serializer, order item model

This commit is contained in:
behruz-dev
2025-08-29 16:34:15 +05:00
parent 6aa82a74e7
commit 4f45b97aaa
11 changed files with 192 additions and 3 deletions

View File

@@ -0,0 +1,45 @@
from django.db import transaction
from rest_framework import serializers
from core.apps.orders.models import Order, OrderItem
from core.apps.products.models import Product
class OrderItemCreateSerializer(serializers.Serializer):
product_id = serializers.UUIDField()
quantity = serializers.IntegerField()
def validate(self, data):
product = Product.objects.filter(id=data['product_id']).first()
if not product:
raise serializers.ValidationError("Product not found")
data['product'] = product
data['price'] = product.price * data['quantity']
return data
class OrderCreateSerializer(serializers.Serializer):
items = OrderItemCreateSerializer(many=True)
def create(self, validated_data):
with transaction.atomic():
order_items = validated_data.pop('items')
order = Order.objects.create(
user=self.context.get('user'),
)
items = []
total_price = 0
for item in order_items:
items.append(OrderItem(
product=item.get('product'),
price=item.get('price'),
quantity=item.get('quantity'),
order=order,
))
total_price += item.get('price')
OrderItem.objects.bulk_create(items)
order.total_price = total_price
order.save()
return order