UpdateCurrentUserInfoCommand
Назначение
Обновление профиля текущего пользователя (Name, Email, PhoneNumber). Обновляет UserEntity в БД и запускает UpdateCurrentUserInfo Saga для синхронизации с Keycloak. Публикует AfterUserUpdatedNotification через Outbox.
Цели
- Обновить Name, Email, PhoneNumber в UserEntity
- Синхронизировать профиль с Keycloak через Saga
- Публиковать полный snapshot пользователя в Kafka через Outbox
Command: UpdateCurrentUserInfoCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| Name | FullName | Да | ФИО пользователя |
| string | Да | Email адрес | |
| PhoneNumber | string? | Нет | Номер телефона |
примечание
UserId и TenantId берутся из TenantedUserIdentityContext.
Result: UpdateCurrentUserInfoCommandResult
Пустой результат (команда без возвращаемых данных).
Бизнес-логика
Основной сценарий
- Начать транзакцию (ReadCommitted).
- Получить UserId из TenantedUserIdentityContext.Actor.Id.
- Обновить UserEntity через
userEntityRepository.Update(Name, Email, PhoneNumber). - Создать Saga через
sagaOutboxService.CreateSagaс UpdateCurrentUserInfoSagaConstants (шаг UpdateKeycloakUserProfile, payload UserId, Name, Email, PhoneNumber). - Publish AfterUserUpdatedNotification.
- Commit.
- Вернуть UpdateCurrentUserInfoCommandResult.
Альтернативные сценарии
- Ошибок валидации не предусмотрено; UserEntity всегда существует для авторизованного пользователя.
Диаграмма алгоритма
События
- UpdateCurrentUserInfo Saga — синхронизация с Keycloak (UpdateKeycloakUserProfile).
- AfterUserUpdatedNotification — handler формирует AfterUserUpdatedEvent и записывает в Outbox.