mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-16 02:16:16 +00:00
@ -23,7 +23,8 @@ class UserManagementListSerializer(serializers.ModelSerializer):
|
||||
user management serializer
|
||||
"""
|
||||
name = serializers.SerializerMethodField()
|
||||
phone_number = serializers.SerializerMethodField()
|
||||
country_code = serializers.SerializerMethodField()
|
||||
phone = serializers.SerializerMethodField()
|
||||
user_type = serializers.SerializerMethodField()
|
||||
is_active = serializers.SerializerMethodField()
|
||||
|
||||
@ -32,7 +33,7 @@ class UserManagementListSerializer(serializers.ModelSerializer):
|
||||
meta class
|
||||
"""
|
||||
model = USER
|
||||
fields = ('id', 'name', 'email', 'phone_number', 'user_type', 'is_active')
|
||||
fields = ('id', 'name', 'email', 'country_code', 'phone', 'user_type', 'is_active')
|
||||
|
||||
@staticmethod
|
||||
def get_name(obj):
|
||||
@ -43,15 +44,28 @@ class UserManagementListSerializer(serializers.ModelSerializer):
|
||||
return f"{obj.first_name} {obj.last_name}" if obj.last_name else obj.first_name
|
||||
|
||||
@staticmethod
|
||||
def get_phone_number(obj):
|
||||
def get_country_code(obj):
|
||||
"""
|
||||
:param obj: user object
|
||||
:return: user phone number
|
||||
"""
|
||||
if profile := obj.guardian_profile.all().first():
|
||||
return f"+{profile.country_code}{profile.phone}" if profile.country_code and profile.phone else profile.phone
|
||||
return profile.country_code if profile.country_code else None
|
||||
elif profile := obj.junior_profile.all().first():
|
||||
return f"+{profile.country_code}{profile.phone}" if profile.country_code and profile.phone else profile.phone
|
||||
return profile.country_code if profile.country_code else None
|
||||
else:
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def get_phone(obj):
|
||||
"""
|
||||
:param obj: user object
|
||||
:return: user phone number
|
||||
"""
|
||||
if profile := obj.guardian_profile.all().first():
|
||||
return profile.phone if profile.phone else None
|
||||
elif profile := obj.junior_profile.all().first():
|
||||
return profile.phone if profile.phone else None
|
||||
else:
|
||||
return None
|
||||
|
||||
@ -84,11 +98,18 @@ class UserManagementListSerializer(serializers.ModelSerializer):
|
||||
|
||||
class GuardianSerializer(serializers.ModelSerializer):
|
||||
name = serializers.SerializerMethodField()
|
||||
phone_number = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Guardian
|
||||
fields = ('id', 'name', 'dob', 'gender', 'phone_number', 'is_active', 'country_name', 'image')
|
||||
fields = ('id', 'name', 'dob', 'gender', 'country_code', 'phone', 'is_active', 'country_name', 'image')
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
instance.user.email = self.context.get('email', instance.user.email)
|
||||
instance.user.save()
|
||||
instance.country_code = validated_data.get('country_code', instance.country_code)
|
||||
instance.phone = validated_data.get('phone', instance.phone)
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
@staticmethod
|
||||
def get_name(obj):
|
||||
@ -98,22 +119,21 @@ class GuardianSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
return f"{obj.user.first_name} {obj.user.last_name}" if obj.user.last_name else obj.user.first_name
|
||||
|
||||
@staticmethod
|
||||
def get_phone_number(obj):
|
||||
"""
|
||||
:param obj: user object
|
||||
:return: user phone number
|
||||
"""
|
||||
return f"+{obj.country_code}{obj.phone}" if obj.country_code and obj.phone else obj.phone
|
||||
|
||||
|
||||
class JuniorSerializer(serializers.ModelSerializer):
|
||||
name = serializers.SerializerMethodField()
|
||||
phone_number = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Junior
|
||||
fields = ('id', 'name', 'dob', 'gender', 'phone_number', 'is_active', 'country_name', 'image')
|
||||
fields = ('id', 'name', 'dob', 'gender', 'country_code', 'phone', 'is_active', 'country_name', 'image')
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
instance.auth.email = self.context.get('email', instance.auth.email)
|
||||
instance.auth.save()
|
||||
instance.country_code = validated_data.get('country_code', instance.country_code)
|
||||
instance.phone = validated_data.get('phone', instance.phone)
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
@staticmethod
|
||||
def get_name(obj):
|
||||
@ -123,14 +143,6 @@ class JuniorSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
return f"{obj.auth.first_name} {obj.auth.last_name}" if obj.auth.last_name else obj.auth.first_name
|
||||
|
||||
@staticmethod
|
||||
def get_phone_number(obj):
|
||||
"""
|
||||
:param obj: user object
|
||||
:return: user phone number
|
||||
"""
|
||||
return f"+{obj.country_code}{obj.phone}" if obj.country_code and obj.phone else obj.phone
|
||||
|
||||
|
||||
class UserManagementDetailSerializer(serializers.ModelSerializer):
|
||||
user_type = serializers.SerializerMethodField()
|
||||
|
@ -29,7 +29,7 @@ class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModel
|
||||
serializer_class = ArticleSerializer
|
||||
permission_classes = [IsAuthenticated, AdminPermission]
|
||||
queryset = Article
|
||||
filter_backends = (OrderingFilter, SearchFilter,)
|
||||
filter_backends = (SearchFilter,)
|
||||
search_fields = ['title']
|
||||
http_method_names = ['get', 'post', 'put', 'delete']
|
||||
|
||||
|
@ -14,20 +14,21 @@ from django.db.models import Q
|
||||
from account.utils import custom_response, custom_error_response
|
||||
from base.constants import USER_TYPE
|
||||
from base.messages import SUCCESS_CODE, ERROR_CODE
|
||||
from web_admin.models import Article, ArticleCard, ArticleSurvey, DefaultArticleCardImage
|
||||
from web_admin.permission import AdminPermission
|
||||
from web_admin.serializers.user_management_serializer import (UserManagementListSerializer,
|
||||
UserManagementDetailSerializer)
|
||||
UserManagementDetailSerializer, GuardianSerializer,
|
||||
JuniorSerializer)
|
||||
|
||||
USER = get_user_model()
|
||||
|
||||
|
||||
class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin, mixins.RetrieveModelMixin):
|
||||
class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin,
|
||||
mixins.RetrieveModelMixin, mixins.UpdateModelMixin):
|
||||
"""
|
||||
api to manage (list, view, edit) user
|
||||
"""
|
||||
serializer_class = UserManagementListSerializer
|
||||
permission_classes = []
|
||||
permission_classes = [IsAuthenticated, AdminPermission]
|
||||
queryset = USER.objects.filter(is_superuser=False
|
||||
).prefetch_related('guardian_profile',
|
||||
'junior_profile'
|
||||
@ -49,7 +50,7 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin, mixins.Retrie
|
||||
def list(self, request, *args, **kwargs):
|
||||
"""
|
||||
api method to list all the user
|
||||
:param request:
|
||||
:param request: user_type {'guardian' for Guardian list, 'junior' for Junior list}
|
||||
:return:
|
||||
"""
|
||||
queryset = self.get_queryset()
|
||||
@ -60,6 +61,14 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin, mixins.Retrie
|
||||
return custom_response(None, data=serializer.data, count=count)
|
||||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
"""
|
||||
to get details of single user
|
||||
:param request: user_id along with
|
||||
user_type {'guardian' for Guardian, 'junior' for Junior} mandatory
|
||||
:return: user details
|
||||
"""
|
||||
if self.request.query_params.get('user_type') not in [dict(USER_TYPE).get('1'), dict(USER_TYPE).get('2')]:
|
||||
return custom_error_response('Action not allowed', status.HTTP_400_BAD_REQUEST)
|
||||
queryset = self.queryset
|
||||
if self.request.query_params.get('user_type') == dict(USER_TYPE).get('2'):
|
||||
queryset = queryset.filter(guardian_profile__user__id=kwargs['pk'])
|
||||
@ -67,3 +76,21 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin, mixins.Retrie
|
||||
queryset = queryset.filter(junior_profile__auth__id=kwargs['pk'])
|
||||
serializer = UserManagementDetailSerializer(queryset, many=True)
|
||||
return custom_response(None, data=serializer.data)
|
||||
|
||||
def partial_update(self, request, *args, **kwargs):
|
||||
if self.request.query_params.get('user_type') not in [dict(USER_TYPE).get('1'), dict(USER_TYPE).get('2')]:
|
||||
return custom_error_response('Action not allowed', status.HTTP_400_BAD_REQUEST)
|
||||
queryset = self.queryset
|
||||
if self.request.query_params.get('user_type') == dict(USER_TYPE).get('2'):
|
||||
queryset = queryset.filter(guardian_profile__user__id=kwargs['pk']).first()
|
||||
serializer = GuardianSerializer(queryset.guardian_profile.all().first(),
|
||||
request.data, context={'email': request.data.get('email', queryset.email)})
|
||||
|
||||
elif self.request.query_params.get('user_type') == dict(USER_TYPE).get('1'):
|
||||
queryset = queryset.filter(junior_profile__auth__id=kwargs['pk']).first()
|
||||
serializer = JuniorSerializer(queryset.junior_profile.all().first(),
|
||||
request.data, context={'email': request.data.get('email', queryset.email)})
|
||||
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return custom_response('Profile updated successfully.')
|
||||
|
Reference in New Issue
Block a user