base cart_quantity filed and filter pagination and sort for order

This commit is contained in:
Parsa Nazer
2025-03-13 23:58:42 +03:30
parent 6009c43345
commit d218a8bed4
3 changed files with 58 additions and 5 deletions
+49 -2
View File
@@ -11,6 +11,8 @@ from .models import OrderItemModel, OrderModel, DiscountCode, PaymentModel
from .permissons import CanDeleteCartItemPermissions
from azbankgateways import bankfactories, models as bank_models
from azbankgateways.exceptions import AZBankGatewaysException
from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
from utils.pagination import StructurePagination
try:
pass
except DiscountNotAvailableError:
@@ -107,11 +109,56 @@ class CartView(APIView):
class OrderlistView(APIView):
permission_classes = [IsAuthenticated]
serializer_class = OrderSerializer
pagination_class = StructurePagination
@extend_schema(
parameters=[
OpenApiParameter(
name="limit",
description="لیمیتش",
required=False,
type=OpenApiTypes.INT,
),
OpenApiParameter(
name="offset",
description="افستش",
required=False,
type=OpenApiTypes.INT,
),
OpenApiParameter(
name="status",
description=(
"['CART', 'ADMIN_PENDING', 'PENDING', 'POSTED', 'RECEIVED', 'CANCELED', 'BACK']"
),
required=False,
type=OpenApiTypes.STR,
),
OpenApiParameter(
name="sort",
description=(
"Sort results by one of the following fields:\n"
"['created_at', '-created_at', 'final_price', '-final_price']"
"\nPrefix with `-` for descending order."
),
required=False,
type=OpenApiTypes.STR,
),
]
)
def get(self, request):
user = request.user
orders = OrderModel.objects.filter(user=user).exclude(status="CART")
orders_ser = self.serializer_class(instance=orders, many=True, context={'request': request})
return Response(orders_ser.data, status=status.HTTP_200_OK)
status_filter = request.query_params.get("status", None)
sort = request.query_params.get('sort', None)
if status_filter in ['CART', 'ADMIN_PENDING', 'PENDING', 'POSTED', 'RECEIVED', 'CANCELED', 'BACK']:
orders.filter(status=status_filter)
if sort:
if sort not in ['created_at', '-created_at', 'final_price', '-final_price']:
return Response({'detail': 'پارامتر sort اشتباه است'}, status=status.HTTP_400_BAD_REQUEST)
orders = orders.order_by(sort)
paginator = self.pagination_class()
paginated_orders = paginator.paginate_queryset(orders, request)
orders_ser = self.serializer_class(instance=paginated_orders, many=True, context={'request': request})
return paginator.get_paginated_response(orders_ser.data)