70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
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 уже существует"}) |