Profile <Aggregate root>

Профиль — агрегат, представляющий публичные и контактные данные пользователя.

Свойства/Действия Тип Комментарий
Id UUID Агрегатный ключ. Назначается один раз и неизменяем.
User Id UUID Ссылка на пользователя из User Management. Инварианты: 1:1 (ровно один Profile на один User Id), обязателен, уникальный индекс по User Id.
First Name Profile Name <Value Object> Обязателен. 2–100 символов, буквы и пробелы; trim; нормализация по локали.
Middle Name Profile Name <Value Object> Необязателен. Если задан — те же правила валидации, что и для имени.
Last Name Profile Name <Value Object> Обязателен. 2–100 символов, буквы и пробелы; trim; нормализация по локали.
Phone Phone Number <Value Object> Необязателен. Value должен быть валидным номером в формате E.164. Хранить в каноническом виде.
Email string Необязателен. Требуется подтверждение для каналов уведомлений.
Language Enum Обязателен. Разрешённые значения: поддерживаемые локали (например, ru-RU, en-US). Смена локали не должна нарушать форматирование данных профиля.
Time zone Enum (IANA) Обязателен. Только валидные IANA идентификаторы (например, Europe/Moscow). Используется для расписаний и «тихих часов».
Avatar url Необязателен. Допустимые форматы и максимальный размер — согласно политике хранения медиа.
Status Status Состояния: Active, Suspended, Deactivated. При Deactivated — запрещены изменения, кроме реактивации; уведомления не отправляются.
createdAt / updatedAt / updatedBy datetime / datetime / UUID Заполняются системой. updatedBy — инициатор последнего изменения.
version number Оптимистическая блокировка. Увеличивается при каждой успешной транзакции изменения агрегата.
Поведения methods create(userId, defaults); changeName(...); changePhone(...); setLocale(...); setTimeZone(...); updateNotificationPreferences(...); deactivate(). Каждое поведение валидирует инварианты и порождает доменное событие.
Доменные события events ProfileCreated, ProfileNameChanged, PhoneChanged, LocaleChanged, TimeZoneChanged, ContactPreferencesChanged, ProfileDeactivated. Служат для интеграций (например, Social media).

Value Objects

Profile Name <Value Object>

Property Comment
value 2–100 символов, буквы и пробелы; trim; сравнение без лишних пробелов, с учётом правил локали

Phone Number <Value Object>

Property Comment
value Обязателен. Должен быть валидным номером в формате E.164, хранится в каноническом виде.

Приватность и уведомления


<aside> 🛡️

Перед правками создана резервная копия: Aggregate Profile — backup 2025-11-09 19:06 MSK.

</aside>