Назначение
Добавление роли сотруднику. Создаётся запись UserRoleReferenceEntity. Требует разрешение Identity.Employees.Roles.Create.
Цели
- Проверить существование UserId и RoleId
- Проверить отсутствие пары (UserId, RoleId) в UserRoleReferenceEntity
- Создать UserRoleReferenceEntity
- Опубликовать AfterUserUpdatedNotification
Command: AddRoleToEmployeeCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|
| UserId | Guid | Да | Идентификатор пользователя |
| RoleId | long | Да | Идентификатор роли |
Result: AddRoleToEmployeeCommandResult
| Поле | Тип | Обязательное | Описание |
|---|
| UserRoleReferenceId | long | Да | Идентификатор созданной связи UserRoleReference |
Бизнес-логика
Основной сценарий
- Проверить существование UserId через
userEntityRepository.IsExistId.
- Если не существует — ошибка «Пользователь не найден».
- Проверить существование RoleId через
roleEntityRepository.IsExistId.
- Если не существует — ошибка «Роль не найдена».
- Проверить отсутствие пары (UserId, RoleId) через
userRoleReferenceEntityRepository.Any.
- Если пара существует — ошибка «Пользователь уже имеет эту роль».
- Начать транзакцию (ReadCommitted).
- Создать UserRoleReferenceEntity (TenantId из контекста).
- Publish AfterUserUpdatedNotification.
- Commit.
- Вернуть UserRoleReferenceId.
Альтернативные сценарии
- Пользователь не найден: ошибка «Пользователь не найден».
- Роль не найдена: ошибка «Роль не найдена».
- У пользователя уже есть эта роль: ошибка «Пользователь уже имеет эту роль».
Диаграмма алгоритма
События
Связанные сущности