# 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
93 lines
3.4 KiB
Python
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
|