subscription_type list for user
This commit is contained in:
parent
129201d3a9
commit
f15ac47102
|
|
@ -341,7 +341,7 @@ class User(AbstractUser):
|
||||||
).values_list('object_id', flat=True)
|
).values_list('object_id', flat=True)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def subscriptions(self):
|
def subscription_types(self):
|
||||||
result = []
|
result = []
|
||||||
for subscription in self.subscriber.all():
|
for subscription in self.subscriber.all():
|
||||||
for item in subscription.active_subscriptions:
|
for item in subscription.active_subscriptions:
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from account import models
|
from account import models
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from account.serializers import RoleBaseSerializer
|
from account.serializers import RoleBaseSerializer, subscriptions_handler
|
||||||
from main.models import SiteSettings
|
from main.models import SiteSettings
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -20,6 +20,14 @@ class _SiteSettingsSerializer(serializers.ModelSerializer):
|
||||||
class BackUserSerializer(serializers.ModelSerializer):
|
class BackUserSerializer(serializers.ModelSerializer):
|
||||||
last_country = _SiteSettingsSerializer(read_only=True)
|
last_country = _SiteSettingsSerializer(read_only=True)
|
||||||
roles = RoleBaseSerializer(many=True, read_only=True)
|
roles = RoleBaseSerializer(many=True, read_only=True)
|
||||||
|
subscriptions = serializers.ListField(
|
||||||
|
source='subscription_types',
|
||||||
|
allow_null=True,
|
||||||
|
allow_empty=True,
|
||||||
|
child=serializers.IntegerField(min_value=1),
|
||||||
|
required=False,
|
||||||
|
help_text='list of subscription_types id',
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
|
|
@ -58,13 +66,18 @@ class BackUserSerializer(serializers.ModelSerializer):
|
||||||
'locale',
|
'locale',
|
||||||
'last_ip',
|
'last_ip',
|
||||||
'last_country',
|
'last_country',
|
||||||
'subscriptions',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
|
subscriptions_list = []
|
||||||
|
if 'subscription_types' in validated_data:
|
||||||
|
subscriptions_list = validated_data.pop('subscription_types')
|
||||||
|
|
||||||
user = super().create(validated_data)
|
user = super().create(validated_data)
|
||||||
user.set_password(validated_data['password'])
|
user.set_password(validated_data['password'])
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
|
subscriptions_handler(subscriptions_list, user)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -101,15 +114,31 @@ class BackDetailUserSerializer(BackUserSerializer):
|
||||||
'old_password',
|
'old_password',
|
||||||
'last_login',
|
'last_login',
|
||||||
'date_joined',
|
'date_joined',
|
||||||
'subscriptions',
|
'last_ip',
|
||||||
|
'last_country',
|
||||||
)
|
)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
|
subscriptions_list = []
|
||||||
|
if 'subscription_types' in validated_data:
|
||||||
|
subscriptions_list = validated_data.pop('subscription_types')
|
||||||
|
|
||||||
user = super().create(validated_data)
|
user = super().create(validated_data)
|
||||||
user.set_password(validated_data['password'])
|
user.set_password(validated_data['password'])
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
|
subscriptions_handler(subscriptions_list, user)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
def update(self, instance, validated_data):
|
||||||
|
subscriptions_list = []
|
||||||
|
if 'subscription_types' in validated_data:
|
||||||
|
subscriptions_list = validated_data.pop('subscription_types')
|
||||||
|
|
||||||
|
instance = super().update(instance, validated_data)
|
||||||
|
subscriptions_handler(subscriptions_list, instance)
|
||||||
|
return instance
|
||||||
|
|
||||||
|
|
||||||
class UserRoleSerializer(serializers.ModelSerializer):
|
class UserRoleSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,34 @@ from rest_framework import validators as rest_validators
|
||||||
|
|
||||||
from account import models, tasks
|
from account import models, tasks
|
||||||
from main.serializers.common import NavigationBarPermissionBaseSerializer
|
from main.serializers.common import NavigationBarPermissionBaseSerializer
|
||||||
from notification.models import Subscriber
|
from notification.models import Subscribe, Subscriber
|
||||||
from utils import exceptions as utils_exceptions
|
from utils import exceptions as utils_exceptions
|
||||||
from utils import methods as utils_methods
|
from utils import methods as utils_methods
|
||||||
|
from utils.methods import generate_string_code
|
||||||
|
|
||||||
|
|
||||||
|
def subscriptions_handler(subscriptions_list, user):
|
||||||
|
"""
|
||||||
|
create or update subscriptions for user
|
||||||
|
"""
|
||||||
|
Subscribe.objects.filter(subscriber__user=user).delete()
|
||||||
|
subscriber, _ = Subscriber.objects.get_or_create(
|
||||||
|
email=user.email,
|
||||||
|
defaults={
|
||||||
|
'user': user,
|
||||||
|
'email': user.email,
|
||||||
|
'ip_address': user.last_ip,
|
||||||
|
'country_code': user.last_country.country.code if user.last_country else None,
|
||||||
|
'locale': user.locale,
|
||||||
|
'update_code': generate_string_code(),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
for subscription in subscriptions_list:
|
||||||
|
Subscribe.objects.create(
|
||||||
|
subscriber=subscriber,
|
||||||
|
subscription_type_id=subscription,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class RoleBaseSerializer(serializers.ModelSerializer):
|
class RoleBaseSerializer(serializers.ModelSerializer):
|
||||||
|
|
@ -42,6 +67,14 @@ class UserSerializer(serializers.ModelSerializer):
|
||||||
validators=(rest_validators.UniqueValidator(queryset=models.User.objects.all()),),
|
validators=(rest_validators.UniqueValidator(queryset=models.User.objects.all()),),
|
||||||
required=False)
|
required=False)
|
||||||
roles = RoleBaseSerializer(many=True, read_only=True)
|
roles = RoleBaseSerializer(many=True, read_only=True)
|
||||||
|
subscriptions = serializers.ListField(
|
||||||
|
source='subscription_types',
|
||||||
|
allow_null=True,
|
||||||
|
allow_empty=True,
|
||||||
|
child=serializers.IntegerField(min_value=1),
|
||||||
|
required=False,
|
||||||
|
help_text='list of subscription_types id',
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.User
|
model = models.User
|
||||||
|
|
@ -66,14 +99,16 @@ class UserSerializer(serializers.ModelSerializer):
|
||||||
'cropped_image_url': {'required': False, },
|
'cropped_image_url': {'required': False, },
|
||||||
'newsletter': {'required': False, },
|
'newsletter': {'required': False, },
|
||||||
}
|
}
|
||||||
read_only_fields = (
|
|
||||||
'subscriptions',
|
|
||||||
)
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
|
subscriptions_list = []
|
||||||
|
if 'subscription_types' in validated_data:
|
||||||
|
subscriptions_list = validated_data.pop('subscription_types')
|
||||||
|
|
||||||
user = super(UserSerializer, self).create(validated_data)
|
user = super(UserSerializer, self).create(validated_data)
|
||||||
validated_data['user'] = user
|
validated_data['user'] = user
|
||||||
Subscriber.objects.make_subscriber(**validated_data)
|
Subscriber.objects.make_subscriber(**validated_data)
|
||||||
|
subscriptions_handler(subscriptions_list, user)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
def validate_email(self, value):
|
def validate_email(self, value):
|
||||||
|
|
@ -91,6 +126,10 @@ class UserSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
"""Override update method"""
|
"""Override update method"""
|
||||||
|
subscriptions_list = []
|
||||||
|
if 'subscription_types' in validated_data:
|
||||||
|
subscriptions_list = validated_data.pop('subscription_types')
|
||||||
|
|
||||||
old_email = instance.email
|
old_email = instance.email
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
if 'email' in validated_data:
|
if 'email' in validated_data:
|
||||||
|
|
@ -109,6 +148,8 @@ class UserSerializer(serializers.ModelSerializer):
|
||||||
user_id=instance.id,
|
user_id=instance.id,
|
||||||
country_code=self.context.get('request').country_code,
|
country_code=self.context.get('request').country_code,
|
||||||
emails=[validated_data['email'], ])
|
emails=[validated_data['email'], ])
|
||||||
|
|
||||||
|
subscriptions_handler(subscriptions_list, instance)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user