Merge branch 'feature/subscriptions' into 'develop'
Added method subscribe with code See merge request gm/gm-backend!204
This commit is contained in:
commit
e9f07a4aa0
|
|
@ -29,10 +29,11 @@ class SubscriptionTypeSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class CreateSubscribeSerializer(serializers.ModelSerializer):
|
class CreateSubscribeSerializer(serializers.ModelSerializer):
|
||||||
"""Create Subscribe serializer."""
|
"""Create and Update Subscribe serializer."""
|
||||||
|
|
||||||
email = serializers.EmailField(required=False, source='send_to')
|
email = serializers.EmailField(required=False, source='send_to')
|
||||||
subscription_types = serializers.PrimaryKeyRelatedField(many=True, queryset=models.SubscriptionType.objects.all())
|
subscription_types = serializers.PrimaryKeyRelatedField(many=True, queryset=models.SubscriptionType.objects.all())
|
||||||
|
country_code = serializers.CharField(required=False, allow_blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -42,7 +43,10 @@ class CreateSubscribeSerializer(serializers.ModelSerializer):
|
||||||
'email',
|
'email',
|
||||||
'subscription_types',
|
'subscription_types',
|
||||||
'link_to_unsubscribe',
|
'link_to_unsubscribe',
|
||||||
|
'country_code',
|
||||||
|
'update_code'
|
||||||
)
|
)
|
||||||
|
read_only_fields = ('link_to_unsubscribe', 'update_code')
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
"""Validate attrs."""
|
"""Validate attrs."""
|
||||||
|
|
@ -64,7 +68,13 @@ class CreateSubscribeSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
# append info
|
# append info
|
||||||
attrs['email'] = email
|
attrs['email'] = email
|
||||||
attrs['country_code'] = request.country_code
|
|
||||||
|
if request.country_code:
|
||||||
|
attrs['country_code'] = request.country_code
|
||||||
|
|
||||||
|
else:
|
||||||
|
attrs['country_code'] = attrs.get('country_code')
|
||||||
|
|
||||||
attrs['locale'] = request.locale
|
attrs['locale'] = request.locale
|
||||||
attrs['ip_address'] = get_user_ip(request)
|
attrs['ip_address'] = get_user_ip(request)
|
||||||
|
|
||||||
|
|
@ -94,6 +104,50 @@ class CreateSubscribeSerializer(serializers.ModelSerializer):
|
||||||
return super().update(instance, validated_data)
|
return super().update(instance, validated_data)
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateSubscribeSerializer(serializers.ModelSerializer):
|
||||||
|
"""Update with code Subscribe serializer."""
|
||||||
|
|
||||||
|
subscription_types = serializers.PrimaryKeyRelatedField(many=True, queryset=models.SubscriptionType.objects.all())
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
|
||||||
|
model = models.Subscriber
|
||||||
|
fields = (
|
||||||
|
'subscription_types',
|
||||||
|
'link_to_unsubscribe',
|
||||||
|
'update_code'
|
||||||
|
)
|
||||||
|
read_only_fields = ('link_to_unsubscribe', 'update_code')
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
"""Validate attrs."""
|
||||||
|
request = self.context.get('request')
|
||||||
|
user = request.user
|
||||||
|
|
||||||
|
if request.country_code:
|
||||||
|
attrs['country_code'] = request.country_code
|
||||||
|
|
||||||
|
else:
|
||||||
|
attrs['country_code'] = attrs.get('country_code')
|
||||||
|
|
||||||
|
attrs['locale'] = request.locale
|
||||||
|
attrs['ip_address'] = get_user_ip(request)
|
||||||
|
|
||||||
|
if user.is_authenticated:
|
||||||
|
attrs['user'] = user
|
||||||
|
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
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 SubscribeObjectSerializer(serializers.ModelSerializer):
|
class SubscribeObjectSerializer(serializers.ModelSerializer):
|
||||||
"""Subscribe serializer."""
|
"""Subscribe serializer."""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ app_name = "notification"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('subscribe/', common.CreateSubscribeView.as_view(), name='create-subscribe'),
|
path('subscribe/', common.CreateSubscribeView.as_view(), name='create-subscribe'),
|
||||||
|
path('subscribe/<code>/', common.UpdateSubscribeView.as_view(), name='update-subscribe'),
|
||||||
path('subscribe-info/', common.SubscribeInfoAuthUserView.as_view(), name='check-code-auth'),
|
path('subscribe-info/', common.SubscribeInfoAuthUserView.as_view(), name='check-code-auth'),
|
||||||
path('subscribe-info/<code>/', common.SubscribeInfoView.as_view(), name='check-code'),
|
path('subscribe-info/<code>/', common.SubscribeInfoView.as_view(), name='check-code'),
|
||||||
path('unsubscribe/', common.UnsubscribeAuthUserView.as_view(), name='unsubscribe-auth'),
|
path('unsubscribe/', common.UnsubscribeAuthUserView.as_view(), name='unsubscribe-auth'),
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ from rest_framework.response import Response
|
||||||
|
|
||||||
from notification import models
|
from notification import models
|
||||||
from notification.serializers import common as serializers
|
from notification.serializers import common as serializers
|
||||||
|
from utils.methods import get_user_ip
|
||||||
|
|
||||||
|
|
||||||
class CreateSubscribeView(generics.CreateAPIView):
|
class CreateSubscribeView(generics.CreateAPIView):
|
||||||
|
|
@ -15,6 +16,16 @@ class CreateSubscribeView(generics.CreateAPIView):
|
||||||
serializer_class = serializers.CreateSubscribeSerializer
|
serializer_class = serializers.CreateSubscribeSerializer
|
||||||
|
|
||||||
|
|
||||||
|
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):
|
class SubscribeInfoView(generics.RetrieveAPIView):
|
||||||
"""Subscribe info view."""
|
"""Subscribe info view."""
|
||||||
|
|
||||||
|
|
@ -33,7 +44,22 @@ class SubscribeInfoAuthUserView(generics.RetrieveAPIView):
|
||||||
lookup_field = None
|
lookup_field = None
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
return get_object_or_404(models.Subscriber, user=self.request.user)
|
user = self.request.user
|
||||||
|
|
||||||
|
if user.is_authenticated:
|
||||||
|
try:
|
||||||
|
subscriber = models.Subscriber.get(user=user)
|
||||||
|
|
||||||
|
except models.Subscriber.DoesNotExist:
|
||||||
|
subscriber = models.Subscriber.objects.make_subscriber(
|
||||||
|
email=user.email, user=user, ip_address=get_user_ip(self.request),
|
||||||
|
country_code=self.request.country_code, locale=self.request.locale
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
return get_object_or_404(models.Subscriber, user=user)
|
||||||
|
|
||||||
|
return subscriber
|
||||||
|
|
||||||
|
|
||||||
class UnsubscribeView(generics.UpdateAPIView):
|
class UnsubscribeView(generics.UpdateAPIView):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user