mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 18:07:02 +00:00
user detail view api, searching user list, count
This commit is contained in:
@ -138,12 +138,14 @@ def send_support_email(name, sender, subject, message):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
return name
|
return name
|
||||||
def custom_response(detail, data=None, response_status=status.HTTP_200_OK):
|
|
||||||
|
|
||||||
|
def custom_response(detail, data=None, response_status=status.HTTP_200_OK, count=None):
|
||||||
"""Custom response code"""
|
"""Custom response code"""
|
||||||
if not data:
|
if not data:
|
||||||
"""when data is none"""
|
"""when data is none"""
|
||||||
data = None
|
data = None
|
||||||
return Response({"data": data, "message": detail, "status": "success", "code": response_status})
|
return Response({"data": data, "message": detail, "status": "success", "code": response_status, "count": count})
|
||||||
|
|
||||||
|
|
||||||
def custom_error_response(detail, response_status):
|
def custom_error_response(detail, response_status):
|
||||||
|
@ -25,6 +25,7 @@ class UserManagementListSerializer(serializers.ModelSerializer):
|
|||||||
name = serializers.SerializerMethodField()
|
name = serializers.SerializerMethodField()
|
||||||
phone_number = serializers.SerializerMethodField()
|
phone_number = serializers.SerializerMethodField()
|
||||||
user_type = serializers.SerializerMethodField()
|
user_type = serializers.SerializerMethodField()
|
||||||
|
is_active = serializers.SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""
|
"""
|
||||||
@ -67,13 +68,27 @@ class UserManagementListSerializer(serializers.ModelSerializer):
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_is_active(obj):
|
||||||
|
"""
|
||||||
|
:param obj: user object
|
||||||
|
:return: user type
|
||||||
|
"""
|
||||||
|
if profile := obj.guardian_profile.all().first():
|
||||||
|
return profile.is_active
|
||||||
|
elif profile := obj.junior_profile.all().first():
|
||||||
|
return profile.is_active
|
||||||
|
else:
|
||||||
|
return obj.is_active
|
||||||
|
|
||||||
|
|
||||||
class GuardianSerializer(serializers.ModelSerializer):
|
class GuardianSerializer(serializers.ModelSerializer):
|
||||||
name = serializers.SerializerMethodField()
|
name = serializers.SerializerMethodField()
|
||||||
|
phone_number = serializers.SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Guardian
|
model = Guardian
|
||||||
fields = ('name', 'dob', 'gender', 'phone', 'is_active', 'country_name', 'image')
|
fields = ('id', 'name', 'dob', 'gender', 'phone_number', 'is_active', 'country_name', 'image')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_name(obj):
|
def get_name(obj):
|
||||||
@ -83,13 +98,22 @@ class GuardianSerializer(serializers.ModelSerializer):
|
|||||||
"""
|
"""
|
||||||
return f"{obj.user.first_name} {obj.user.last_name}" if obj.user.last_name else obj.user.first_name
|
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):
|
class JuniorSerializer(serializers.ModelSerializer):
|
||||||
name = serializers.SerializerMethodField()
|
name = serializers.SerializerMethodField()
|
||||||
|
phone_number = serializers.SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Junior
|
model = Junior
|
||||||
fields = ('name', 'dob', 'gender', 'phone', 'is_active', 'country_name', 'image')
|
fields = ('id', 'name', 'dob', 'gender', 'phone_number', 'is_active', 'country_name', 'image')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_name(obj):
|
def get_name(obj):
|
||||||
@ -99,6 +123,14 @@ class JuniorSerializer(serializers.ModelSerializer):
|
|||||||
"""
|
"""
|
||||||
return f"{obj.auth.first_name} {obj.auth.last_name}" if obj.auth.last_name else obj.auth.first_name
|
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):
|
class UserManagementDetailSerializer(serializers.ModelSerializer):
|
||||||
user_type = serializers.SerializerMethodField()
|
user_type = serializers.SerializerMethodField()
|
||||||
@ -111,7 +143,7 @@ class UserManagementDetailSerializer(serializers.ModelSerializer):
|
|||||||
meta class
|
meta class
|
||||||
"""
|
"""
|
||||||
model = USER
|
model = USER
|
||||||
fields = ('user_type', 'email', 'guardian_profile', 'junior_profile', 'associated_users')
|
fields = ('id', 'user_type', 'email', 'guardian_profile', 'junior_profile', 'associated_users')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_user_type(obj):
|
def get_user_type(obj):
|
||||||
@ -133,3 +165,7 @@ class UserManagementDetailSerializer(serializers.ModelSerializer):
|
|||||||
junior = Junior.objects.filter(guardian_code__contains=[profile.guardian_code], is_verified=True)
|
junior = Junior.objects.filter(guardian_code__contains=[profile.guardian_code], is_verified=True)
|
||||||
serializer = JuniorSerializer(junior, many=True)
|
serializer = JuniorSerializer(junior, many=True)
|
||||||
return serializer.data
|
return serializer.data
|
||||||
|
elif profile := obj.junior_profile.all().first():
|
||||||
|
guardian = Guardian.objects.filter(guardian_code__in=profile.guardian_code, is_verified=True)
|
||||||
|
serializer = GuardianSerializer(guardian, many=True)
|
||||||
|
return serializer.data
|
||||||
|
@ -76,10 +76,11 @@ class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin, mixins.UpdateModel
|
|||||||
:return: list of article
|
:return: list of article
|
||||||
"""
|
"""
|
||||||
queryset = self.get_queryset()
|
queryset = self.get_queryset()
|
||||||
|
count = queryset.count()
|
||||||
paginator = self.pagination_class()
|
paginator = self.pagination_class()
|
||||||
paginated_queryset = paginator.paginate_queryset(queryset, request)
|
paginated_queryset = paginator.paginate_queryset(queryset, request)
|
||||||
serializer = self.serializer_class(paginated_queryset, many=True)
|
serializer = self.serializer_class(paginated_queryset, many=True)
|
||||||
return custom_response(None, data=serializer.data)
|
return custom_response(None, data=serializer.data, count=count)
|
||||||
|
|
||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -8,6 +8,7 @@ from rest_framework import status
|
|||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.permissions import IsAuthenticated, AllowAny
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.db.models import Q
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from account.utils import custom_response, custom_error_response
|
from account.utils import custom_response, custom_error_response
|
||||||
@ -27,16 +28,23 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin, mixins.Retrie
|
|||||||
"""
|
"""
|
||||||
serializer_class = UserManagementListSerializer
|
serializer_class = UserManagementListSerializer
|
||||||
permission_classes = []
|
permission_classes = []
|
||||||
queryset = USER.objects.filter(is_superuser=False).prefetch_related(
|
queryset = USER.objects.filter(is_superuser=False
|
||||||
'guardian_profile', 'junior_profile')
|
).prefetch_related('guardian_profile',
|
||||||
|
'junior_profile'
|
||||||
|
).exclude(junior_profile__isnull=True,
|
||||||
|
guardian_profile__isnull=True).order_by('date_joined')
|
||||||
|
filter_backends = (SearchFilter,)
|
||||||
|
search_fields = ['first_name', 'last_name']
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
if self.request.query_params.get('user_type') == dict(USER_TYPE).get('2'):
|
if self.request.query_params.get('user_type') == dict(USER_TYPE).get('2'):
|
||||||
return self.queryset.filter(junior_profile__isnull=True)
|
queryset = self.queryset.filter(junior_profile__isnull=True)
|
||||||
elif self.request.query_params.get('user_type') == dict(USER_TYPE).get('1'):
|
elif self.request.query_params.get('user_type') == dict(USER_TYPE).get('1'):
|
||||||
return self.queryset.filter(guardian_profile__isnull=True)
|
queryset = self.queryset.filter(guardian_profile__isnull=True)
|
||||||
else:
|
else:
|
||||||
return self.queryset
|
queryset = self.queryset
|
||||||
|
queryset = self.filter_queryset(queryset)
|
||||||
|
return queryset
|
||||||
|
|
||||||
def list(self, request, *args, **kwargs):
|
def list(self, request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
@ -45,8 +53,11 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin, mixins.Retrie
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
queryset = self.get_queryset()
|
queryset = self.get_queryset()
|
||||||
serializer = self.serializer_class(queryset, many=True)
|
count = queryset.count()
|
||||||
return custom_response(None, data=serializer.data)
|
paginator = self.pagination_class()
|
||||||
|
paginated_queryset = paginator.paginate_queryset(queryset, request)
|
||||||
|
serializer = self.serializer_class(paginated_queryset, many=True)
|
||||||
|
return custom_response(None, data=serializer.data, count=count)
|
||||||
|
|
||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
queryset = self.queryset
|
queryset = self.queryset
|
||||||
|
Reference in New Issue
Block a user