Files
api-bashgah/apps/order/views.py
T
2026-06-15 10:57:28 +03:30

89 lines
2.8 KiB
Python

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.generics import ListAPIView
from rest_framework import serializers
from rest_framework import response
from rest_framework import status
from apps.order.models import Order as OrderModel
from apps.order.services import create_order
from apps.order.selector import retrieve_order
from utils.tools.inline_serializer import inline_serializer
from rest_framework.permissions import IsAuthenticated
from utils.standard_pagination import StandardPagination
# Create your views here.
class ListOrderApiView(ListAPIView):
class OutputSerializer(serializers.ModelSerializer):
product = inline_serializer(many=False, fields={
'id': serializers.IntegerField(),
'desc': serializers.CharField(),
'name': serializers.CharField(),
'emtiyaz': serializers.IntegerField(),
'price': serializers.IntegerField(),
'image': serializers.ImageField(),
})
status_text = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = OrderModel
fields = '__all__'
permission_classes = (IsAuthenticated,)
serializer_class = OutputSerializer
pagination_class = StandardPagination
def get_queryset(self):
user = self.request.user
return OrderModel.objects.filter(cuser_mojri=user)
class RetrieveOrderApiView(APIView):
permission_classes = (IsAuthenticated,)
class OutputSerializer(serializers.ModelSerializer):
product = inline_serializer(many=False, fields={
'id': serializers.IntegerField(),
'desc': serializers.CharField(),
'name': serializers.CharField(),
'emtiyaz': serializers.IntegerField(),
'price': serializers.IntegerField(),
'image': serializers.ImageField(),
})
status_text = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = OrderModel
fields = '__all__'
def get(self, request, order_id):
order = retrieve_order(order_id=order_id)
serializer = self.OutputSerializer(order)
return response.Response(data=serializer.data, status=status.HTTP_200_OK)
class CreateOrderApiView(APIView):
permission_classes = (IsAuthenticated, )
class InputSerializer(serializers.Serializer):
product_id = serializers.IntegerField()
def post(self, request):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = request.user
order = create_order(**serializer.validated_data, cuser=user)
return response.Response(data={'order': order.id}, status=status.HTTP_201_CREATED)