80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
from rest_framework import permissions, status
|
|
from rest_framework.response import Response
|
|
from rest_framework import viewsets, mixins, generics
|
|
|
|
from collection import models, serializers
|
|
from utils.views import BindObjectMixin
|
|
|
|
|
|
class CollectionViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
|
"""ViewSet for Collection model."""
|
|
|
|
pagination_class = None
|
|
permission_classes = (permissions.AllowAny,)
|
|
queryset = models.Collection.objects.all()
|
|
serializer_class = serializers.CollectionBackOfficeSerializer
|
|
|
|
|
|
class GuideBaseView(generics.GenericAPIView):
|
|
"""ViewSet for Guide model."""
|
|
pagination_class = None
|
|
queryset = models.Guide.objects.all()
|
|
serializer_class = serializers.GuideBaseSerializer
|
|
permission_classes = (permissions.IsAuthenticated,)
|
|
|
|
|
|
class GuideFilterBaseView(generics.GenericAPIView):
|
|
"""ViewSet for GuideFilter model."""
|
|
pagination_class = None
|
|
queryset = models.GuideFilter.objects.all()
|
|
serializer_class = serializers.GuideFilterBaseSerializer
|
|
permission_classes = (permissions.IsAuthenticated,)
|
|
|
|
|
|
class CollectionBackOfficeViewSet(mixins.CreateModelMixin,
|
|
mixins.UpdateModelMixin,
|
|
mixins.DestroyModelMixin,
|
|
mixins.RetrieveModelMixin,
|
|
BindObjectMixin,
|
|
CollectionViewSet):
|
|
"""ViewSet for Collection model for BackOffice users."""
|
|
|
|
permission_classes = (permissions.IsAuthenticated,)
|
|
bind_object_serializer_class = serializers.CollectionBindObjectSerializer
|
|
|
|
def perform_binding(self, serializer):
|
|
data = serializer.validated_data
|
|
collection = data.pop('collection')
|
|
obj_type = data.get('type')
|
|
related_object = data.get('related_object')
|
|
if obj_type == self.bind_object_serializer_class.ESTABLISHMENT:
|
|
collection.establishments.add(related_object)
|
|
elif obj_type == self.bind_object_serializer_class.PRODUCT:
|
|
collection.products.add(related_object)
|
|
|
|
def perform_unbinding(self, serializer):
|
|
data = serializer.validated_data
|
|
collection = data.pop('collection')
|
|
obj_type = data.get('type')
|
|
related_object = data.get('related_object')
|
|
if obj_type == self.bind_object_serializer_class.ESTABLISHMENT:
|
|
collection.establishments.remove(related_object)
|
|
elif obj_type == self.bind_object_serializer_class.PRODUCT:
|
|
collection.products.remove(related_object)
|
|
|
|
|
|
class GuideListCreateView(GuideBaseView,
|
|
generics.ListCreateAPIView):
|
|
"""ViewSet for Guide model for BackOffice users."""
|
|
def post(self, request, *args, **kwargs):
|
|
super().create(request, *args, **kwargs)
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
|
|
class GuideFilterCreateView(GuideFilterBaseView,
|
|
generics.CreateAPIView):
|
|
"""ViewSet for GuideFilter model for BackOffice users."""
|
|
def post(self, request, *args, **kwargs):
|
|
super().create(request, *args, **kwargs)
|
|
return Response(status=status.HTTP_200_OK)
|