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)
|
||||
|
||||
@property
|
||||
def subscriptions(self):
|
||||
def subscription_types(self):
|
||||
result = []
|
||||
for subscription in self.subscriber.all():
|
||||
for item in subscription.active_subscriptions:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ from rest_framework import serializers
|
|||
|
||||
from account import models
|
||||
from account.models import User
|
||||
from account.serializers import RoleBaseSerializer
|
||||
from account.serializers import RoleBaseSerializer, subscriptions_handler
|
||||
from main.models import SiteSettings
|
||||
|
||||
|
||||
|
|
@ -20,6 +20,14 @@ class _SiteSettingsSerializer(serializers.ModelSerializer):
|
|||
class BackUserSerializer(serializers.ModelSerializer):
|
||||
last_country = _SiteSettingsSerializer(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:
|
||||
model = User
|
||||
|
|
@ -58,13 +66,18 @@ class BackUserSerializer(serializers.ModelSerializer):
|
|||
'locale',
|
||||
'last_ip',
|
||||
'last_country',
|
||||
'subscriptions',
|
||||
)
|
||||
|
||||
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.set_password(validated_data['password'])
|
||||
user.save()
|
||||
|
||||
subscriptions_handler(subscriptions_list, user)
|
||||
return user
|
||||
|
||||
|
||||
|
|
@ -101,15 +114,31 @@ class BackDetailUserSerializer(BackUserSerializer):
|
|||
'old_password',
|
||||
'last_login',
|
||||
'date_joined',
|
||||
'subscriptions',
|
||||
'last_ip',
|
||||
'last_country',
|
||||
)
|
||||
|
||||
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.set_password(validated_data['password'])
|
||||
user.save()
|
||||
|
||||
subscriptions_handler(subscriptions_list, 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 Meta:
|
||||
|
|
|
|||
|
|
@ -9,9 +9,34 @@ from rest_framework import validators as rest_validators
|
|||
|
||||
from account import models, tasks
|
||||
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 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):
|
||||
|
|
@ -42,6 +67,14 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
validators=(rest_validators.UniqueValidator(queryset=models.User.objects.all()),),
|
||||
required=False)
|
||||
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:
|
||||
model = models.User
|
||||
|
|
@ -66,14 +99,16 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
'cropped_image_url': {'required': False, },
|
||||
'newsletter': {'required': False, },
|
||||
}
|
||||
read_only_fields = (
|
||||
'subscriptions',
|
||||
)
|
||||
|
||||
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)
|
||||
validated_data['user'] = user
|
||||
Subscriber.objects.make_subscriber(**validated_data)
|
||||
subscriptions_handler(subscriptions_list, user)
|
||||
return user
|
||||
|
||||
def validate_email(self, value):
|
||||
|
|
@ -91,6 +126,10 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
|
||||
def update(self, instance, validated_data):
|
||||
"""Override update method"""
|
||||
subscriptions_list = []
|
||||
if 'subscription_types' in validated_data:
|
||||
subscriptions_list = validated_data.pop('subscription_types')
|
||||
|
||||
old_email = instance.email
|
||||
instance = super().update(instance, validated_data)
|
||||
if 'email' in validated_data:
|
||||
|
|
@ -109,6 +148,8 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
user_id=instance.id,
|
||||
country_code=self.context.get('request').country_code,
|
||||
emails=[validated_data['email'], ])
|
||||
|
||||
subscriptions_handler(subscriptions_list, instance)
|
||||
return instance
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user