Contexto Delimitado: Autorización
Raíz de Agregado: SystemSuite
Módulo: Ums.Domain.Authorization.SystemSuite
Estado: Producción
El agregado SystemSuite representa una superficie de aplicación perteneciente a un tenant y registrada en UMS. Define la topología funcional consumida por los modelos de autorización aguas abajo y almacena configuraciones operativas a nivel de suite. En la implementación actual, posee entidades hijas Module y AppSetting, y expone un catálogo plano de Action para el targeting de plantillas de permisos.
Code, Name, Description, Status.PermissionTemplate y por los flujos de autorización efectiva.SystemStatus.SystemSuite es la raíz del agregado. Los cambios sobre identidad, módulos, configuraciones y estado deben pasar por la raíz.
TenantId, Code, Name y Description son obligatorios.Code debe ser único dentro del tenant propietario.Module.Code debe ser único dentro de la suite.ConfigurationKey para el mismo ConfigurationScope.| Entidad / VO | Tipo | Propiedad | Descripción |
|—|—|—|—|
| Module | Entidad | Propia | Subsistema funcional dentro de la suite |
| AppSetting | Entidad | Propia | Configuración a nivel de suite |
| Action | Entidad | Propia / catalogada | Tokens de acción expuestos para targeting de autorización |
| TenantId | Objeto de Valor | - | Límite de pertenencia del tenant |
| Code | Objeto de Valor | - | Identificador técnico |
| Name | Objeto de Valor | - | Etiqueta visible |
| Description | Objeto de Valor | - | Descripción funcional |
| SystemStatus | Enumeración | - | Active, Inactive, Beta, etc. |
| Evento | Disparador |
|—|—|
| SystemSuiteRegisteredEvent | Nueva suite creada |
| SystemSuiteStatusChangedEvent | Cambio de estado de la suite |
| SystemSuiteModuleAddedEvent | Módulo agregado |
| SystemSuiteModuleRemovedEvent | Módulo eliminado |
| SystemSuiteModuleStatusChangedEvent | Módulo activado o desactivado |
SystemSuite (Raíz de Agregado)
├── Props: SystemSuiteProps
│ ├── Id: IdValueObject
│ ├── TenantId: TenantId
│ ├── Code: Code
│ ├── Name: Name
│ ├── Description: Description
│ ├── Status: SystemStatus
│ └── Audit: AuditValueObject
├── Hijos
│ ├── IReadOnlyCollection<Module>
│ └── IReadOnlyCollection<AppSetting>
└── Superficie de Catálogo
└── IReadOnlyCollection<Action>
classDiagram
direction TB
class SystemSuite {
+Guid Id
+Guid TenantId
+Code Code
+Name Name
+Description Description
+SystemStatus Status
+List~Module~ Modules
+List~AppSetting~ AppSettings
+List~Action~ Actions
+Create(tenantId, code, name, description, actor)
+Update(name, description, actor)
+SetStatus(status, actor)
+AddModule(code, name, description, sortOrder, actor)
+UpdateModule(moduleId, name, description, sortOrder, actor)
+ActivateModule(moduleId, actor)
+DeactivateModule(moduleId, actor)
+RemoveModule(moduleId, actor)
+AddAppSetting(key, value, scope, actor)
}
class Module {
+Guid Id
+Guid SuiteId
+Code Code
+Name Name
+Description Description
+int SortOrder
+ModuleStatus Status
}
class AppSetting {
+Guid Id
+ConfigurationKey Key
+ConfigurationValue Value
+ConfigurationScope Scope
}
class Action {
+Guid Id
+ActionCode Code
}
SystemSuite "1" *-- "0..*" Module
SystemSuite "1" *-- "0..*" AppSetting
SystemSuite "1" *-- "0..*" Action
sequenceDiagram
participant C as Cliente
participant H as Handler
participant R as ISystemSuiteRepository
participant S as SystemSuite (AR)
C->>H: AddModuleCommand(systemSuiteId, code, name, description, sortOrder)
H->>R: GetById(systemSuiteId)
R-->>H: SystemSuite
H->>S: AddModule(code, name, description, sortOrder, actor)
S->>S: Validar unicidad de código
S->>S: Levantar SystemSuiteModuleAddedEvent
H->>R: Update(systemSuite)
R-->>H: ok
H-->>C: Success
erDiagram
TENANT ||--o{ SYSTEM_SUITE : "posee"
SYSTEM_SUITE ||--o{ MODULE : "contiene"
SYSTEM_SUITE ||--o{ APP_SETTING : "define"
SYSTEM_SUITE ||--o{ ACTION : "expone"
SYSTEM_SUITE {
uniqueidentifier Id PK
uniqueidentifier TenantId FK
nvarchar Code
nvarchar Name
nvarchar Description
int StatusId
nvarchar CreatedBy
datetime2 CreatedAtUtc
nvarchar UpdatedBy
datetime2 UpdatedAtUtc
nvarchar AuditTimeSpan
}
SystemSuite pertenece a un tenant en la implementación actual.PermissionTemplate y por la resolución de autorización efectiva.CreateSystemSuiteCommand -> Entradas: TenantId, Code, Name, Description -> Retorna: GuidUpdateSystemSuiteCommand -> Entradas: SystemSuiteId, Name, Description -> Retorna: voidSetSystemSuiteStatusCommand -> Entradas: SystemSuiteId, Status -> Retorna: voidin-memory) para este agregado.SystemSuite pertenece a un tenant en el modelo de dominio actual, aunque documentación previa lo describiera como catálogo global.