Fixed subscriptions

This commit is contained in:
dormantman 2020-01-21 12:56:54 +03:00
parent 66780ef093
commit 36b9474e36
4 changed files with 23 additions and 22 deletions

View File

@ -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

View File

@ -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."""

View File

@ -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

View File

@ -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):