Files
avto-cargo--wisdom--backend/core/apps/accounts/serializers.py

52 lines
1.9 KiB
Python

from django.db import transaction
from rest_framework import serializers
from core.apps.accounts.models import User
from core.apps.accounts.cache import get_user_credentials, get_user_confirmation_code
class RegisterSerializer(serializers.Serializer):
passport_id = serializers.CharField()
pnfl = serializers.CharField()
email = serializers.EmailField()
password = serializers.CharField()
def validate_email(self, value):
if User.objects.filter(email=value).exists():
raise serializers.ValidationError("User with this email already exists")
user_data = get_user_credentials(email=value)
if user_data:
raise serializers.ValidationError("User with this email already exists")
return value
class ConfirmUserSerializer(serializers.Serializer):
email = serializers.EmailField()
code = serializers.IntegerField()
def validate(self, data):
if User.objects.filter(email=data['email']).exists():
raise serializers.ValidationError('User with this email already exists')
user_data = get_user_credentials(email=data.get('email'))
print(user_data)
if not user_data:
raise serializers.ValidationError("User with this email not found")
confirm_data = get_user_confirmation_code(data['email'], data['code'])
if not confirm_data:
raise serializers.ValidationError("Invalid confirmation code")
data['user_data'] = user_data
return data
def create(self, validated_data):
with transaction.atomic():
user_data = validated_data.get('user_data')
user = User.objects.create(
email=user_data.get('email'),
passport_id=user_data.get('passport_id'),
pnfl=user_data.get('pnfl'),
)
user.set_password(user_data.get('password'))
user.save()
return user