from rest_framework import serializers from django.contrib.auth.models import User from guardian.models import Guardian from junior.models import Junior from account.models import UserProfile, UserEmailOtp, UserPhoneOtp from base.constants import GUARDIAN, JUNIOR, SUPERUSER from django.db import transaction from base.messages import ERROR_CODE_REQUIRED, ERROR_CODE, SUCCESS_CODE, STATUS_CODE_ERROR from django.core.exceptions import ObjectDoesNotExist from django.contrib.auth import authenticate from rest_framework import viewsets, status from rest_framework.decorators import action from django.contrib.auth import authenticate, login from rest_framework_simplejwt.tokens import RefreshToken class ResetPasswordSerializer(serializers.Serializer): """Reset Password after verification""" verification_code = serializers.CharField(max_length=10) password = serializers.CharField(required=True) class Meta(object): """Meta info""" model = User def create(self, validated_data): verification_code = validated_data.pop('verification_code') password = validated_data.pop('password') print("verification_code===>",verification_code) print("password===>", password) user_opt_details = UserEmailOtp.objects.filter(otp=verification_code, is_verified=True).last() print("user_opt_details===>",user_opt_details) if user_opt_details: print("qqqqqqqqqq") user_details = User.objects.filter(email=user_opt_details.email).last() if user_details: print("333333333==>",user_details.password) user_details.set_password(password) user_details.save() return {'password':password} return user_opt_details return '' class ChangePasswordSerializer(serializers.Serializer): """Update Password after verification""" current_password = serializers.CharField(max_length=100) new_password = serializers.CharField(required=True) class Meta(object): """Meta info""" model = User def validate_current_password(self, value): user = self.context if self.context.password not in ('', None): if user.check_password(value): return value raise serializers.ValidationError({"error":"Invalid Current password"}) def create(self, validated_data): new_password = validated_data.pop('new_password') user_details = User.objects.filter(email=self.context).last() print("user_details==>", user_details) if user_details: print("333333333==>",user_details.password) user_details.set_password(new_password) user_details.save() return {'password':new_password} return '' class ForgotPasswordSerializer(serializers.Serializer): """Forget password serializer""" email = serializers.EmailField() class SuperUserSerializer(serializers.ModelSerializer): user_type = serializers.SerializerMethodField('get_user_type') def get_user_type(self, obj): """user type""" return SUPERUSER class Meta(object): """Meta info""" model = User fields = ['id', 'username', 'email', 'first_name', 'last_name', 'is_active', 'user_type'] class GuardianSerializer(serializers.ModelSerializer): """guardian serializer""" user_type = serializers.SerializerMethodField('get_user_type') email = serializers.SerializerMethodField('get_auth') first_name = serializers.SerializerMethodField('get_first_name') last_name = serializers.SerializerMethodField('get_last_name') auth_token = serializers.SerializerMethodField('get_auth_token') def get_auth_token(self, obj): refresh = RefreshToken.for_user(obj.user) access_token = str(refresh.access_token) return access_token def get_user_type(self, obj): """user type""" return GUARDIAN def get_auth(self, obj): """user email address""" return obj.user.username def get_first_name(self, obj): """user first name""" return obj.user.first_name def get_last_name(self, obj): """user last name""" return obj.user.last_name class Meta(object): """Meta info""" model = Guardian fields = ['auth_token', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'family_name', 'gender', 'dob', 'referral_code', 'is_active', 'is_complete_profile', 'passcode', 'created_at', 'updated_at', 'user_type'] class JuniorSerializer(serializers.ModelSerializer): """junior serializer""" user_type = serializers.SerializerMethodField('get_user_type') email = serializers.SerializerMethodField('get_auth') first_name = serializers.SerializerMethodField('get_first_name') last_name = serializers.SerializerMethodField('get_last_name') auth_token = serializers.SerializerMethodField('get_auth_token') def get_auth_token(self, obj): refresh = RefreshToken.for_user(obj.auth) access_token = str(refresh.access_token) return access_token def get_user_type(self, obj): return JUNIOR def get_auth(self, obj): return obj.auth.username def get_first_name(self, obj): return obj.auth.first_name def get_last_name(self, obj): return obj.auth.last_name class Meta(object): """Meta info""" model = Junior fields = ['auth_token', 'email', 'first_name', 'last_name', 'country_code', 'phone', 'gender', 'dob', 'guardian_code', 'referral_code','is_active', 'is_complete_profile', 'created_at', 'updated_at', 'user_type'] class EmailVerificationSerializer(serializers.ModelSerializer): """Email verification serializer""" class Meta(object): """Meta info""" model = UserEmailOtp fields = '__all__'