ums

AppConfiguration — Arquitectura de Agregado

Contexto Delimitado: Configuración
Raíz de Agregado: AppConfiguration
Módulo: Ums.Domain.Configuration.AppConfiguration
Estado: Producción


1. Visión General del Agregado

Propósito

El agregado AppConfiguration representa una entrada individual de configuración jerárquica en UMS. Sigue el patrón corporativo obligatorio code / value / description y puede quedar acotado globalmente, por tenant, por suite o por módulo.

Responsabilidad de Negocio

Raíz de Agregado

AppConfiguration es una raíz de agregado independiente. Cada fila de configuración se administra de forma autónoma.

Invariantes y Reglas de Consistencia

  1. Toda entrada debe contener Code, Value y Description.
  2. El alcance se deriva de la presencia de TenantId, SystemSuiteId y ModuleId.
  3. Las nuevas configuraciones nacen en Draft.
  4. Solo las configuraciones draft pueden actualizarse o publicarse.
  5. Solo las configuraciones published pueden archivarse.
  6. Las actualizaciones incrementan la versión semántica.

Entidades Relacionadas / Objetos de Valor

| Entidad / VO | Tipo | Propiedad | |—|—|—| | AppConfigurationId | Objeto de Valor | Identificador del agregado | | TenantId | Objeto de Valor | Alcance opcional por tenant | | SystemSuiteId | Objeto de Valor | Alcance opcional por suite | | IdValueObject | Objeto de Valor | Alcance opcional por módulo | | Code | Objeto de Valor | Clave técnica | | ConfigurationValue | Objeto de Valor | Valor operacional | | Description | Objeto de Valor | Significado funcional | | ConfigurationScope | Enumeración | Global, Tenant, Suite, Module | | ConfigStatus | Enumeración | Draft, Published, Archived |

Eventos de Dominio

| Evento | Disparador | |—|—| | AppConfigCreatedEvent | Nueva configuración creada | | AppConfigUpdatedEvent | Configuración draft actualizada | | AppConfigPublishedEvent | Configuración publicada | | AppConfigArchivedEvent | Configuración archivada |


2. Modelo de Dominio

AppConfiguration (Raíz de Agregado)
└── Props: AppConfigurationProps
    ├── Id: IdValueObject
    ├── TenantId?: TenantId
    ├── SystemSuiteId?: SystemSuiteId
    ├── ModuleId?: IdValueObject
    ├── Code: Code
    ├── Value: ConfigurationValue
    ├── Description: Description
    ├── Scope: ConfigurationScope
    ├── IsInheritable: bool
    ├── IsEncrypted: bool
    ├── Version: string
    ├── Status: ConfigStatus
    └── Audit: AuditValueObject

3. Diagramas del Modelo de Objetos

classDiagram
    class AppConfiguration {
        +Guid Id
        +Guid? TenantId
        +Guid? SystemSuiteId
        +Guid? ModuleId
        +Code Code
        +ConfigurationValue Value
        +Description Description
        +ConfigurationScope Scope
        +bool IsInheritable
        +bool IsEncrypted
        +string Version
        +ConfigStatus Status
        +Create(tenantId, systemSuiteId, moduleId, code, value, description, isInheritable, isEncrypted, actor)
        +Update(value, description, actor)
        +Publish(actor)
        +Archive(actor)
    }

4. Diagramas de Secuencia

Flujo de Publicación

sequenceDiagram
    participant C as Cliente
    participant H as Handler
    participant R as IAppConfigurationRepository
    participant A as AppConfiguration (AR)

    C->>H: PublishAppConfiguration(configId)
    H->>R: GetById(configId)
    R-->>H: AppConfiguration
    H->>A: Publish(actor)
    A->>A: Validar estado Draft
    A->>A: Levantar AppConfigPublishedEvent
    H->>R: Update(configuration)
    R-->>H: ok

5. Modelo ER

erDiagram
    APP_CONFIGURATION {
        uniqueidentifier Id PK
        uniqueidentifier TenantId FK "Nullable"
        uniqueidentifier SystemSuiteId FK "Nullable"
        uniqueidentifier ModuleId FK "Nullable"
        nvarchar Code
        nvarchar Value
        nvarchar Description
        int ScopeId
        bit IsInheritable
        bit IsEncrypted
        nvarchar Version
        int StatusId
        nvarchar CreatedBy
        datetime2 CreatedAtUtc
        nvarchar UpdatedBy
        datetime2 UpdatedAtUtc
        nvarchar AuditTimeSpan
    }

Reglas de Aislamiento por Tenant


6. Integración entre Contextos Delimitados


7. Capa de Aplicación


8. Infraestructura / Persistencia


9. Seguridad y Cumplimiento


10. Decisiones Técnicas


Volver al Índice de Configuración