add: add order list api

This commit is contained in:
behruz-dev
2025-08-29 16:49:56 +05:00
parent 4f45b97aaa
commit 368ec932a6
5 changed files with 56 additions and 4 deletions

View File

@@ -11,3 +11,4 @@ POSTGRES_PORT=5432
COMMAND=sh ./resources/scripts/entrypoint-server.sh COMMAND=sh ./resources/scripts/entrypoint-server.sh
PORT=8080 PORT=8080
CACHEOPS_ENABLED=True

View File

@@ -1,3 +1,5 @@
from config.env import env
CACHES = { CACHES = {
"default": { "default": {
"BACKEND": 'django_redis.cache.RedisCache', "BACKEND": 'django_redis.cache.RedisCache',
@@ -19,6 +21,19 @@ CACHEOPS = {
"ops": "all", "ops": "all",
"timeout": 60 * 5, "timeout": 60 * 5,
}, },
'orders.*': {
'ops': 'all',
'timeout': 60 * 5,
},
'products.*': {
'ops': 'all',
'timeout': 60 * 5,
},
'shared.*': {
'ops': 'all',
'timeout': 60 * 5,
} }
}
CACHEOPS_DEGRADE_ON_FAILURE = True CACHEOPS_DEGRADE_ON_FAILURE = True
CACHEOPS_ENABLED = False CACHEOPS_ENABLED = env.bool('CACHEOPS_ENABLED', False)

View File

@@ -4,6 +4,7 @@ from rest_framework import serializers
from core.apps.orders.models import Order, OrderItem from core.apps.orders.models import Order, OrderItem
from core.apps.products.models import Product from core.apps.products.models import Product
from core.apps.products.serializers.product import ProductListSerializer
class OrderItemCreateSerializer(serializers.Serializer): class OrderItemCreateSerializer(serializers.Serializer):
@@ -43,3 +44,22 @@ class OrderCreateSerializer(serializers.Serializer):
order.save() order.save()
return order return order
class OrderItemListSerializer(serializers.ModelSerializer):
product = ProductListSerializer()
class Meta:
model = OrderItem
fields = [
'id', 'product', 'price', 'quantity'
]
class OrderListSerializer(serializers.ModelSerializer):
items = OrderItemListSerializer(many=True)
class Meta:
model = Order
fields = [
'id', 'total_price', 'items'
]

View File

@@ -4,4 +4,5 @@ from core.apps.orders.views import order as order_views
urlpatterns = [ urlpatterns = [
path('order/create/', order_views.OrderCreateApiView.as_view()), path('order/create/', order_views.OrderCreateApiView.as_view()),
path('order/list/', order_views.OrderListApiView.as_view()),
] ]

View File

@@ -26,3 +26,18 @@ class OrderCreateApiView(generics.GenericAPIView):
}, },
status=400 status=400
) )
class OrderListApiView(generics.GenericAPIView):
serializer_class = serializers.OrderListSerializer
queryset = Order.objects.select_related('items', 'items__product')
permission_classes = [permissions.IsAuthenticated]
def get(self, request):
orders = Order.objects.filter(user=request.user)
page = self.paginate_queryset(orders)
if page is not None:
serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.serializer_class(orders, many=True)
return Response(serializer.data, status=200)