from rest_framework import serializers from django.contrib.auth.models import User from django.db.utils import IntegrityError from api.models import UserProfile class UserResponseSerializer(serializers.Serializer): id = serializers.IntegerField() email = serializers.EmailField() account_type = serializers.CharField(source='userprofile.account_type') 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() country = serializers.CharField(source='userprofile.country') city = serializers.CharField(source='userprofile.city') 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) name = serializers.CharField(required=True) surname = serializers.CharField(required=True) uuid = serializers.SerializerMethodField() class Meta: model = User fields = ['id', 'uuid', 'name', 'surname', 'email', 'password', 'phone_number', 'privacy_accepted'] extra_kwargs = { 'password': {'write_only': True}, 'email': {'required': True}, 'phone_number': {'required': 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("Необходимо принять условия политики конфиденциальности") return value def create(self, validated_data): privacy_accepted = validated_data.pop('privacy_accepted') phone_number = validated_data.pop('phone_number') name = validated_data.pop('name') surname = validated_data.pop('surname') try: user = User.objects.create_user( username=validated_data['email'], # используем email как username email=validated_data['email'], password=validated_data['password'], first_name=name, last_name=surname ) UserProfile.objects.create( user=user, phone_number=phone_number, privacy_accepted=privacy_accepted ) return user except IntegrityError: raise serializers.ValidationError({"email": "Пользователь с таким email уже существует"})