diff --git a/apps/notification/models.py b/apps/notification/models.py index c9e15efc..d1ebf055 100644 --- a/apps/notification/models.py +++ b/apps/notification/models.py @@ -46,10 +46,12 @@ class SubscriberManager(models.Manager): obj.update_code = generate_string_code() obj.save() obj.subscription_types.set(subscription_types) + obj.subscribe_set.update(unsubscribe_date=None) else: obj = self.model.objects.create(user=user, email=email, ip_address=ip_address, country_code=country_code, locale=locale) obj.subscription_types.set(subscription_types) + obj.subscribe_set.update(unsubscribe_date=None) return obj def associate_user(self, user): @@ -108,20 +110,7 @@ class Subscriber(ProjectBaseMixin): def unsubscribe(self, query: dict): """Unsubscribe user.""" - - subscription_types = query.get('subscription_types') - - old_subscribes = self.subscription_types.objects.all() - subscribes = self.subscription_types.objects.filter(pk__in=[subscription_types]) - self.subscription_types = subscribes - - new_ids = set(existing_answer.answer.id for existing_answer in subscribes) - old_subscribes_types = [sub for sub in old_subscribes if sub.id not in new_ids] - old_subscribes = Subscribe.objects.filter(subscriber=self, subscription_types__in=old_subscribes_types) - old_subscribes.update(unsubscribe_date=now()) - old_subscribes.save() - - self.save() + self.subscribe_set.update(unsubscribe_date=now()) @property def send_to(self): diff --git a/apps/notification/serializers/common.py b/apps/notification/serializers/common.py index cc130f5c..036d8929 100644 --- a/apps/notification/serializers/common.py +++ b/apps/notification/serializers/common.py @@ -88,7 +88,7 @@ class SubscribeSerializer(serializers.ModelSerializer): """Subscribe serializer.""" email = serializers.EmailField(required=False, source='send_to') - subscription_types = SubscriptionTypeSerializer(read_only=True) + subscription_types = SubscriptionTypeSerializer(read_only=True, source='subscription_types_set') subscribe_objects = SubscribeObjectSerializer(read_only=True) class Meta: diff --git a/apps/notification/views/common.py b/apps/notification/views/common.py index a6e41b29..f7fbf9fe 100644 --- a/apps/notification/views/common.py +++ b/apps/notification/views/common.py @@ -37,7 +37,7 @@ class SubscribeInfoAuthUserView(generics.ListAPIView): return queryset.filter(user=user) -class UnsubscribeView(generics.GenericAPIView): +class UnsubscribeView(generics.UpdateAPIView): """Unsubscribe view.""" lookup_field = 'update_code'