place method to user class

This commit is contained in:
a.gorbunov 2020-01-29 18:20:21 +00:00
parent 6a6d623ef3
commit f3ca4a8de9
3 changed files with 15 additions and 20 deletions

View File

@ -435,6 +435,15 @@ class User(AbstractUser):
result.append(item.id)
return set(result)
def set_roles(self, ids: set):
"""
Set user roles
:param ids: list of role ids
:return: bool
"""
self.roles.set(Role.objects.filter(id__in=ids))
return self
class UserRoleQueryset(models.QuerySet):
"""QuerySet for model UserRole."""

View File

@ -2,7 +2,7 @@
from rest_framework import serializers
from account import models
from account.serializers import RoleBaseSerializer, UserSerializer, subscriptions_handler, roles_handler
from account.serializers import RoleBaseSerializer, UserSerializer, subscriptions_handler
from main.models import SiteSettings
@ -133,7 +133,11 @@ class BackDetailUserSerializer(BackUserSerializer):
subscriptions_list = validated_data.pop('subscription_types')
if 'roles' in validated_data:
instance = roles_handler(validated_data.pop('roles'), instance)
roles_ids = filter(
lambda filter_role: False if not filter_role else True,
map(lambda role: role["id"] if "id" in role else None, validated_data.pop("roles"))
)
instance.set_roles(roles_ids)
instance = super().update(instance, validated_data)
subscriptions_handler(subscriptions_list, instance)

View File

@ -17,24 +17,6 @@ from utils.methods import generate_string_code
from phonenumber_field.serializerfields import PhoneNumberField
def roles_handler(roles_list: set, user: User) -> User:
"""
Sync roles for user
:param roles_list: list of user roles
:param user: user
:return: bool
"""
if not roles_list:
user.roles.clear()
return user
ids = list(map(lambda role: role["id"] if "id" in role else None, roles_list))
roles = Role.objects \
.filter(id__in=ids)
user.roles.set(roles)
return user
def subscriptions_handler(subscriptions_list, user):
"""
create or update subscriptions for user