github.com/ismailbayram/bigpicture@v0.0.0-20231225173155-e4b21f5efcff/internal/browser/pyproject/cars/resources/views.py (about)

     1  from rest_framework import viewsets, status
     2  from rest_framework.response import Response
     3  from rest_framework import decorators
     4  
     5  from api.permissions import HasGroupPermission, IsCustomerOrReadOnlyPermission
     6  from users.enums import GroupType
     7  from cars.resources.serializers import CarSerializer
     8  from cars.models import Car
     9  from cars.service import CarService
    10  
    11  
    12  class CarViewSet(viewsets.ModelViewSet):
    13      queryset = Car.objects.filter(is_active=True)
    14      serializer_class = CarSerializer
    15      permission_classes = (HasGroupPermission, IsCustomerOrReadOnlyPermission, )
    16      permission_groups = {
    17          'create': [GroupType.customer],
    18          'update': [GroupType.customer],
    19          'list': [GroupType.customer],
    20          'retrieve': [GroupType.customer],
    21          'select': [GroupType.customer],
    22      }
    23  
    24      def list(self, request, *args, **kwargs):
    25          if request.user.is_staff:
    26              return super().list(request, *args, **kwargs)
    27          self.queryset = request.user.customer_profile.cars.filter(is_active=True).order_by("pk")
    28          return super().list(request, *args, **kwargs)
    29  
    30      def perform_create(self, serializer):
    31          service = CarService()
    32          data = serializer.validated_data
    33          serializer.instance = service.create_car(**data, customer_profile=self.request.user.customer_profile)
    34  
    35      def perform_update(self, serializer, **kwargs):
    36          service = CarService()
    37          data = serializer.validated_data
    38          serializer.instance = service.update_car(
    39              car=self.get_object(),
    40              **data
    41          )
    42  
    43      def perform_destroy(self, instance):
    44          service = CarService()
    45          service.deactivate_car(instance)
    46  
    47      @decorators.action(detail=True, methods=['POST'])
    48      def select(self, request, *args, **kwargs):
    49          car = self.get_object()
    50          service = CarService()
    51          return_car = service.select_car(car, request.user.customer_profile)
    52          serializer = self.serializer_class(return_car)
    53          return Response(data=serializer.data, status=status.HTTP_200_OK)