@oondemand/create-central-oon 0.3.8 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -4
- package/bin/cli.js +59 -13
- package/docs/BACKEND_PATTERNS.md +87 -0
- package/docs/CHECKLIST_IMPLEMENTACAO.md +41 -0
- package/docs/CODEX.md +46 -0
- package/docs/COLLECTIONS_AND_PIPELINES.md +66 -0
- package/docs/CONNECTORS_AND_INTEGRATIONS.md +66 -0
- package/docs/DO_AND_DONT.md +27 -0
- package/docs/FRONTEND_MANIFEST_REFERENCE.md +691 -0
- package/docs/FRONTEND_PATTERNS.md +77 -0
- package/docs/OONCORE_ARCHITECTURE.md +50 -0
- package/docs/RBAC_SECURITY.md +35 -0
- package/package.json +6 -3
- package/src/index.js +203 -4
- package/templates/_base/README.md +20 -3
- package/templates/_base/backend/package.json +1 -1
- package/templates/_base/frontend/package.json +1 -1
- package/templates/_base/package.json +15 -0
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# @oondemand/create-central-oon
|
|
2
2
|
|
|
3
|
-
📖 **[Documentação completa → ooncoredoc.vercel.app](https://ooncoredoc.vercel.app)**
|
|
4
|
-
|
|
5
3
|
Gerador de **Centrais Oon**. Cria, a partir do nome da Central, um `backend/` de domínio e um `frontend/` declarativo prontos para consumir o Core (`@oondemand/oon-core-back` e `@oondemand/oon-core-front`).
|
|
6
4
|
|
|
5
|
+
> A documentação pública pode existir para consulta, mas a fonte de verdade para codificação assistida fica dentro deste pacote npm, versionada junto com o gerador.
|
|
6
|
+
|
|
7
7
|
Toda Central gerada nasce com o padrão visual e operacional consolidado na **Central Minexco**:
|
|
8
8
|
|
|
9
9
|
- identidade visual Oon/CST com Poppins, azul `#0474AF` e fundo `#F8F9FA`;
|
|
@@ -36,6 +36,57 @@ Aliases: o binário também responde por `scaffold-central-oon`.
|
|
|
36
36
|
| `--no-install` | Não roda `npm install` nos projetos gerados. |
|
|
37
37
|
| `--list` | Lista os templates e sai. |
|
|
38
38
|
|
|
39
|
+
## Documentação interna para Codex
|
|
40
|
+
|
|
41
|
+
O pacote inclui documentação canônica em `docs/`. Ela é publicada no npm junto com o gerador.
|
|
42
|
+
|
|
43
|
+
A referência completa das opções do manifesto front fica em:
|
|
44
|
+
|
|
45
|
+
```txt
|
|
46
|
+
packages/create-central-oon/docs/FRONTEND_MANIFEST_REFERENCE.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Ao criar uma Central, o CLI gera uma pasta `.ooncore/` com um cache local da documentação da versão instalada:
|
|
50
|
+
|
|
51
|
+
```txt
|
|
52
|
+
<central>/
|
|
53
|
+
└── .ooncore/
|
|
54
|
+
├── CODEX.md
|
|
55
|
+
├── context.generated.md
|
|
56
|
+
├── manifest.json
|
|
57
|
+
└── docs/
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
A pasta `.ooncore/` não é a fonte de verdade. Ela é apenas o contexto local para o Codex trabalhar sem depender de site externo.
|
|
61
|
+
|
|
62
|
+
### Sincronizar documentação local
|
|
63
|
+
|
|
64
|
+
Na raiz da Central:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm run ooncore:docs
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
ou diretamente:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npx create-central-oon docs --sync
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Verificar se está atualizada
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm run ooncore:docs:check
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
ou diretamente:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npx create-central-oon docs --check
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
O check compara a versão e o hash da documentação local com a versão instalada do pacote.
|
|
89
|
+
|
|
39
90
|
## Templates funcionais
|
|
40
91
|
|
|
41
92
|
Todos utilizam o mesmo frontend padrão Minexco.
|
|
@@ -55,6 +106,8 @@ Todos utilizam o mesmo frontend padrão Minexco.
|
|
|
55
106
|
```txt
|
|
56
107
|
<central>/
|
|
57
108
|
├── README.md
|
|
109
|
+
├── package.json # scripts de sync/check da documentação OonCore
|
|
110
|
+
├── .ooncore/ # cache local gerado a partir do pacote instalado
|
|
58
111
|
├── backend/ # consome @oondemand/oon-core-back
|
|
59
112
|
│ ├── central.config.js # identidade + módulos + paths de domínio
|
|
60
113
|
│ ├── central.manifest.json # valores de deploy (render no Core)
|
|
@@ -70,8 +123,11 @@ Todos utilizam o mesmo frontend padrão Minexco.
|
|
|
70
123
|
## Próximos passos após gerar
|
|
71
124
|
|
|
72
125
|
```bash
|
|
73
|
-
cd <central
|
|
74
|
-
|
|
126
|
+
cd <central>
|
|
127
|
+
npm run ooncore:docs:check
|
|
128
|
+
|
|
129
|
+
cd backend && cp .env.example .env && npm run dev
|
|
130
|
+
cd ../frontend && cp .env.example .env && npm run dev
|
|
75
131
|
```
|
|
76
132
|
|
|
77
133
|
Evoluir a Central significa criar models em `backend/src/models` e declarar as telas em `frontend/central.ui.json`. Menu, rotas, datagrids, formulários e esteiras são montados pelo Core mantendo o padrão Minexco.
|
package/bin/cli.js
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* CLI do create-central-oon
|
|
5
|
+
* CLI do create-central-oon.
|
|
6
6
|
*
|
|
7
7
|
* npx create-central-oon <nome-da-central> [opções]
|
|
8
|
+
* npx create-central-oon docs --sync
|
|
9
|
+
* npx create-central-oon docs --check
|
|
8
10
|
*
|
|
9
11
|
* Opções:
|
|
10
12
|
* --template=<t> Template inicial (default: basic). Veja --list.
|
|
@@ -12,26 +14,62 @@
|
|
|
12
14
|
* --force Sobrescreve pasta existente.
|
|
13
15
|
* --no-install Não roda npm install nos projetos gerados.
|
|
14
16
|
* --list Lista os templates disponíveis e sai.
|
|
17
|
+
*
|
|
18
|
+
* Documentação:
|
|
19
|
+
* docs --sync Gera/atualiza .ooncore/ com a documentação da versão instalada.
|
|
20
|
+
* docs --check Valida se .ooncore/ está sincronizado com a versão instalada.
|
|
15
21
|
*/
|
|
16
22
|
|
|
17
|
-
const { run, listTemplates } = require("../src/index");
|
|
23
|
+
const { run, listTemplates, syncDocs, checkDocs } = require("../src/index");
|
|
18
24
|
|
|
19
25
|
function parseArgs(argv) {
|
|
20
|
-
const opts = {
|
|
26
|
+
const opts = {
|
|
27
|
+
command: null,
|
|
28
|
+
template: "basic",
|
|
29
|
+
here: false,
|
|
30
|
+
force: false,
|
|
31
|
+
install: true,
|
|
32
|
+
list: false,
|
|
33
|
+
docsSync: false,
|
|
34
|
+
docsCheck: false,
|
|
35
|
+
};
|
|
21
36
|
const positionals = [];
|
|
22
|
-
|
|
37
|
+
|
|
38
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
39
|
+
const arg = argv[i];
|
|
40
|
+
|
|
23
41
|
if (arg === "--here") opts.here = true;
|
|
24
42
|
else if (arg === "--force") opts.force = true;
|
|
25
43
|
else if (arg === "--no-install") opts.install = false;
|
|
26
44
|
else if (arg === "--list") opts.list = true;
|
|
45
|
+
else if (arg === "--sync") opts.docsSync = true;
|
|
46
|
+
else if (arg === "--check") opts.docsCheck = true;
|
|
27
47
|
else if (arg.startsWith("--template=")) opts.template = arg.slice("--template=".length);
|
|
28
|
-
else if (arg === "--template")
|
|
29
|
-
|
|
48
|
+
else if (arg === "--template") {
|
|
49
|
+
opts.template = argv[i + 1];
|
|
50
|
+
i += 1;
|
|
51
|
+
} else if (!arg.startsWith("-")) {
|
|
52
|
+
positionals.push(arg);
|
|
53
|
+
}
|
|
30
54
|
}
|
|
31
|
-
|
|
55
|
+
|
|
56
|
+
if (positionals[0] === "docs") {
|
|
57
|
+
opts.command = "docs";
|
|
58
|
+
} else {
|
|
59
|
+
opts.name = positionals[0];
|
|
60
|
+
}
|
|
61
|
+
|
|
32
62
|
return opts;
|
|
33
63
|
}
|
|
34
64
|
|
|
65
|
+
function printUsage() {
|
|
66
|
+
console.error("Uso:");
|
|
67
|
+
console.error(" npx create-central-oon <nome-da-central> [--template=basic]");
|
|
68
|
+
console.error(" npx create-central-oon --list");
|
|
69
|
+
console.error(" npx create-central-oon docs --sync");
|
|
70
|
+
console.error(" npx create-central-oon docs --check");
|
|
71
|
+
}
|
|
72
|
+
|
|
35
73
|
async function main() {
|
|
36
74
|
const opts = parseArgs(process.argv.slice(2));
|
|
37
75
|
|
|
@@ -41,13 +79,21 @@ async function main() {
|
|
|
41
79
|
process.exit(0);
|
|
42
80
|
}
|
|
43
81
|
|
|
44
|
-
if (!opts.name) {
|
|
45
|
-
console.error("Uso: npx create-central-oon <nome-da-central> [--template=basic]");
|
|
46
|
-
console.error(" npx create-central-oon --list");
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
82
|
try {
|
|
83
|
+
if (opts.command === "docs") {
|
|
84
|
+
if (opts.docsCheck) {
|
|
85
|
+
checkDocs();
|
|
86
|
+
} else {
|
|
87
|
+
syncDocs();
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (!opts.name) {
|
|
93
|
+
printUsage();
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
|
|
51
97
|
await run(opts);
|
|
52
98
|
} catch (err) {
|
|
53
99
|
console.error("\n✖", err.message);
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Padrões Backend
|
|
2
|
+
|
|
3
|
+
O backend da Central deve conter apenas domínio e extensões. Boot, infraestrutura, CRUD padrão, autenticação, RBAC e metadata pertencem ao `@oondemand/oon-core-back`.
|
|
4
|
+
|
|
5
|
+
## Estrutura esperada
|
|
6
|
+
|
|
7
|
+
```txt
|
|
8
|
+
backend/
|
|
9
|
+
├── central.config.js
|
|
10
|
+
├── central.manifest.json
|
|
11
|
+
└── src/
|
|
12
|
+
├── models/
|
|
13
|
+
├── validations/
|
|
14
|
+
├── triggers/
|
|
15
|
+
├── hooks/
|
|
16
|
+
├── mappings/
|
|
17
|
+
├── documents/
|
|
18
|
+
├── pipelines/
|
|
19
|
+
├── integrations/
|
|
20
|
+
├── routes/
|
|
21
|
+
├── controllers/
|
|
22
|
+
└── services/
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Models
|
|
26
|
+
|
|
27
|
+
Use models para declarar entidades de negócio. Cada model deve ser pequeno, com nomes claros e campos compatíveis com as telas e integrações.
|
|
28
|
+
|
|
29
|
+
Boas práticas:
|
|
30
|
+
|
|
31
|
+
- use campos explícitos;
|
|
32
|
+
- defina tipos, obrigatoriedade e enums quando aplicável;
|
|
33
|
+
- preserve campos de status para esteiras;
|
|
34
|
+
- evite regras complexas diretamente no schema;
|
|
35
|
+
- evite dependência direta de frontend.
|
|
36
|
+
|
|
37
|
+
## Validations
|
|
38
|
+
|
|
39
|
+
Use validations para regras de negócio síncronas e mensagens claras para o usuário.
|
|
40
|
+
|
|
41
|
+
Exemplos:
|
|
42
|
+
|
|
43
|
+
- campo obrigatório condicional;
|
|
44
|
+
- status permitido para transição;
|
|
45
|
+
- valor mínimo/máximo;
|
|
46
|
+
- combinação inválida de campos;
|
|
47
|
+
- bloqueio por permissão ou perfil.
|
|
48
|
+
|
|
49
|
+
## Triggers e hooks
|
|
50
|
+
|
|
51
|
+
Use triggers e hooks para efeitos controlados depois ou antes de alterações.
|
|
52
|
+
|
|
53
|
+
Exemplos:
|
|
54
|
+
|
|
55
|
+
- criar ticket de integração;
|
|
56
|
+
- recalcular campos derivados;
|
|
57
|
+
- gerar histórico operacional;
|
|
58
|
+
- disparar conector;
|
|
59
|
+
- atualizar etapa da esteira.
|
|
60
|
+
|
|
61
|
+
Regras:
|
|
62
|
+
|
|
63
|
+
- trigger não deve esconder regra crítica sem validação;
|
|
64
|
+
- evite efeitos irreversíveis sem log;
|
|
65
|
+
- integração externa deve passar por camada de integração/conector;
|
|
66
|
+
- falhas de integração devem gerar status rastreável, não quebrar silenciosamente o processo.
|
|
67
|
+
|
|
68
|
+
## Rotas customizadas
|
|
69
|
+
|
|
70
|
+
Crie rotas customizadas somente quando o CRUD/metadata do Core não resolver.
|
|
71
|
+
|
|
72
|
+
Toda rota customizada deve ter:
|
|
73
|
+
|
|
74
|
+
- autenticação;
|
|
75
|
+
- verificação de permissão;
|
|
76
|
+
- validação de entrada;
|
|
77
|
+
- tratamento de erro;
|
|
78
|
+
- resposta padronizada;
|
|
79
|
+
- ausência de segredo hardcoded.
|
|
80
|
+
|
|
81
|
+
## Serviços
|
|
82
|
+
|
|
83
|
+
Use `services/` para regras reutilizáveis. Evite controllers grandes.
|
|
84
|
+
|
|
85
|
+
## Segurança
|
|
86
|
+
|
|
87
|
+
Nunca confie no frontend para permissão, tenant, app ou perfil. O backend deve validar tudo que altera dados, dispara integrações ou expõe informações sensíveis.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Checklist de Implementação
|
|
2
|
+
|
|
3
|
+
Use este checklist antes de concluir qualquer tarefa de codificação em uma Central Oon.
|
|
4
|
+
|
|
5
|
+
## Contexto
|
|
6
|
+
|
|
7
|
+
- [ ] Rodei `npm run ooncore:docs:check`.
|
|
8
|
+
- [ ] Rodei `npm run ooncore:docs` se havia documentação desatualizada.
|
|
9
|
+
- [ ] Li `.ooncore/context.generated.md`.
|
|
10
|
+
- [ ] Entendi qual recurso do Core já resolve parte da necessidade.
|
|
11
|
+
|
|
12
|
+
## Backend
|
|
13
|
+
|
|
14
|
+
- [ ] Usei model, validation, trigger, hook, mapping ou integration quando aplicável.
|
|
15
|
+
- [ ] Evitei recriar CRUD.
|
|
16
|
+
- [ ] Validei entrada.
|
|
17
|
+
- [ ] Validei permissão no backend.
|
|
18
|
+
- [ ] Tratei erros.
|
|
19
|
+
- [ ] Não hardcodei segredos.
|
|
20
|
+
- [ ] Mantive rastreabilidade.
|
|
21
|
+
|
|
22
|
+
## Frontend
|
|
23
|
+
|
|
24
|
+
- [ ] Usei `central.ui.json` antes de criar componente customizado.
|
|
25
|
+
- [ ] Evitei recriar shell, rotas, menu, datagrid ou form.
|
|
26
|
+
- [ ] Usei override apenas quando necessário.
|
|
27
|
+
- [ ] Não coloquei regra crítica apenas no frontend.
|
|
28
|
+
|
|
29
|
+
## Integrações
|
|
30
|
+
|
|
31
|
+
- [ ] Usei camada de integração/conector.
|
|
32
|
+
- [ ] Modelei mapping.
|
|
33
|
+
- [ ] Registrei status de integração.
|
|
34
|
+
- [ ] Normalizei erros externos.
|
|
35
|
+
- [ ] Não expus credenciais.
|
|
36
|
+
|
|
37
|
+
## Entrega
|
|
38
|
+
|
|
39
|
+
- [ ] A Central continua atualizável com novas versões do Core.
|
|
40
|
+
- [ ] A alteração é pequena, coesa e aderente à arquitetura.
|
|
41
|
+
- [ ] O comportamento esperado está documentado no README ou no próprio módulo quando necessário.
|
package/docs/CODEX.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# CODEX.md — Regras de Codificação OonCore
|
|
2
|
+
|
|
3
|
+
Este arquivo é a porta de entrada para o Codex codificar uma Central Oon.
|
|
4
|
+
|
|
5
|
+
A fonte de verdade desta documentação é a versão instalada do pacote `@oondemand/create-central-oon`. A pasta `.ooncore/` gerada em cada Central é apenas um cache local, criado por `create-central-oon docs --sync`.
|
|
6
|
+
|
|
7
|
+
## Antes de codificar
|
|
8
|
+
|
|
9
|
+
1. Rode `npm run ooncore:docs:check` na raiz da Central.
|
|
10
|
+
2. Se estiver desatualizado, rode `npm run ooncore:docs`.
|
|
11
|
+
3. Leia `.ooncore/context.generated.md`.
|
|
12
|
+
4. Identifique o recurso do Core que resolve a necessidade antes de criar código customizado.
|
|
13
|
+
|
|
14
|
+
## Princípios obrigatórios
|
|
15
|
+
|
|
16
|
+
- Escreva apenas o domínio da Central.
|
|
17
|
+
- Use `@oondemand/oon-core-back` para boot, autenticação, RBAC, CRUD, metadata, auditoria e padrões de API.
|
|
18
|
+
- Use `@oondemand/oon-core-front` para shell, rotas, menu, datagrid, formulários, badges, ações e renderização por metadata.
|
|
19
|
+
- Não recrie infraestrutura que já existe no Core.
|
|
20
|
+
- Não crie autenticação paralela.
|
|
21
|
+
- Não duplique RBAC no frontend.
|
|
22
|
+
- Não hardcode tenant, app, usuário, perfil, permissões, URLs sensíveis ou segredos.
|
|
23
|
+
- Não exponha chaves em código, templates ou documentação gerada.
|
|
24
|
+
- Não altere arquivos gerados do Core se houver extensão declarativa disponível.
|
|
25
|
+
- Prefira models, validations, triggers, hooks, mappings, documents, pipelines, integrations e overrides declarativos.
|
|
26
|
+
|
|
27
|
+
## Ordem de decisão
|
|
28
|
+
|
|
29
|
+
Ao implementar uma necessidade, siga esta ordem:
|
|
30
|
+
|
|
31
|
+
1. Configuração existente do Core.
|
|
32
|
+
2. Declaração em `central.config.js` ou `central.ui.json`.
|
|
33
|
+
3. Model, validation, trigger, hook ou mapping no backend da Central.
|
|
34
|
+
4. Override local pequeno e isolado.
|
|
35
|
+
5. Código customizado somente quando o Core não oferecer extensão adequada.
|
|
36
|
+
|
|
37
|
+
## Entrega segura
|
|
38
|
+
|
|
39
|
+
Toda alteração deve manter:
|
|
40
|
+
|
|
41
|
+
- rastreabilidade;
|
|
42
|
+
- validação de entrada;
|
|
43
|
+
- RBAC no backend;
|
|
44
|
+
- ausência de segredo hardcoded;
|
|
45
|
+
- separação entre domínio da Central e infraestrutura do Core;
|
|
46
|
+
- compatibilidade com atualização futura dos pacotes `@oondemand/*`.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Coleções, Documentos e Esteiras
|
|
2
|
+
|
|
3
|
+
Coleções, documentos e esteiras são a base operacional da Central Oon.
|
|
4
|
+
|
|
5
|
+
## Coleções
|
|
6
|
+
|
|
7
|
+
Use coleções para entidades de negócio:
|
|
8
|
+
|
|
9
|
+
- clientes;
|
|
10
|
+
- fornecedores;
|
|
11
|
+
- pedidos;
|
|
12
|
+
- pagamentos;
|
|
13
|
+
- documentos fiscais;
|
|
14
|
+
- serviços tomados;
|
|
15
|
+
- serviços prestados;
|
|
16
|
+
- integrações;
|
|
17
|
+
- tickets operacionais.
|
|
18
|
+
|
|
19
|
+
Cada coleção deve ter:
|
|
20
|
+
|
|
21
|
+
- model no backend;
|
|
22
|
+
- metadata para CRUD;
|
|
23
|
+
- campos de status quando participar de esteira;
|
|
24
|
+
- validações de negócio;
|
|
25
|
+
- configuração de tela no frontend.
|
|
26
|
+
|
|
27
|
+
## Documentos
|
|
28
|
+
|
|
29
|
+
Use documentos para entidades que exigem governança documental, aprovação, anexos ou histórico específico.
|
|
30
|
+
|
|
31
|
+
Exemplos:
|
|
32
|
+
|
|
33
|
+
- NF;
|
|
34
|
+
- contrato;
|
|
35
|
+
- proposta;
|
|
36
|
+
- comprovante;
|
|
37
|
+
- ordem de serviço;
|
|
38
|
+
- pedido de compra.
|
|
39
|
+
|
|
40
|
+
## Esteiras de processo
|
|
41
|
+
|
|
42
|
+
Use esteiras para fluxos operacionais com etapas claras.
|
|
43
|
+
|
|
44
|
+
Boas práticas:
|
|
45
|
+
|
|
46
|
+
- status/etapa deve estar no backend;
|
|
47
|
+
- transições devem ser validadas;
|
|
48
|
+
- ações devem registrar usuário e data;
|
|
49
|
+
- exceções devem ter status próprio;
|
|
50
|
+
- cada etapa deve representar uma decisão operacional real.
|
|
51
|
+
|
|
52
|
+
## Esteiras de integração
|
|
53
|
+
|
|
54
|
+
Use esteiras de integração para acompanhar comunicação com sistemas externos.
|
|
55
|
+
|
|
56
|
+
Estados recomendados:
|
|
57
|
+
|
|
58
|
+
- pendente;
|
|
59
|
+
- em processamento;
|
|
60
|
+
- enviado;
|
|
61
|
+
- concluído;
|
|
62
|
+
- falha;
|
|
63
|
+
- aguardando retry;
|
|
64
|
+
- cancelado.
|
|
65
|
+
|
|
66
|
+
Integrações não devem ser caixas-pretas. O usuário operacional precisa enxergar o que aconteceu, qual erro ocorreu e qual ação pode ser tomada.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Conectores e Integrações
|
|
2
|
+
|
|
3
|
+
Toda integração deve ser modelada como um processo rastreável, não como chamada solta dentro de controller.
|
|
4
|
+
|
|
5
|
+
## Objetivo
|
|
6
|
+
|
|
7
|
+
Transformar cada integração em:
|
|
8
|
+
|
|
9
|
+
```txt
|
|
10
|
+
configuração + mapping + execução + status + rastreabilidade
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Estrutura recomendada
|
|
14
|
+
|
|
15
|
+
```txt
|
|
16
|
+
backend/src/integrations/
|
|
17
|
+
├── <sistema>/
|
|
18
|
+
│ ├── client.js
|
|
19
|
+
│ ├── mappings/
|
|
20
|
+
│ ├── services/
|
|
21
|
+
│ └── README.md
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Client
|
|
25
|
+
|
|
26
|
+
O client deve concentrar:
|
|
27
|
+
|
|
28
|
+
- URL base;
|
|
29
|
+
- autenticação;
|
|
30
|
+
- headers;
|
|
31
|
+
- timeout;
|
|
32
|
+
- retry técnico;
|
|
33
|
+
- normalização de erro.
|
|
34
|
+
|
|
35
|
+
Não coloque regra de negócio no client.
|
|
36
|
+
|
|
37
|
+
## Mapping
|
|
38
|
+
|
|
39
|
+
Mappings devem transformar dados entre a Central e o sistema externo.
|
|
40
|
+
|
|
41
|
+
Regras:
|
|
42
|
+
|
|
43
|
+
- mapping deve ser explícito;
|
|
44
|
+
- campos obrigatórios devem ser validados antes do envio;
|
|
45
|
+
- resposta externa deve ser normalizada;
|
|
46
|
+
- erros devem ser compreensíveis para operação.
|
|
47
|
+
|
|
48
|
+
## Esteira de integração
|
|
49
|
+
|
|
50
|
+
Toda integração relevante deve gerar registro operacional com:
|
|
51
|
+
|
|
52
|
+
- origem;
|
|
53
|
+
- destino;
|
|
54
|
+
- payload resumido ou referência;
|
|
55
|
+
- status;
|
|
56
|
+
- tentativas;
|
|
57
|
+
- erro normalizado;
|
|
58
|
+
- data/hora;
|
|
59
|
+
- usuário ou processo responsável.
|
|
60
|
+
|
|
61
|
+
## Segurança
|
|
62
|
+
|
|
63
|
+
- Nunca versionar app key, secret, token ou credencial.
|
|
64
|
+
- Não logar payloads sensíveis sem necessidade.
|
|
65
|
+
- Não expor credenciais no frontend.
|
|
66
|
+
- Usar `.env` e configuração de ambiente.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Do and Don't
|
|
2
|
+
|
|
3
|
+
## Faça
|
|
4
|
+
|
|
5
|
+
- Use o Core antes de criar código novo.
|
|
6
|
+
- Modele o domínio com clareza.
|
|
7
|
+
- Prefira configuração e metadata.
|
|
8
|
+
- Escreva validações explícitas.
|
|
9
|
+
- Mantenha regras críticas no backend.
|
|
10
|
+
- Use esteiras para processos com status.
|
|
11
|
+
- Use conectores para integrações.
|
|
12
|
+
- Registre erros de forma operacional.
|
|
13
|
+
- Mantenha compatibilidade com atualização dos pacotes.
|
|
14
|
+
- Atualize `.ooncore/` com `npm run ooncore:docs`.
|
|
15
|
+
|
|
16
|
+
## Não faça
|
|
17
|
+
|
|
18
|
+
- Não recrie CRUD.
|
|
19
|
+
- Não recrie autenticação.
|
|
20
|
+
- Não duplique RBAC no frontend.
|
|
21
|
+
- Não criar um frontend inteiro se um override resolve.
|
|
22
|
+
- Não chamar APIs externas direto de qualquer lugar.
|
|
23
|
+
- Não hardcode tenant, app, usuário, URL sensível ou segredo.
|
|
24
|
+
- Não colocar regra crítica apenas no frontend.
|
|
25
|
+
- Não ignorar logs e rastreabilidade.
|
|
26
|
+
- Não editar `.ooncore/context.generated.md` manualmente.
|
|
27
|
+
- Não depender de documentação externa para codificar a arquitetura.
|