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

UpdateCurrentUserInfoCommand

Назначение

Обновление профиля текущего пользователя (Name, Email, PhoneNumber). Обновляет UserEntity в БД и запускает UpdateCurrentUserInfo Saga для синхронизации с Keycloak. Публикует AfterUserUpdatedNotification через Outbox.

Цели

  • Обновить Name, Email, PhoneNumber в UserEntity
  • Синхронизировать профиль с Keycloak через Saga
  • Публиковать полный snapshot пользователя в Kafka через Outbox

Command: UpdateCurrentUserInfoCommand

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

ПолеТипОбязательноеОписание
NameFullNameДаФИО пользователя
EmailstringДаEmail адрес
PhoneNumberstring?НетНомер телефона
примечание

UserId и TenantId берутся из TenantedUserIdentityContext.

Result: UpdateCurrentUserInfoCommandResult

Пустой результат (команда без возвращаемых данных).

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

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

  1. Начать транзакцию (ReadCommitted).
  2. Получить UserId из TenantedUserIdentityContext.Actor.Id.
  3. Обновить UserEntity через userEntityRepository.Update (Name, Email, PhoneNumber).
  4. Создать Saga через sagaOutboxService.CreateSaga с UpdateCurrentUserInfoSagaConstants (шаг UpdateKeycloakUserProfile, payload UserId, Name, Email, PhoneNumber).
  5. Publish AfterUserUpdatedNotification.
  6. Commit.
  7. Вернуть UpdateCurrentUserInfoCommandResult.

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

  • Ошибок валидации не предусмотрено; UserEntity всегда существует для авторизованного пользователя.

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

События

  • UpdateCurrentUserInfo Saga — синхронизация с Keycloak (UpdateKeycloakUserProfile).
  • AfterUserUpdatedNotification — handler формирует AfterUserUpdatedEvent и записывает в Outbox.

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