mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-16 02:16:16 +00:00
changes
This commit is contained in:
116
guardian/serializers.py
Normal file
116
guardian/serializers.py
Normal file
@ -0,0 +1,116 @@
|
||||
"""Serializer of Guardian"""
|
||||
"""Third party Django app"""
|
||||
import logging
|
||||
import random
|
||||
from rest_framework import serializers
|
||||
from rest_framework_simplejwt.tokens import RefreshToken
|
||||
from django.db import transaction
|
||||
from django.contrib.auth.models import User
|
||||
"""Import Django app"""
|
||||
from .models import Guardian
|
||||
from account.models import UserProfile
|
||||
from base.messages import ERROR_CODE, SUCCESS_CODE
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
"""User serializer"""
|
||||
auth_token = serializers.SerializerMethodField('get_auth_token')
|
||||
|
||||
class Meta(object):
|
||||
"""Meta info"""
|
||||
model = User
|
||||
fields = ['email', 'password', 'auth_token']
|
||||
|
||||
def get_auth_token(self, obj):
|
||||
"""generate auth token"""
|
||||
refresh = RefreshToken.for_user(obj)
|
||||
access_token = str(refresh.access_token)
|
||||
return access_token
|
||||
def create(self, validated_data):
|
||||
"""fetch data"""
|
||||
email = validated_data.get('email')
|
||||
user_type = self.context
|
||||
password = validated_data.get('password')
|
||||
try:
|
||||
"""Create user profile"""
|
||||
user = User.objects.create_user(username=email, email=email, password=password)
|
||||
UserProfile.objects.create(user=user, user_type=user_type)
|
||||
return user
|
||||
except Exception as e:
|
||||
"""Error handling"""
|
||||
logging.error(e)
|
||||
raise serializers.ValidationError({"details":ERROR_CODE['2021']})
|
||||
|
||||
def save(self, **kwargs):
|
||||
"""save the data"""
|
||||
with transaction.atomic():
|
||||
instance = super().save(**kwargs)
|
||||
return instance
|
||||
|
||||
class CreateGuardianSerializer(serializers.ModelSerializer):
|
||||
"""Create guardian serializer"""
|
||||
"""Basic info"""
|
||||
first_name = serializers.SerializerMethodField('get_first_name')
|
||||
last_name = serializers.SerializerMethodField('get_last_name')
|
||||
email = serializers.SerializerMethodField('get_email')
|
||||
"""Contact details"""
|
||||
phone = serializers.CharField(max_length=20, required=False)
|
||||
country_code = serializers.IntegerField(required=False)
|
||||
family_name = serializers.CharField(max_length=100, required=False)
|
||||
dob = serializers.DateField(required=False)
|
||||
referral_code = serializers.CharField(max_length=100, required=False)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta info"""
|
||||
model = Guardian
|
||||
fields = ['first_name', 'last_name', 'email', 'phone', 'family_name', 'gender', 'country_code',
|
||||
'dob', 'referral_code', 'passcode', 'is_complete_profile']
|
||||
|
||||
def get_first_name(self,obj):
|
||||
"""first name of guardian"""
|
||||
return obj.user.first_name
|
||||
|
||||
def get_last_name(self,obj):
|
||||
"""last name of guardian"""
|
||||
return obj.user.last_name
|
||||
|
||||
def get_email(self,obj):
|
||||
"""emailof guardian"""
|
||||
return obj.user.email
|
||||
|
||||
def create(self, validated_data):
|
||||
"""Create guardian profile"""
|
||||
user = User.objects.filter(username=self.context['user']).last()
|
||||
if user:
|
||||
"""Save first and last name of guardian"""
|
||||
user.first_name = self.context.get('first_name', user.first_name)
|
||||
user.last_name = self.context.get('last_name', user.last_name)
|
||||
user.save()
|
||||
"""Create guardian data"""
|
||||
guardian, created = Guardian.objects.get_or_create(user=self.context['user'])
|
||||
if created:
|
||||
"""Create referral code and guardian code"""
|
||||
guardian.referral_code = ''.join([str(random.randrange(9)) for _ in range(4)])
|
||||
guardian.guardian_code = ''.join([str(random.randrange(9)) for _ in range(4)])
|
||||
if guardian:
|
||||
"""update details according to the data get from request"""
|
||||
guardian.gender = validated_data.get('gender',guardian.gender)
|
||||
guardian.family_name = validated_data.get('family_name', guardian.family_name)
|
||||
guardian.dob = validated_data.get('dob',guardian.dob)
|
||||
"""Update country code and phone number"""
|
||||
guardian.phone = validated_data.get('phone', guardian.phone)
|
||||
guardian.country_code = validated_data.get('country_code', guardian.country_code)
|
||||
guardian.passcode = validated_data.get('passcode', guardian.passcode)
|
||||
guardian.referral_code_used = validated_data.get('referral_code_used', guardian.referral_code_used)
|
||||
"""Complete profile of the junior if below all data are filled"""
|
||||
complete_profile_field = all([guardian.phone, guardian.gender, guardian.family_name,
|
||||
guardian.dob, guardian.country_code, user.first_name, user.last_name])
|
||||
guardian.is_complete_profile = False
|
||||
if complete_profile_field:
|
||||
guardian.is_complete_profile = True
|
||||
guardian.save()
|
||||
return guardian
|
||||
|
||||
def save(self, **kwargs):
|
||||
"""Save the data into junior table"""
|
||||
with transaction.atomic():
|
||||
instance = super().save(**kwargs)
|
||||
return instance
|
Reference in New Issue
Block a user