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)