gault-millau/apps/notification/views/common.py
Anatoly 25c63b8097 Merge branch 'develop' into feature/roles
# Conflicts:
#	apps/account/models.py
#	apps/collection/views/back.py
#	apps/comment/views/back.py
#	apps/establishment/models.py
#	apps/establishment/views/back.py
#	apps/news/views.py
#	apps/partner/views/back.py
2020-01-30 10:56:46 +03:00

93 lines
3.4 KiB
Python

"""Notification app common views."""
from django.shortcuts import get_object_or_404
from rest_framework import generics, permissions, status
from rest_framework.response import Response
from notification import models
from notification.serializers import common as serializers
from utils.methods import get_user_ip
from utils.permissions import IsAuthenticatedAndTokenIsValid
class CreateSubscribeView(generics.CreateAPIView):
"""Create subscribe View."""
queryset = models.Subscriber.objects.all()
permission_classes = (permissions.AllowAny,)
serializer_class = serializers.CreateAndUpdateSubscribeSerializer
def create(self, request, *args, **kwargs):
data = request.data
instance = None
if 'email' in request.data:
# we shouldn't create new subscriber if we have one
instance = models.Subscriber.objects.filter(email=request.data['email']).first()
serializer = self.get_serializer(data=data) if instance is None else self.get_serializer(instance, data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
class UpdateSubscribeView(generics.UpdateAPIView):
"""Subscribe info view."""
lookup_field = 'update_code'
lookup_url_kwarg = 'code'
permission_classes = (permissions.AllowAny,)
queryset = models.Subscriber.objects.all()
serializer_class = serializers.UpdateSubscribeSerializer
class SubscribeInfoView(generics.RetrieveAPIView):
"""Subscribe info view."""
lookup_field = 'update_code'
lookup_url_kwarg = 'code'
permission_classes = (permissions.AllowAny,)
queryset = models.Subscriber.objects.all()
serializer_class = serializers.SubscribeSerializer
class SubscribeInfoAuthUserView(generics.RetrieveAPIView):
"""Subscribe info auth user view."""
permission_classes = (IsAuthenticatedAndTokenIsValid,)
serializer_class = serializers.SubscribeSerializer
lookup_field = None
def get_object(self):
return get_object_or_404(models.Subscriber, user=self.request.user)
class UnsubscribeView(generics.UpdateAPIView):
"""Unsubscribe view."""
lookup_field = 'update_code'
lookup_url_kwarg = 'code'
permission_classes = (permissions.AllowAny,)
queryset = models.Subscriber.objects.all()
serializer_class = serializers.SubscribeSerializer
def put(self, request, *args, **kw):
obj = self.get_object()
obj.unsubscribe()
serializer = self.get_serializer(instance=obj)
return Response(data=serializer.data)
class UnsubscribeAuthUserView(generics.GenericAPIView):
"""Unsubscribe auth user view."""
permission_classes = (IsAuthenticatedAndTokenIsValid,)
queryset = models.Subscriber.objects.all()
serializer_class = serializers.SubscribeSerializer
def patch(self, request, *args, **kw):
user = request.user
obj = models.Subscriber.objects.filter(user=user).first()
obj.unsubscribe()
serializer = self.get_serializer(instance=obj)
return Response(data=serializer.data)
class SubscriptionTypesView(generics.ListAPIView):
pagination_class = None
permission_classes = (permissions.AllowAny,)
queryset = models.SubscriptionType.objects.all()
serializer_class = serializers.SubscriptionTypeSerializer