mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 10:05:21 +00:00
Merge branch 'dev' into sprint4
This commit is contained in:
@ -137,6 +137,37 @@ class ForgotPasswordSerializer(serializers.Serializer):
|
|||||||
"""Forget password serializer"""
|
"""Forget password serializer"""
|
||||||
email = serializers.EmailField()
|
email = serializers.EmailField()
|
||||||
|
|
||||||
|
|
||||||
|
class AdminLoginSerializer(serializers.ModelSerializer):
|
||||||
|
"""admin login serializer"""
|
||||||
|
email = serializers.EmailField(required=True)
|
||||||
|
password = serializers.CharField(required=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""
|
||||||
|
meta class
|
||||||
|
"""
|
||||||
|
model = User
|
||||||
|
fields = ('email', 'password')
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
user = User.objects.filter(email__iexact=attrs['email'], is_superuser=True
|
||||||
|
).only('id', 'first_name', 'last_name', 'email', 'is_superuser').first()
|
||||||
|
|
||||||
|
if not user:
|
||||||
|
raise serializers.ValidationError({'details': ERROR_CODE['2063']})
|
||||||
|
elif not user.check_password(attrs['password']):
|
||||||
|
raise serializers.ValidationError({'details': ERROR_CODE['2031']})
|
||||||
|
self.context.update({'user': user})
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
"""
|
||||||
|
used to return the user object after validation
|
||||||
|
"""
|
||||||
|
return self.context['user']
|
||||||
|
|
||||||
|
|
||||||
class SuperUserSerializer(serializers.ModelSerializer):
|
class SuperUserSerializer(serializers.ModelSerializer):
|
||||||
"""Super admin serializer"""
|
"""Super admin serializer"""
|
||||||
user_type = serializers.SerializerMethodField('get_user_type')
|
user_type = serializers.SerializerMethodField('get_user_type')
|
||||||
|
@ -28,14 +28,15 @@ from .views import (UserLogin, SendPhoneOtp, UserPhoneVerification, UserEmailVer
|
|||||||
ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView, UpdateProfileImage,
|
ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView, UpdateProfileImage,
|
||||||
GoogleLoginViewSet, SigninWithApple, ProfileAPIViewSet, UploadImageAPIViewSet,
|
GoogleLoginViewSet, SigninWithApple, ProfileAPIViewSet, UploadImageAPIViewSet,
|
||||||
DefaultImageAPIViewSet, DeleteUserProfileAPIViewSet, UserNotificationAPIViewSet,
|
DefaultImageAPIViewSet, DeleteUserProfileAPIViewSet, UserNotificationAPIViewSet,
|
||||||
UpdateUserNotificationAPIViewSet, SendSupportEmail, LogoutAPIView, AccessTokenAPIView)
|
UpdateUserNotificationAPIViewSet, SendSupportEmail, LogoutAPIView, AccessTokenAPIView,
|
||||||
|
AdminLoginViewSet)
|
||||||
"""Router"""
|
"""Router"""
|
||||||
router = routers.SimpleRouter()
|
router = routers.SimpleRouter()
|
||||||
|
|
||||||
"""API End points with router"""
|
"""API End points with router"""
|
||||||
router.register('user', UserLogin, basename='user')
|
router.register('user', UserLogin, basename='user')
|
||||||
"""super admin login"""
|
"""super admin login"""
|
||||||
router.register('admin', UserLogin, basename='admin')
|
router.register('admin', AdminLoginViewSet, basename='admin')
|
||||||
"""google login end point"""
|
"""google login end point"""
|
||||||
router.register('google-login', GoogleLoginViewSet, basename='admin')
|
router.register('google-login', GoogleLoginViewSet, basename='admin')
|
||||||
router.register('send-phone-otp', SendPhoneOtp, basename='send-phone-otp')
|
router.register('send-phone-otp', SendPhoneOtp, basename='send-phone-otp')
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"""Account view """
|
"""Account view """
|
||||||
from notifications.utils import remove_fcm_token
|
from notifications.utils import remove_fcm_token
|
||||||
|
|
||||||
"""Django import"""
|
# django imports
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from rest_framework import viewsets, status, views
|
from rest_framework import viewsets, status, views
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
@ -18,19 +18,21 @@ import google.auth.transport.requests
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
import requests
|
import requests
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
from rest_framework import mixins
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
"""App Import"""
|
|
||||||
|
# local imports
|
||||||
from guardian.models import Guardian
|
from guardian.models import Guardian
|
||||||
from junior.models import Junior
|
from junior.models import Junior
|
||||||
from guardian.utils import upload_image_to_alibaba
|
from guardian.utils import upload_image_to_alibaba
|
||||||
from account.models import UserDeviceDetails, UserPhoneOtp, UserEmailOtp, DefaultTaskImages, UserNotification
|
from account.models import UserDeviceDetails, UserPhoneOtp, UserEmailOtp, DefaultTaskImages, UserNotification
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
"""Account serializer"""
|
|
||||||
from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer,
|
from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer,
|
||||||
ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer,
|
ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer,
|
||||||
GoogleLoginSerializer, UpdateGuardianImageSerializer, UpdateJuniorProfileImageSerializer,
|
GoogleLoginSerializer, UpdateGuardianImageSerializer, UpdateJuniorProfileImageSerializer,
|
||||||
DefaultTaskImagesSerializer, DefaultTaskImagesDetailsSerializer, UserDeleteSerializer,
|
DefaultTaskImagesSerializer, DefaultTaskImagesDetailsSerializer, UserDeleteSerializer,
|
||||||
UserNotificationSerializer, UpdateUserNotificationSerializer, UserPhoneOtpSerializer)
|
UserNotificationSerializer, UpdateUserNotificationSerializer, UserPhoneOtpSerializer,
|
||||||
|
AdminLoginSerializer)
|
||||||
from rest_framework_simplejwt.tokens import RefreshToken
|
from rest_framework_simplejwt.tokens import RefreshToken
|
||||||
from base.messages import ERROR_CODE, SUCCESS_CODE
|
from base.messages import ERROR_CODE, SUCCESS_CODE
|
||||||
from base.constants import NUMBER, ZOD, JUN, GRD
|
from base.constants import NUMBER, ZOD, JUN, GRD
|
||||||
@ -346,6 +348,31 @@ class UserLogin(viewsets.ViewSet):
|
|||||||
data = {"auth_token": access_token, "refresh_token":refresh_token, "user_type": '3'}
|
data = {"auth_token": access_token, "refresh_token":refresh_token, "user_type": '3'}
|
||||||
return custom_response(None, data, response_status=status.HTTP_200_OK)
|
return custom_response(None, data, response_status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
class AdminLoginViewSet(viewsets.GenericViewSet):
|
||||||
|
"""
|
||||||
|
admin login api
|
||||||
|
"""
|
||||||
|
serializer_class = AdminLoginSerializer
|
||||||
|
|
||||||
|
@action(methods=['post'], url_name='login', url_path='login', detail=False)
|
||||||
|
def admin_login(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
:param request:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
serializer = self.serializer_class(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
user = serializer.save()
|
||||||
|
refresh = RefreshToken.for_user(user)
|
||||||
|
access_token = str(refresh.access_token)
|
||||||
|
refresh_token = str(refresh)
|
||||||
|
data = {"auth_token": access_token, "refresh_token": refresh_token, "username": user.username,
|
||||||
|
"email": user.email, "first_name": user.first_name, "last_name": user.last_name,
|
||||||
|
"is_active": user.is_active, "user_type": '3', "is_superuser": user.is_superuser}
|
||||||
|
return custom_response(None, data)
|
||||||
|
|
||||||
|
|
||||||
class UserEmailVerification(viewsets.ModelViewSet):
|
class UserEmailVerification(viewsets.ModelViewSet):
|
||||||
"""User Email verification"""
|
"""User Email verification"""
|
||||||
serializer_class = EmailVerificationSerializer
|
serializer_class = EmailVerificationSerializer
|
||||||
|
@ -93,7 +93,9 @@ ERROR_CODE = {
|
|||||||
"2064": "To change your password first request an OTP and get it verify then change your password.",
|
"2064": "To change your password first request an OTP and get it verify then change your password.",
|
||||||
"2065": "Passwords do not match. Please try again.",
|
"2065": "Passwords do not match. Please try again.",
|
||||||
"2066": "Task does not exist or not in expired state",
|
"2066": "Task does not exist or not in expired state",
|
||||||
|
"2067": "Action not allowed. User type missing.",
|
||||||
"2068": "No guardian associated with this junior"
|
"2068": "No guardian associated with this junior"
|
||||||
|
|
||||||
}
|
}
|
||||||
"""Success message code"""
|
"""Success message code"""
|
||||||
SUCCESS_CODE = {
|
SUCCESS_CODE = {
|
||||||
|
@ -13,7 +13,7 @@ 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
|
||||||
from base.constants import USER_TYPE
|
from base.constants import USER_TYPE
|
||||||
from base.messages import SUCCESS_CODE
|
from base.messages import SUCCESS_CODE, ERROR_CODE
|
||||||
from web_admin.permission import AdminPermission
|
from web_admin.permission import AdminPermission
|
||||||
from web_admin.serializers.user_management_serializer import (UserManagementListSerializer,
|
from web_admin.serializers.user_management_serializer import (UserManagementListSerializer,
|
||||||
UserManagementDetailSerializer, GuardianSerializer,
|
UserManagementDetailSerializer, GuardianSerializer,
|
||||||
@ -36,6 +36,7 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin,
|
|||||||
guardian_profile__isnull=True).order_by('date_joined')
|
guardian_profile__isnull=True).order_by('date_joined')
|
||||||
filter_backends = (SearchFilter,)
|
filter_backends = (SearchFilter,)
|
||||||
search_fields = ['first_name', 'last_name']
|
search_fields = ['first_name', 'last_name']
|
||||||
|
http_method_names = ['get', 'post', 'patch']
|
||||||
|
|
||||||
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'):
|
||||||
@ -85,7 +86,7 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin,
|
|||||||
:return: success message
|
:return: success message
|
||||||
"""
|
"""
|
||||||
if self.request.query_params.get('user_type') not in [dict(USER_TYPE).get('1'), dict(USER_TYPE).get('2')]:
|
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)
|
return custom_error_response(ERROR_CODE['2067'], status.HTTP_400_BAD_REQUEST)
|
||||||
queryset = self.queryset
|
queryset = self.queryset
|
||||||
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'):
|
||||||
user_obj = queryset.filter(guardian_profile__user__id=kwargs['pk']).first()
|
user_obj = queryset.filter(guardian_profile__user__id=kwargs['pk']).first()
|
||||||
@ -110,7 +111,7 @@ class UserManagementViewSet(GenericViewSet, mixins.ListModelMixin,
|
|||||||
:return: success message
|
:return: success message
|
||||||
"""
|
"""
|
||||||
if self.request.query_params.get('user_type') not in [dict(USER_TYPE).get('1'), dict(USER_TYPE).get('2')]:
|
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)
|
return custom_error_response(ERROR_CODE['2067'], status.HTTP_400_BAD_REQUEST)
|
||||||
queryset = self.queryset
|
queryset = self.queryset
|
||||||
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'):
|
||||||
user_obj = queryset.filter(guardian_profile__user__id=kwargs['pk']).first()
|
user_obj = queryset.filter(guardian_profile__user__id=kwargs['pk']).first()
|
||||||
|
Reference in New Issue
Block a user