Перейти к основному содержимому

UpdateUserContactCommand

Назначение

Обновление записи контактной информации пользователя. Обновляет UserContactEntity и публикует AfterUserUpdatedNotification через Outbox для формирования snapshot и публикации в Kafka.

Цели

  • Обновить ContactInfoTypeId и Value в UserContactEntity
  • Обеспечить транзакционную целостность
  • Публиковать полный snapshot пользователя в Kafka через Outbox

Command: UpdateUserContactCommand

Входные данные

ПолеТипОбязательноеОписание
ContactIdGuidДаИдентификатор записи UserContactEntity
ContactInfoTypeIdintДаНовый идентификатор типа контакта
ValuestringДаНовое значение контакта
примечание

UserId и TenantId контакта определяются по UserContactEntity при обновлении.

Result: UpdateUserContactResult

ПолеТипОбязательноеОписание
ContactIdGuidДаИдентификатор обновлённого контакта
ContactInfoTypeIdintДаТип контакта
ValuestringДаЗначение

Бизнес-логика

Основной сценарий

  1. Начать транзакцию (ReadCommitted).
  2. Получить UserContactEntity по ContactId через userContactEntityRepository.FindById.
  3. Если не найден — ошибка «Контакт не найден».
  4. Получить ContactInfoTypeHandbookEntity по ContactInfoTypeId. Если не найден — ошибка «Тип контактной информации не найден».
  5. Обновить UserContactEntity (ContactInfoTypeId, Value) через userContactEntityRepository.Update.
  6. Publish AfterUserUpdatedNotification (UserId, TenantId из контакта).
  7. Commit.
  8. Вернуть UpdateUserContactResult.

Альтернативные сценарии

  • Контакт не найден: ошибка «Контакт не найден» с метаданными ContactId.
  • Тип контакта не найден: ошибка «Тип контактной информации не найден» с метаданными ContactInfoTypeId.

Диаграмма алгоритма

События

  • AfterUserUpdatedNotification — handler формирует AfterUserUpdatedEvent и записывает в Outbox. Kafka-событие публикуется после commit.

Связанные сущности