Назначение
Создание тенанта. При создании автоматически создаются роли из шаблонов (RoleTemplateEntity).
Цели
- Регистрация нового тенанта (клиента, организации)
- Уникальность по ИНН
- Автоматическое создание ролей из шаблонов
Command: CreateTenantCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|
| Inn | string | Да | ИНН компании |
| Type | TenantType | Да | Тип тенанта (Developer, Distributor, Contractor) |
| ContactEmail | string | Да | Email для связи |
| ContactPhone | string | Да | Номер телефона |
| IdempotencyKey | Guid | Да | Ключ идемпотентности |
Result: CreateTenantCommandResult
| Поле | Тип | Обязательное | Описание |
|---|
| TenantId | Guid | Да | ID созданного тенанта |
| Roles | IReadOnlyCollection<CreateTenantCommandResultRole> | Да | Созданные роли из шаблонов |
CreateTenantCommandResultRole
| Поле | Тип | Обязательное | Описание |
|---|
| Id | long | Да | Идентификатор роли |
| Name | string | Да | Название роли |
| Code | string | Да | Код роли |
Валидация
- ИНН должен быть уникальным. При наличии тенанта с таким ИНН возвращается ошибка «В системе уже зарегистрирована компания с ИНН».
Бизнес-логика
- Начать транзакцию (IsolationLevel.Serializable).
- Проверить, что тенанта с таким ИНН нет.
- Создать TenantEntity (таблица TenantEntity; Id = Guid.CreateVersion7, LegalEntity с Inn, Kpp=empty, Name=Inn, Address=empty, Ogrn=empty).
- Получить все RoleTemplateEntity (таблица RoleTemplateEntity).
- Для каждого шаблона создать RoleEntity (TenantId, Name, Code, RoleTemplateId) в таблице RoleEntity.
- Commit.
- Вернуть TenantId и список созданных ролей.
События
События не публикуются. CreateTenant — внутренняя операция.
Связанные сущности