- Add audit module with controllers, DTOs, middleware and services - Add MFA controller, routes and services - Add feature flags module with controllers, DTOs and services - Update audit entities with proper TypeORM decorators - Update auth service and DTOs - Update main.ts configuration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.2 KiB
3.2 KiB
Feature Flags Module
Descripcion
Sistema de feature flags/toggles para control de funcionalidades. Permite habilitar/deshabilitar features globalmente o por tenant, con soporte para rollout gradual basado en porcentajes y overrides temporales con expiracion.
Entidades
| Entidad | Schema | Descripcion |
|---|---|---|
Flag |
feature_flags.flags | Definicion de feature flags con estado global y porcentaje de rollout |
TenantOverride |
feature_flags.tenant_overrides | Overrides por tenant con razon y fecha de expiracion |
FlagEvaluation |
feature_flags.flag_evaluations | Log de evaluaciones para auditoria |
Servicios
| Servicio | Responsabilidades |
|---|---|
FeatureFlagsService |
CRUD de flags y overrides; evaluacion de flags; rollout deterministico; limpieza de expirados |
Endpoints
| Method | Path | Descripcion |
|---|---|---|
| GET | /flags |
Lista flags activos |
| GET | /flags/all |
Lista todos los flags (incluyendo inactivos) |
| GET | /flags/tags/:tags |
Lista flags por tags |
| GET | /flags/:id |
Obtiene flag por ID |
| GET | /flags/code/:code |
Obtiene flag por codigo |
| POST | /flags |
Crea nuevo flag |
| PATCH | /flags/:id |
Actualiza flag |
| DELETE | /flags/:id |
Elimina flag (soft/hard) |
| PATCH | /flags/:id/toggle |
Activa/desactiva flag |
| GET | /flags/:id/stats |
Estadisticas de overrides del flag |
| GET | /flags/:flagId/overrides |
Lista overrides de un flag |
| GET | /tenants/:tenantId/overrides |
Lista overrides de un tenant |
| GET | /overrides/:id |
Obtiene override por ID |
| POST | /overrides |
Crea override |
| PATCH | /overrides/:id |
Actualiza override |
| DELETE | /overrides/:id |
Elimina override |
| GET | /evaluate/:code |
Evalua un flag para tenant |
| POST | /evaluate |
Evalua multiples flags |
| GET | /is-enabled/:code |
Check rapido de flag habilitado |
| POST | /maintenance/cleanup |
Limpia overrides expirados |
Dependencias
common- Utilidades compartidas (crypto para hash)
Configuracion
No requiere configuracion de ambiente.
Prioridad de Evaluacion
- Tenant Override (si existe y no ha expirado)
- Estado Global del flag (enabled/disabled)
- Rollout Percentage (si el flag esta habilitado)
- Default (false si el flag no existe)
Rollout Deterministico
El rollout por porcentaje usa un hash MD5 de flagCode:tenantId para asegurar que:
- El mismo tenant siempre obtiene el mismo resultado
- La distribucion es uniforme entre tenants
- No hay necesidad de almacenar el resultado
// Ejemplo: 30% rollout
// Tenants con bucket 0-29 = habilitado
// Tenants con bucket 30-99 = deshabilitado
bucket = MD5(flagCode + tenantId) % 100
enabled = bucket < rolloutPercentage
Fuentes de Evaluacion
| Fuente | Descripcion |
|---|---|
default |
Flag no existe, retorna false |
global |
Valor global del flag |
override |
Override especifico del tenant |
rollout |
Resultado del calculo de rollout |
Mantenimiento
Se recomienda ejecutar POST /maintenance/cleanup periodicamente (cron diario) para eliminar overrides expirados.