67 lines
2.1 KiB
Markdown
67 lines
2.1 KiB
Markdown
# Feature Specification: Registry de Módulos Desk (015)
|
|
|
|
**Criado:** 2026-06-16
|
|
**Solicitado por:** Roger
|
|
**Status:** Implementação
|
|
**Prioridade:** P0 (infraestrutura para evolução modular)
|
|
|
|
---
|
|
|
|
## Resumo
|
|
|
|
Cada funcionalidade nova do Ligbox Ops Desk passa a ser um **módulo** registado. O root pode **activar/desactivar** módulos no menu **Módulos**; código desactivado não corre na UI nem enriquece APIs — **sem quebrar** o núcleo.
|
|
|
|
---
|
|
|
|
## Módulos (MVP)
|
|
|
|
| ID | Label | Locked | Nav / efeito |
|
|
|----|-------|--------|----------------|
|
|
| `core` | Núcleo | sim | Dashboard, Tickets, Conta, Auth |
|
|
| `overview` | Audit Overview | não | menu Overview |
|
|
| `overview-home` | Overview Home | não | menu Overview Home |
|
|
| `infra` | Infra | não | menu Infra |
|
|
| `infra2-soc` | Infra 2 SOC | não | menu Infra 2 |
|
|
| `funnel-timing` | Relógio por fase | não | enriquece timeline/audit |
|
|
| `wazuh-soc` | Wazuh SOC Overview | não | card/modal VM104 no Overview |
|
|
| `leads` | Leads abandonados | não | menu Leads |
|
|
| `events` | Eventos webhook | não | menu Eventos |
|
|
| `tenants` | Tenants | não | menu Tenants |
|
|
| `messages` | Mensagens cadastro | não | menu Mensagens |
|
|
| `admin-users` | Administradores | não | menu Administradores |
|
|
|
|
---
|
|
|
|
## Persistência
|
|
|
|
- Ficheiro: `/data/desk_modules.json` (volume Docker)
|
|
- Default: todos activos excepto definido em `registry.py`
|
|
- Override env: `DESK_MODULES_DISABLED=infra2-soc,funnel-timing` (opcional)
|
|
|
|
---
|
|
|
|
## API
|
|
|
|
| Método | Path | Role |
|
|
|--------|------|------|
|
|
| GET | `/api/v1/modules` | autenticado |
|
|
| PATCH | `/api/v1/modules/{module_id}` | `super_admin` |
|
|
|
|
Body PATCH: `{ "enabled": true|false }`
|
|
|
|
---
|
|
|
|
## Frontend
|
|
|
|
- Nav items com `data-module="module-id"`
|
|
- Boot: `GET /api/v1/modules` → `applyModuleVisibility()`
|
|
- `refresh()` ignora views de módulos desactivados
|
|
- Menu **Módulos** (só root): toggles + descrição
|
|
|
|
---
|
|
|
|
## Princípio de não-regressão
|
|
|
|
- Módulo OFF → rotas API opcionais devolvem payload **sem** campos do módulo
|
|
- Módulo OFF → `render*` do módulo não é chamado
|
|
- Núcleo nunca depende de módulos opcionais
|