UpdateUserContactCommand
Назначение
Обновление записи контактной информации пользователя. Обновляет UserContactEntity и публикует AfterUserUpdatedNotification через Outbox для формирования snapshot и публикации в Kafka.
Цели
- Обновить ContactInfoTypeId и Value в UserContactEntity
- Обеспечить транзакционную целостность
- Публиковать полный snapshot пользователя в Kafka через Outbox
Command: UpdateUserContactCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| ContactId | Guid | Да | Идентификатор записи UserContactEntity |
| ContactInfoTypeId | int | Да | Новый идентификатор типа контакта |
| Value | string | Да | Новое значение контакта |
примечание
UserId и TenantId контакта определяются по UserContactEntity при обновлении.
Result: UpdateUserContactResult
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| ContactId | Guid | Да | Идентификатор обновлённого контакта |
| ContactInfoTypeId | int | Да | Тип контакта |
| Value | string | Да | Значение |
Бизнес-логика
Основной сценарий
- Начать транзакцию (ReadCommitted).
- Получить UserContactEntity по ContactId через
userContactEntityRepository.FindById. - Если не найден — ошибка «Контакт не найден».
- Получить ContactInfoTypeHandbookEntity по ContactInfoTypeId. Если не найден — ошибка «Тип контактной информации не найден».
- Обновить UserContactEntity (ContactInfoTypeId, Value) через
userContactEntityRepository.Update. - Publish AfterUserUpdatedNotification (UserId, TenantId из контакта).
- Commit.
- Вернуть UpdateUserContactResult.
Альтернативные сценарии
- Контакт не найден: ошибка «Контакт не найден» с метаданными ContactId.
- Тип контакта не найден: ошибка «Тип контактной информации не найден» с метаданными ContactInfoTypeId.
Диаграмма алгоритма
События
- AfterUserUpdatedNotification — handler формирует AfterUserUpdatedEvent и записывает в Outbox. Kafka-событие публикуется после commit.