diff --git a/apps/notification/serializers/common.py b/apps/notification/serializers/common.py index 869879cb..67787b2e 100644 --- a/apps/notification/serializers/common.py +++ b/apps/notification/serializers/common.py @@ -95,6 +95,14 @@ class CreateAndUpdateSubscribeSerializer(serializers.ModelSerializer): return subscriber + def update(self, instance, validated_data): + if settings.USE_CELERY: + send_subscribes_update_email.delay(instance.pk) + else: + send_subscribes_update_email(instance.pk) + + return super().update(instance, validated_data) + class UpdateSubscribeSerializer(serializers.ModelSerializer): """Update with code Subscribe serializer.""" diff --git a/apps/notification/views/common.py b/apps/notification/views/common.py index a0534d13..d41ef22c 100644 --- a/apps/notification/views/common.py +++ b/apps/notification/views/common.py @@ -1,6 +1,6 @@ """Notification app common views.""" from django.shortcuts import get_object_or_404 -from rest_framework import generics, permissions +from rest_framework import generics, permissions, status from rest_framework.response import Response from notification import models @@ -15,6 +15,19 @@ class CreateSubscribeView(generics.CreateAPIView): permission_classes = (permissions.AllowAny,) serializer_class = serializers.CreateAndUpdateSubscribeSerializer + def create(self, request, *args, **kwargs): + data = request.data + if 'email' in request.data: + # we shouldn't create new subscriber if we have one + subscriber = models.Subscriber.objects.filter(email=request.data['email']).first() + if subscriber: + data = subscriber # new serializer will simply update instance instead of creating another one + serializer = self.get_serializer(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."""