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)