Files
tripwithbonus/backend/api/auth/serializers.py
2025-05-18 12:23:05 +03:00

70 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework import serializers
from django.contrib.auth.models import User
from django.db.utils import IntegrityError
from api.models import UserProfile
class UserResponceSerializer(serializers.Serializer):
id = serializers.IntegerField()
email = serializers.EmailField()
name = serializers.CharField(source='first_name')
surname = serializers.CharField(source='last_name')
phone_number = serializers.CharField(source='userprofile.phone_number')
image = serializers.CharField(source='userprofile.image')
uuid = serializers.SerializerMethodField()
def get_uuid(self, obj):
try:
return str(obj.userprofile.uuid)[:6]
except Exception as e:
print(f"Serializer UUID Error: {e}") # лог ошибки
return None
class ClientRegisterSerializer(serializers.ModelSerializer):
phone_number = serializers.CharField(max_length=13)
privacy_accepted = serializers.BooleanField()
email = serializers.EmailField(required=True)
username = serializers.CharField(source='first_name')
uuid = serializers.SerializerMethodField()
class Meta:
model = User
fields = ['id', 'uuid', 'username', 'email', 'password', 'phone_number', 'privacy_accepted']
extra_kwargs = {
'password' : {'write_only':True},
'email' : {'required' : True, 'unique': True},
'phone_number' : {'required' : True, 'unique': True},
}
def validate_phone_number(self, value):
if len(value) > 18:
raise serializers.ValidationError("Номер телефона не может быть таким длинным")
return value
def validate_privacy_accepted(self, value):
if not value:
raise serializers.ValidationError("Необходимо принять условия политики конфиденциальности")
def create(self, validated_data):
privacy_accepted = validated_data.pop('privacy_accepted')
phone_number = validated_data.pop('phone_number')
name = validated_data.pop('first_name')
try:
user = User.objects.create_user(
username=validated_data['name'],
email=validated_data['email'],
password=validated_data['password'],
first_name = name,
)
UserProfile.objects.create(
user=user,
phone_number=phone_number,
privacy_accepted=privacy_accepted
)
return user
except IntegrityError:
raise serializers.ValidationError({"email": "Пользователь с таким email уже существует"})