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 уже существует"})