mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-15 18:07:02 +00:00
@ -13,6 +13,21 @@ from rest_framework.decorators import action
|
|||||||
from django.contrib.auth import authenticate, login
|
from django.contrib.auth import authenticate, login
|
||||||
from rest_framework_simplejwt.tokens import RefreshToken
|
from rest_framework_simplejwt.tokens import RefreshToken
|
||||||
|
|
||||||
|
class GoogleSignInSerializer(serializers.Serializer):
|
||||||
|
"""Google login Serializer"""
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
"""Create or update user model"""
|
||||||
|
with transaction.atomic():
|
||||||
|
print()
|
||||||
|
if User.objects.filter(email__iexact=self.validated_data['email']).exists():
|
||||||
|
return User.objects.get(email__iexact=self.validated_data['email'])
|
||||||
|
|
||||||
|
if not User.objects.filter(email__iexact=self.validated_data['email']).exists():
|
||||||
|
instance = User.objects.create(username=self.validated_data['email'],
|
||||||
|
email=self.validated_data['email'])
|
||||||
|
return instance
|
||||||
|
|
||||||
|
|
||||||
class ResetPasswordSerializer(serializers.Serializer):
|
class ResetPasswordSerializer(serializers.Serializer):
|
||||||
"""Reset Password after verification"""
|
"""Reset Password after verification"""
|
||||||
|
@ -5,13 +5,14 @@ from rest_framework.decorators import api_view
|
|||||||
"""Third party import"""
|
"""Third party import"""
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from .views import (UserLogin, SendPhoneOtp, UserPhoneVerification, UserEmailVerification, ReSendEmailOtp,
|
from .views import (UserLogin, SendPhoneOtp, UserPhoneVerification, UserEmailVerification, ReSendEmailOtp,
|
||||||
ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView)
|
ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView, GoogleLoginAPIViewset)
|
||||||
"""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')
|
||||||
router.register('admin', UserLogin, basename='admin')
|
router.register('admin', UserLogin, basename='admin')
|
||||||
|
router.register('google-login', GoogleLoginAPIViewset, basename='admin')
|
||||||
router.register('send-phone-otp', SendPhoneOtp, basename='send-phone-otp')
|
router.register('send-phone-otp', SendPhoneOtp, basename='send-phone-otp')
|
||||||
router.register('user-phone-verification', UserPhoneVerification, basename='user-phone-verification')
|
router.register('user-phone-verification', UserPhoneVerification, basename='user-phone-verification')
|
||||||
router.register('user-email-verification', UserEmailVerification, basename='user-email-verification')
|
router.register('user-email-verification', UserEmailVerification, basename='user-email-verification')
|
||||||
|
@ -8,7 +8,8 @@ from junior.models import Junior
|
|||||||
from account.models import UserProfile, UserPhoneOtp, UserEmailOtp
|
from account.models import UserProfile, UserPhoneOtp, UserEmailOtp
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer,
|
from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer,
|
||||||
ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer)
|
ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer,
|
||||||
|
GoogleSignInSerializer)
|
||||||
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 guardian.tasks import generate_otp
|
from guardian.tasks import generate_otp
|
||||||
@ -21,6 +22,26 @@ from rest_framework.response import Response
|
|||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from templated_email import send_templated_mail
|
from templated_email import send_templated_mail
|
||||||
|
|
||||||
|
class GoogleLoginAPIViewset(viewsets.ModelViewSet):
|
||||||
|
"""Google Login"""
|
||||||
|
serializer_class = GoogleSignInSerializer
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Override default behaviour of create method
|
||||||
|
"""
|
||||||
|
provider_type = []
|
||||||
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
if serializer.is_valid(raise_exception=True):
|
||||||
|
provider = self.get_provider_view(request.data.get('provider'))
|
||||||
|
# if User is not authenticated then send error message
|
||||||
|
if not provider.is_authenticated(request):
|
||||||
|
return custom_error_response({}, status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
user = serializer.save()
|
||||||
|
if User.objects.filter(email__iexact=user.email).exists():
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ChangePasswordAPIView(views.APIView):
|
class ChangePasswordAPIView(views.APIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
18
guardian/migrations/0003_guardian_country_name.py
Normal file
18
guardian/migrations/0003_guardian_country_name.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.2 on 2023-06-27 13:59
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('guardian', '0002_remove_guardian_junior_code'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='guardian',
|
||||||
|
name='country_name',
|
||||||
|
field=models.CharField(blank=True, default=None, max_length=30, null=True),
|
||||||
|
),
|
||||||
|
]
|
@ -13,6 +13,7 @@ class Guardian(models.Model):
|
|||||||
"""Contact details"""
|
"""Contact details"""
|
||||||
country_code = models.IntegerField(blank=True, null=True)
|
country_code = models.IntegerField(blank=True, null=True)
|
||||||
phone = models.CharField(max_length=31, null=True, blank=True, default=None)
|
phone = models.CharField(max_length=31, null=True, blank=True, default=None)
|
||||||
|
country_name = models.CharField(max_length=30, null=True, blank=True, default=None)
|
||||||
"""Personal info"""
|
"""Personal info"""
|
||||||
family_name = models.CharField(max_length=50, null=True, blank=True, default=None)
|
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)
|
gender = models.CharField(choices=GENDERS, max_length=15, null=True, blank=True, default=None)
|
||||||
|
@ -99,6 +99,7 @@ class CreateGuardianSerializer(serializers.ModelSerializer):
|
|||||||
guardian.phone = validated_data.get('phone', guardian.phone)
|
guardian.phone = validated_data.get('phone', guardian.phone)
|
||||||
guardian.country_code = validated_data.get('country_code', guardian.country_code)
|
guardian.country_code = validated_data.get('country_code', guardian.country_code)
|
||||||
guardian.passcode = validated_data.get('passcode', guardian.passcode)
|
guardian.passcode = validated_data.get('passcode', guardian.passcode)
|
||||||
|
guardian.country_name = validated_data.get('country_name', guardian.country_name)
|
||||||
guardian.referral_code_used = validated_data.get('referral_code_used', guardian.referral_code_used)
|
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 of the junior if below all data are filled"""
|
||||||
complete_profile_field = all([guardian.phone, guardian.gender, guardian.family_name,
|
complete_profile_field = all([guardian.phone, guardian.gender, guardian.family_name,
|
||||||
|
18
junior/migrations/0002_junior_country_name.py
Normal file
18
junior/migrations/0002_junior_country_name.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.2 on 2023-06-27 13:59
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('junior', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='junior',
|
||||||
|
name='country_name',
|
||||||
|
field=models.CharField(blank=True, default=None, max_length=30, null=True),
|
||||||
|
),
|
||||||
|
]
|
@ -14,6 +14,7 @@ class Junior(models.Model):
|
|||||||
"""Contact details"""
|
"""Contact details"""
|
||||||
phone = models.CharField(max_length=31, null=True, blank=True, default=None)
|
phone = models.CharField(max_length=31, null=True, blank=True, default=None)
|
||||||
country_code = models.IntegerField(blank=True, null=True)
|
country_code = models.IntegerField(blank=True, null=True)
|
||||||
|
country_name = models.CharField(max_length=30, null=True, blank=True, default=None)
|
||||||
"""Personal info"""
|
"""Personal info"""
|
||||||
gender = models.CharField(max_length=10, choices=GENDERS, null=True, blank=True, default=None)
|
gender = models.CharField(max_length=10, choices=GENDERS, null=True, blank=True, default=None)
|
||||||
dob = models.DateField(max_length=15, null=True, blank=True, default=None)
|
dob = models.DateField(max_length=15, null=True, blank=True, default=None)
|
||||||
|
@ -72,6 +72,7 @@ class CreateJuniorSerializer(serializers.ModelSerializer):
|
|||||||
junior.guardian_code = validated_data.get('guardian_code', junior.guardian_code)
|
junior.guardian_code = validated_data.get('guardian_code', junior.guardian_code)
|
||||||
junior.dob = validated_data.get('dob',junior.dob)
|
junior.dob = validated_data.get('dob',junior.dob)
|
||||||
junior.passcode = validated_data.get('passcode', junior.passcode)
|
junior.passcode = validated_data.get('passcode', junior.passcode)
|
||||||
|
junior.country_name = validated_data.get('country_name', junior.country_name)
|
||||||
"""Update country code and phone number"""
|
"""Update country code and phone number"""
|
||||||
junior.phone = validated_data.get('phone', junior.phone)
|
junior.phone = validated_data.get('phone', junior.phone)
|
||||||
junior.country_code = validated_data.get('country_code', junior.country_code)
|
junior.country_code = validated_data.get('country_code', junior.country_code)
|
||||||
|
@ -173,13 +173,19 @@ https://docs.djangoproject.com/en/3.0/howto/static-files/"""
|
|||||||
|
|
||||||
|
|
||||||
# Email settings
|
# Email settings
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
EMAIL_HOST = 'smtp.gmail.com'
|
# EMAIL_HOST = 'smtp.gmail.com'
|
||||||
EMAIL_PORT = 587
|
# EMAIL_PORT = 587
|
||||||
EMAIL_USE_TLS = True
|
# EMAIL_USE_TLS = True
|
||||||
EMAIL_HOST_USER = 'infozodbank@gmail.com'
|
# EMAIL_HOST_USER = 'infozodbank@gmail.com'
|
||||||
# Replace with your Gmail email password or App password
|
# # Replace with your Gmail email password or App password
|
||||||
EMAIL_HOST_PASSWORD = 'ghwdmznwwslvchga'
|
# EMAIL_HOST_PASSWORD = 'ghwdmznwwslvchga'
|
||||||
|
|
||||||
|
EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')
|
||||||
|
EMAIL_HOST = os.getenv('EMAIL_HOST')
|
||||||
|
EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
|
||||||
|
EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
|
||||||
|
EMAIL_PORT = os.getenv('EMAIL_PORT')
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
|
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
|
||||||
|
Reference in New Issue
Block a user