From 36b9474e36639cfe5e1f6736f08597493825a719 Mon Sep 17 00:00:00 2001 From: dormantman Date: Tue, 21 Jan 2020 12:56:54 +0300 Subject: [PATCH] Fixed subscriptions --- apps/notification/models.py | 22 ++++++++++++++-------- apps/notification/serializers/common.py | 14 +++----------- apps/notification/tasks.py | 7 +++++-- apps/notification/views/common.py | 2 +- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/apps/notification/models.py b/apps/notification/models.py index 3f52f5cc..9ddd955d 100644 --- a/apps/notification/models.py +++ b/apps/notification/models.py @@ -30,17 +30,20 @@ class SubscriberManager(models.Manager): locale=None, subscription_types=None, *args, **kwargs): """Make subscriber and update info.""" # search existing object + if not user: user = User.objects.filter(email=email).first() if user: - obj = self.model.objects.filter(models.Q(user=user) | models.Q(email=user.email)).first() + obj = self.model.objects.filter(user=user).first() + + if obj is None: + obj = self.model.objects.filter(email=user.email).first() + self.associate_user(user=user) + else: obj = self.model.objects.filter(email=email).first() - if subscription_types is None: - subscription_types = [] - # update or create if obj: if user: @@ -54,17 +57,20 @@ class SubscriberManager(models.Manager): obj.country_code = country_code obj.locale = locale obj.update_code = generate_string_code() - obj.subscription_types.set(subscription_types) - obj.subscribe_set.update(unsubscribe_date=None) + obj.save() else: obj = self.model.objects.create( user=user, email=email, ip_address=ip_address, country_code=country_code, locale=locale, - subscription_types=subscription_types, ) + if subscription_types is not None: + obj.subscription_types.set(subscription_types) + obj.subscribe_set.update(unsubscribe_date=None) + obj.save() + return obj def associate_user(self, user): @@ -76,7 +82,7 @@ class SubscriberManager(models.Manager): if obj: obj.user = user - obj.email = None + obj.email = user.email obj.save() return obj diff --git a/apps/notification/serializers/common.py b/apps/notification/serializers/common.py index 4acb9deb..869879cb 100644 --- a/apps/notification/serializers/common.py +++ b/apps/notification/serializers/common.py @@ -28,7 +28,7 @@ class SubscriptionTypeSerializer(serializers.ModelSerializer): ) -class CreateSubscribeSerializer(serializers.ModelSerializer): +class CreateAndUpdateSubscribeSerializer(serializers.ModelSerializer): """Create and Update Subscribe serializer.""" email = serializers.EmailField(required=False, source='send_to') @@ -89,20 +89,12 @@ class CreateSubscribeSerializer(serializers.ModelSerializer): subscriber = models.Subscriber.objects.make_subscriber(**validated_data) if settings.USE_CELERY: - send_subscribes_update_email.delay(subscriber.pk) + send_subscribes_update_email.delay(subscriber.email) else: - send_subscribes_update_email(subscriber.pk) + send_subscribes_update_email(subscriber.email) 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/tasks.py b/apps/notification/tasks.py index 38b11cd5..5129ad59 100644 --- a/apps/notification/tasks.py +++ b/apps/notification/tasks.py @@ -10,8 +10,11 @@ from notification import models @shared_task -def send_subscribes_update_email(subscriber_id): - subscriber = models.Subscriber.objects.get(id=subscriber_id) +def send_subscribes_update_email(email): + subscriber = models.Subscriber.objects.filter(email=email).first() + + if subscriber is None: + return country_code = subscriber.country_code diff --git a/apps/notification/views/common.py b/apps/notification/views/common.py index 9830683d..b6584394 100644 --- a/apps/notification/views/common.py +++ b/apps/notification/views/common.py @@ -13,7 +13,7 @@ class CreateSubscribeView(generics.CreateAPIView): queryset = models.Subscriber.objects.all() permission_classes = (permissions.AllowAny,) - serializer_class = serializers.CreateSubscribeSerializer + serializer_class = serializers.CreateAndUpdateSubscribeSerializer class UpdateSubscribeView(generics.UpdateAPIView):