diff --git a/account/migrations/0002_useremailotp_user_type.py b/account/migrations/0002_useremailotp_user_type.py new file mode 100644 index 0000000..9b8821a --- /dev/null +++ b/account/migrations/0002_useremailotp_user_type.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.2 on 2023-06-29 12:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='useremailotp', + name='user_type', + field=models.CharField(blank=True, choices=[('1', 'junior'), ('2', 'guardian'), ('3', 'superuser')], default=None, max_length=15, null=True), + ), + ] diff --git a/account/models.py b/account/models.py index ff8bb5d..43ab6e5 100644 --- a/account/models.py +++ b/account/models.py @@ -59,6 +59,7 @@ class UserEmailOtp(models.Model): """otp details""" otp = models.CharField(max_length=10) is_verified = models.BooleanField(default=False) + user_type = models.CharField(max_length=15, choices=USER_TYPE, null=True, blank=True, default=None) # OTP validity created_at = models.DateTimeField(auto_now_add=True) diff --git a/account/views.py b/account/views.py index 7ed3918..afceade 100644 --- a/account/views.py +++ b/account/views.py @@ -141,27 +141,28 @@ class UserLogin(viewsets.ViewSet): def login(self, request): username = request.data.get('username') password = request.data.get('password') + print("username==>",username,'==>',password) user = authenticate(request, username=username, password=password) + try: if user is not None: login(request, user) - guardian_data = Guardian.objects.filter(user__username=username, is_complete_profile=True).last() + guardian_data = Guardian.objects.filter(user__username=username, is_verified=True).last() if guardian_data: - serializer = GuardianSerializer(guardian_data) - junior_data = Junior.objects.filter(auth__username=username, is_complete_profile=True).last() + serializer = GuardianSerializer(guardian_data).data + junior_data = Junior.objects.filter(auth__username=username, is_verified=True).last() if junior_data: - serializer = JuniorSerializer(junior_data) - return custom_response(SUCCESS_CODE['3003'], serializer.data, response_status=status.HTTP_200_OK) + serializer = JuniorSerializer(junior_data).data + return custom_response(SUCCESS_CODE['3003'], serializer, response_status=status.HTTP_200_OK) else: return custom_error_response(ERROR_CODE["2002"], response_status=status.HTTP_401_UNAUTHORIZED) except Exception as e: logging.error(e) - user_profile_data = UserProfile.objects.filter(user__username=username).last() email_verified = UserEmailOtp.objects.filter(email=username).last() refresh = RefreshToken.for_user(user) access_token = str(refresh.access_token) data = {"auth_token":access_token, "is_profile_complete": False, - "user_role": user_profile_data.user_type, + "user_role": email_verified.user_type, } is_verified = False if email_verified: @@ -208,6 +209,16 @@ class UserEmailVerification(viewsets.ModelViewSet): if email_data: email_data.is_verified = True email_data.save() + if email_data.user_type == '1': + junior_data = Junior.objects.filter(auth__email=self.request.GET.get('email')).last() + if junior_data: + junior_data.is_verified = True + junior_data.save() + else: + guardian_data = Guardian.objects.filter(user__email=self.request.GET.get('email')).last() + if guardian_data: + guardian_data.is_verified = True + guardian_data.save() refresh = RefreshToken.for_user(user_obj) access_token = str(refresh.access_token) return custom_response(SUCCESS_CODE['3011'], {"auth_token":access_token}, response_status=status.HTTP_200_OK) diff --git a/guardian/migrations/0006_guardian_is_verified.py b/guardian/migrations/0006_guardian_is_verified.py new file mode 100644 index 0000000..5d4082e --- /dev/null +++ b/guardian/migrations/0006_guardian_is_verified.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.2 on 2023-06-29 12:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('guardian', '0005_alter_guardian_image'), + ] + + operations = [ + migrations.AddField( + model_name='guardian', + name='is_verified', + field=models.BooleanField(default=False), + ), + ] diff --git a/guardian/models.py b/guardian/models.py index 9bb92eb..3040c82 100644 --- a/guardian/models.py +++ b/guardian/models.py @@ -20,14 +20,15 @@ class Guardian(models.Model): family_name = models.CharField(max_length=50, null=True, blank=True, default=None) gender = models.CharField(choices=GENDERS, max_length=15, null=True, blank=True, default=None) dob = models.DateField(max_length=15, null=True, blank=True, default=None) + """Profile activity""" + is_active = models.BooleanField(default=True) + is_verified = models.BooleanField(default=False) + is_complete_profile = models.BooleanField(default=False) + passcode = models.IntegerField(null=True, blank=True, default=None) """Codes""" guardian_code = models.CharField(max_length=10, null=True, blank=True, default=None) referral_code = models.CharField(max_length=10, null=True, blank=True, default=None) referral_code_used = models.CharField(max_length=10, null=True, blank=True, default=None) - """Profile activity""" - is_active = models.BooleanField(default=True) - is_complete_profile = models.BooleanField(default=False) - passcode = models.IntegerField(null=True, blank=True, default=None) """Profile created and updated time""" created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) diff --git a/guardian/serializers.py b/guardian/serializers.py index a7651b3..0136eb4 100644 --- a/guardian/serializers.py +++ b/guardian/serializers.py @@ -35,6 +35,10 @@ class UserSerializer(serializers.ModelSerializer): """Create user profile""" user = User.objects.create_user(username=email, email=email, password=password) UserProfile.objects.create(user=user, user_type=user_type) + if user_type == '1': + Junior.objects.create(auth=user) + if user_type == '2': + Guardian.objects.create(user=user) return user except Exception as e: """Error handling""" diff --git a/guardian/views.py b/guardian/views.py index 72e5b94..049cc1f 100644 --- a/guardian/views.py +++ b/guardian/views.py @@ -3,8 +3,9 @@ from rest_framework.permissions import IsAuthenticated from rest_framework import viewsets, status """Import Django app""" -from .serializers import UserSerializer -from .serializers import CreateGuardianSerializer +from .serializers import UserSerializer, CreateGuardianSerializer +from .models import Guardian +from junior.models import Junior from account.models import UserEmailOtp from .tasks import generate_otp from account.utils import send_otp_email @@ -22,7 +23,7 @@ class SignupViewset(viewsets.ModelViewSet): serializer.save() """Generate otp""" otp = generate_otp() - UserEmailOtp.objects.create(email=request.data['email'], otp=otp) + UserEmailOtp.objects.create(email=request.data['email'], otp=otp, user_type=request.data['user_type']) """Send email to the register user""" send_otp_email(request.data['email'], otp) return custom_response(SUCCESS_CODE['3001'], {"email_otp": otp}, diff --git a/junior/migrations/0005_junior_is_verified.py b/junior/migrations/0005_junior_is_verified.py new file mode 100644 index 0000000..a5ed1e6 --- /dev/null +++ b/junior/migrations/0005_junior_is_verified.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.2 on 2023-06-29 12:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('junior', '0004_alter_junior_image'), + ] + + operations = [ + migrations.AddField( + model_name='junior', + name='is_verified', + field=models.BooleanField(default=False), + ), + ] diff --git a/junior/models.py b/junior/models.py index e7bf4cd..762032b 100644 --- a/junior/models.py +++ b/junior/models.py @@ -28,6 +28,7 @@ class Junior(models.Model): is_active = models.BooleanField(default=True) is_complete_profile = models.BooleanField(default=False) passcode = models.IntegerField(null=True, blank=True, default=None) + is_verified = models.BooleanField(default=False) """Profile created and updated time""" created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)