85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
from rest_framework import generics, views
|
|
from apps.shop.models import Cart as CartModel, Product as ProductModel
|
|
from utils.get_user_workspace import get_user_workspace_uuid
|
|
from utils.get_cuser_role import get_cuser_role_uuid
|
|
from apps.shop.selectors import list_cart
|
|
from rest_framework import serializers
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from utils import custom_permissions
|
|
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
|
|
from utils.get_cuser_role import get_cuser_role
|
|
from rest_framework.response import Response
|
|
from apps.shop.services import add_to_cart, delete_cart_iteam
|
|
from rest_framework import status
|
|
|
|
|
|
class CartListApi(generics.ListAPIView):
|
|
|
|
class OutputSerializer(serializers.ModelSerializer):
|
|
|
|
class ProductSerializer(serializers.ModelSerializer):
|
|
|
|
class CategorySerializer(serializers.Serializer):
|
|
name = serializers.CharField()
|
|
|
|
category = CategorySerializer()
|
|
|
|
class Meta:
|
|
model = ProductModel
|
|
exclude = ('sys_ws', 'created_at', 'updated_at', 'acc_code', 'attr')
|
|
|
|
product = ProductSerializer()
|
|
|
|
class Meta:
|
|
model = CartModel
|
|
exclude = ('sys_ws', 'created_at', 'updated_at', 'cuser_role')
|
|
|
|
serializer_class = OutputSerializer
|
|
|
|
def get_queryset(self):
|
|
user_workspace_uuid = get_user_workspace_uuid(self.request)
|
|
cuser_role_uuid = get_cuser_role_uuid(self.request)
|
|
return list_cart(workspace_uuid=user_workspace_uuid, cuser_role_uuid=cuser_role_uuid)
|
|
|
|
|
|
class CartCreateApi(views.APIView):
|
|
|
|
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
|
|
|
|
class InputSerializer(serializers.Serializer):
|
|
product_id = serializers.IntegerField(required=True)
|
|
quantity = serializers.IntegerField(required=True)
|
|
|
|
class OutputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = CartModel
|
|
exclude = ('sys_ws', )
|
|
|
|
def post(self, request):
|
|
serializer = self.InputSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
user_workspace = get_user_workspace(request)
|
|
cuser_role = get_cuser_role(request)
|
|
|
|
cart_obj = add_to_cart(**serializer.validated_data, workspace=user_workspace, cuser_role=cuser_role)
|
|
|
|
output = self.OutputSerializer(cart_obj)
|
|
|
|
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
|
|
|
|
|
class CartDeleteApi(views.APIView):
|
|
|
|
def delete(self, request, cart_id: int):
|
|
|
|
user_workspace_uuid = get_user_workspace_uuid(request=request)
|
|
cuser_role_uuid = get_cuser_role_uuid(request=request)
|
|
cart_obj = delete_cart_iteam(cart_id=cart_id, cuser_role_uuid=cuser_role_uuid, workspace_uuid=user_workspace_uuid)
|
|
|
|
output = {
|
|
'order_id': cart_obj,
|
|
'message': 'deleted successfully'
|
|
}
|
|
|
|
return Response(data=output, status=status.HTTP_200_OK) |