feat(users): normalize email identity storage

This commit is contained in:
2026-05-14 21:17:25 +03:30
parent bb06762377
commit 09d2015351
5 changed files with 117 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ from drf_spectacular.utils import extend_schema_serializer
from rest_framework import serializers
from core.serializers.base import BaseModelSerializer
from apps.users.email_identity import normalize_email_identity
User = get_user_model()
@@ -186,6 +187,20 @@ class UserProfileSerializer(BaseModelSerializer):
full_name = serializers.ReadOnlyField()
age = serializers.ReadOnlyField()
def validate_email(self, value):
normalized = normalize_email_identity(value)
user = self.instance
if normalized is None:
return None
existing = User.objects.filter(email=normalized)
if user is not None:
existing = existing.exclude(pk=user.pk)
if existing.exists():
raise serializers.ValidationError("A user with this email already exists.")
return normalized
class Meta:
model = User
fields = BaseModelSerializer.Meta.fields + (