synapos 2.5.0
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/.github/copilot-instructions.md +72 -0
- package/.synapos/.manifest.json +155 -0
- package/.synapos/GUIDE.md +660 -0
- package/.synapos/VERSION +1 -0
- package/.synapos/_memory/company.md +11 -0
- package/.synapos/_memory/preferences.md +15 -0
- package/.synapos/copilot.md +451 -0
- package/.synapos/core/best-practices/_catalog.yaml +56 -0
- package/.synapos/core/best-practices/content/blog-post.md +238 -0
- package/.synapos/core/best-practices/content/copywriting.md +164 -0
- package/.synapos/core/best-practices/content/linkedin-post.md +186 -0
- package/.synapos/core/best-practices/dev/api-design.md +274 -0
- package/.synapos/core/best-practices/dev/code-review.md +138 -0
- package/.synapos/core/best-practices/dev/git-workflow.md +256 -0
- package/.synapos/core/best-practices/dev/testing-strategy.md +213 -0
- package/.synapos/core/best-practices/product/product-spec.md +235 -0
- package/.synapos/core/best-practices/product/technical-writing.md +264 -0
- package/.synapos/core/best-practices/product/user-research.md +242 -0
- package/.synapos/core/commands/bump.md +59 -0
- package/.synapos/core/commands/debug/session.md +100 -0
- package/.synapos/core/commands/migrate/v1-to-v2.md +142 -0
- package/.synapos/core/commands/set-model.md +197 -0
- package/.synapos/core/commands/setup/build-business.md +378 -0
- package/.synapos/core/commands/setup/build-tech.md +374 -0
- package/.synapos/core/commands/setup/discover.md +543 -0
- package/.synapos/core/commands/setup/from-code.md +407 -0
- package/.synapos/core/commands/setup/start.md +201 -0
- package/.synapos/core/copilot-adapter.md +283 -0
- package/.synapos/core/gate-system.md +417 -0
- package/.synapos/core/model-adapter.md +245 -0
- package/.synapos/core/orchestrator.md +794 -0
- package/.synapos/core/pipeline-runner.md +784 -0
- package/.synapos/core/pipelines/pre-execution.yaml +107 -0
- package/.synapos/core/rules/product-agent.mdc +59 -0
- package/.synapos/core/skills-engine.md +207 -0
- package/.synapos/core/versioning.md +218 -0
- package/.synapos/skills/.gitkeep +0 -0
- package/.synapos/skills/brave-search/SKILL.md +130 -0
- package/.synapos/skills/fetch-url/SKILL.md +135 -0
- package/.synapos/skills/filesystem/SKILL.md +162 -0
- package/.synapos/skills/github/SKILL.md +148 -0
- package/.synapos/skills/playwright-browser/SKILL.md +124 -0
- package/.synapos/squad-templates/backend/agents/alexandre-api.agent.md +243 -0
- package/.synapos/squad-templates/backend/agents/bruno-base.agent.md +240 -0
- package/.synapos/squad-templates/backend/agents/daniela-dados.agent.md +267 -0
- package/.synapos/squad-templates/backend/agents/roberto-revisao-be.agent.md +219 -0
- package/.synapos/squad-templates/backend/agents/sergio-seguranca.agent.md +266 -0
- package/.synapos/squad-templates/backend/pipelines/api-development.yaml +83 -0
- package/.synapos/squad-templates/backend/pipelines/bug-fix.yaml +41 -0
- package/.synapos/squad-templates/backend/pipelines/database-migration.yaml +56 -0
- package/.synapos/squad-templates/backend/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/backend/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/backend/pipelines/steps/02-design-api.md +155 -0
- package/.synapos/squad-templates/backend/pipelines/steps/03-checkpoint-contrato.md +44 -0
- package/.synapos/squad-templates/backend/pipelines/steps/04-implementacao.md +113 -0
- package/.synapos/squad-templates/backend/pipelines/steps/05-seguranca.md +100 -0
- package/.synapos/squad-templates/backend/pipelines/steps/06-review.md +80 -0
- package/.synapos/squad-templates/backend/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-02-diagnostico.md +47 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-03-fix.md +41 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-04-review.md +42 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-02-schema.md +85 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-03-checkpoint.md +30 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-04-migration.md +58 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-05-review.md +44 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/backend/template.yaml +72 -0
- package/.synapos/squad-templates/devops/agents/claudio-containers.agent.md +245 -0
- package/.synapos/squad-templates/devops/agents/igor-infra.agent.md +198 -0
- package/.synapos/squad-templates/devops/agents/osvaldo-observabilidade.agent.md +262 -0
- package/.synapos/squad-templates/devops/agents/patricia-pipeline.agent.md +253 -0
- package/.synapos/squad-templates/devops/pipelines/ci-cd-setup.yaml +93 -0
- package/.synapos/squad-templates/devops/pipelines/infra-provision.yaml +56 -0
- package/.synapos/squad-templates/devops/pipelines/quick-fix.yaml +41 -0
- package/.synapos/squad-templates/devops/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/devops/pipelines/steps/02-infra-design.md +31 -0
- package/.synapos/squad-templates/devops/pipelines/steps/03-containers.md +28 -0
- package/.synapos/squad-templates/devops/pipelines/steps/04-checkpoint.md +20 -0
- package/.synapos/squad-templates/devops/pipelines/steps/05-pipeline-cicd.md +29 -0
- package/.synapos/squad-templates/devops/pipelines/steps/06-observabilidade.md +28 -0
- package/.synapos/squad-templates/devops/pipelines/steps/07-review.md +27 -0
- package/.synapos/squad-templates/devops/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-02-design.md +21 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-03-iac.md +20 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-04-checkpoint.md +22 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-05-apply.md +22 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-03-executar.md +52 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/devops/template.yaml +68 -0
- package/.synapos/squad-templates/engineer/agents/leo-engenheiro.agent.md +203 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/01-gate.md +22 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/02-preparacao.md +66 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/03-investigacao.md +110 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/04-checkpoint-contexto.md +24 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/05-arquitetura.md +127 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/06-checkpoint-arquitetura.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/07-planejamento.md +109 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/08-checkpoint-plano.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/09-execucao.md +121 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/atualizar-tarefa.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/visual-spec.md +74 -0
- package/.synapos/squad-templates/engineer/pipelines/feature-development.yaml +107 -0
- package/.synapos/squad-templates/engineer/template.yaml +56 -0
- package/.synapos/squad-templates/frontend/agents/ana-arquitetura-fe.agent.md +245 -0
- package/.synapos/squad-templates/frontend/agents/paulo-performance.agent.md +234 -0
- package/.synapos/squad-templates/frontend/agents/renata-revisao-fe.agent.md +219 -0
- package/.synapos/squad-templates/frontend/agents/rodrigo-react.agent.md +261 -0
- package/.synapos/squad-templates/frontend/agents/tiago-testes-fe.agent.md +229 -0
- package/.synapos/squad-templates/frontend/agents/ursula-ui.agent.md +283 -0
- package/.synapos/squad-templates/frontend/pipelines/bug-fix.yaml +40 -0
- package/.synapos/squad-templates/frontend/pipelines/component-development.yaml +48 -0
- package/.synapos/squad-templates/frontend/pipelines/feature-development.yaml +76 -0
- package/.synapos/squad-templates/frontend/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/02-arquitetura.md +100 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/03-checkpoint-design.md +43 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/04-implementacao.md +114 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/05-review.md +104 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/06-docs.md +51 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-02-diagnostico.md +52 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-03-fix.md +58 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-04-review.md +43 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/cd-02-spec.md +96 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-03-executar.md +45 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/frontend/template.yaml +77 -0
- package/.synapos/squad-templates/fullstack/agents/carlos-coordenador.agent.md +266 -0
- package/.synapos/squad-templates/fullstack/pipelines/bug-fix.yaml +46 -0
- package/.synapos/squad-templates/fullstack/pipelines/integration-feature.yaml +92 -0
- package/.synapos/squad-templates/fullstack/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/02-contrato-api.md +63 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/03-checkpoint-contrato.md +25 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/04-frontend.md +35 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/05-backend.md +36 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/06-integracao.md +47 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/07-review.md +49 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-02-diagnostico.md +34 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-03-fix.md +22 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-04-review.md +22 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/fullstack/template.yaml +93 -0
- package/.synapos/squad-templates/ia-dados/agents/diana-dados.agent.md +269 -0
- package/.synapos/squad-templates/ia-dados/agents/larissa-llm.agent.md +255 -0
- package/.synapos/squad-templates/ia-dados/agents/marco-ml.agent.md +227 -0
- package/.synapos/squad-templates/ia-dados/agents/nelson-notebook.agent.md +252 -0
- package/.synapos/squad-templates/ia-dados/pipelines/data-pipeline.yaml +71 -0
- package/.synapos/squad-templates/ia-dados/pipelines/ml-feature.yaml +91 -0
- package/.synapos/squad-templates/ia-dados/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/02-exploracao.md +36 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/03-design.md +25 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/04-checkpoint.md +23 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/05-implementacao.md +26 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/06-avaliacao.md +29 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/07-deploy.md +30 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-02-design.md +21 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-03-checkpoint.md +14 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-04-implementacao.md +19 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-05-qualidade.md +21 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-06-deploy.md +22 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-03-executar.md +53 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/ia-dados/template.yaml +68 -0
- package/.synapos/squad-templates/mobile/agents/felipe-feature.agent.md +234 -0
- package/.synapos/squad-templates/mobile/agents/marina-mobile.agent.md +219 -0
- package/.synapos/squad-templates/mobile/agents/viviane-visual.agent.md +218 -0
- package/.synapos/squad-templates/mobile/pipelines/bug-fix.yaml +47 -0
- package/.synapos/squad-templates/mobile/pipelines/feature-development.yaml +77 -0
- package/.synapos/squad-templates/mobile/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/02-arquitetura.md +35 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/03-design-ux.md +29 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/04-checkpoint.md +20 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/05-implementacao.md +26 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/06-review.md +27 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-02-diagnostico.md +22 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-03-fix.md +23 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-04-review.md +20 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/mobile/template.yaml +73 -0
- package/.synapos/squad-templates/produto/agents/ana-analise.agent.md +243 -0
- package/.synapos/squad-templates/produto/agents/eduardo-estrategia.agent.md +258 -0
- package/.synapos/squad-templates/produto/agents/paulo-pesquisa.agent.md +226 -0
- package/.synapos/squad-templates/produto/agents/priscila-produto.agent.md +235 -0
- package/.synapos/squad-templates/produto/agents/tania-tecnica.agent.md +239 -0
- package/.synapos/squad-templates/produto/agents/ursula-ux.agent.md +231 -0
- package/.synapos/squad-templates/produto/pipelines/discovery-spec-handoff.yaml +152 -0
- package/.synapos/squad-templates/produto/pipelines/nova-feature.yaml +77 -0
- package/.synapos/squad-templates/produto/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/produto/pipelines/quick-spec.yaml +60 -0
- package/.synapos/squad-templates/produto/pipelines/refinar-docs.yaml +33 -0
- package/.synapos/squad-templates/produto/pipelines/steps/01-gate-integridade.md +48 -0
- package/.synapos/squad-templates/produto/pipelines/steps/02-contexto-negocio.md +119 -0
- package/.synapos/squad-templates/produto/pipelines/steps/03-personas.md +107 -0
- package/.synapos/squad-templates/produto/pipelines/steps/04-checkpoint-research.md +53 -0
- package/.synapos/squad-templates/produto/pipelines/steps/04b-alinhamento-estrategico.md +92 -0
- package/.synapos/squad-templates/produto/pipelines/steps/05-spec.md +138 -0
- package/.synapos/squad-templates/produto/pipelines/steps/05b-checkpoint-spec.md +60 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06-requisitos.md +118 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06b-checkpoint-requisitos.md +53 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06c-visual-spec.md +59 -0
- package/.synapos/squad-templates/produto/pipelines/steps/07-arquitetura.md +160 -0
- package/.synapos/squad-templates/produto/pipelines/steps/08-handoff.md +130 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-02-validar-requisito.md +73 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-03-verificar-docs.md +69 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-04-spec.md +160 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-05-checkpoint-aprovacao.md +50 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-06-versionar.md +71 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-07-handoff.md +99 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-08-criar-tarefas.md +232 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-02-contexto.md +59 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-03-spec.md +67 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-05-handoff.md +49 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-02-selecionar.md +66 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-03-delta.md +73 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-04-criar-versao.md +86 -0
- package/.synapos/squad-templates/produto/template.yaml +91 -0
- package/.synapos/squads/.gitkeep +0 -0
- package/README.md +285 -0
- package/bin/synapos.js +331 -0
- package/package.json +26 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: api-design
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
domain: [backend, fullstack]
|
|
5
|
+
whenToUse: "Quando o squad projeta ou documenta APIs REST ou GraphQL"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Design de API
|
|
9
|
+
|
|
10
|
+
> Convenções para criar APIs REST e GraphQL consistentes, versionadas e fáceis de consumir.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## REST
|
|
15
|
+
|
|
16
|
+
### Nomenclatura de Recursos
|
|
17
|
+
|
|
18
|
+
Use **substantivos no plural** para recursos, nunca verbos:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
✅ GET /users
|
|
22
|
+
✅ GET /users/:id
|
|
23
|
+
✅ POST /users
|
|
24
|
+
✅ PUT /users/:id
|
|
25
|
+
✅ DELETE /users/:id
|
|
26
|
+
|
|
27
|
+
❌ GET /getUser
|
|
28
|
+
❌ POST /createUser
|
|
29
|
+
❌ DELETE /deleteUser/:id
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Hierarquia de Recursos
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
GET /projects/:id/tasks → lista tasks de um projeto
|
|
36
|
+
POST /projects/:id/tasks → cria task no projeto
|
|
37
|
+
GET /projects/:id/tasks/:taskId → detalhe de task específica
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Evite hierarquias com mais de 2 níveis — sinalize com `?filter=` ou recurso separado.
|
|
41
|
+
|
|
42
|
+
### Métodos HTTP
|
|
43
|
+
|
|
44
|
+
| Método | Uso | Idempotente? | Body? |
|
|
45
|
+
|--------|-----|-------------|-------|
|
|
46
|
+
| GET | Leitura | ✅ | ❌ |
|
|
47
|
+
| POST | Criação | ❌ | ✅ |
|
|
48
|
+
| PUT | Substituição total | ✅ | ✅ |
|
|
49
|
+
| PATCH | Atualização parcial | ✅ | ✅ |
|
|
50
|
+
| DELETE | Remoção | ✅ | ❌ |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Códigos de Status HTTP
|
|
55
|
+
|
|
56
|
+
### Sucesso (2xx)
|
|
57
|
+
| Status | Quando usar |
|
|
58
|
+
|--------|-------------|
|
|
59
|
+
| `200 OK` | GET, PUT, PATCH bem-sucedidos |
|
|
60
|
+
| `201 Created` | POST que cria recurso — inclua `Location` header |
|
|
61
|
+
| `204 No Content` | DELETE bem-sucedido, PATCH sem corpo de resposta |
|
|
62
|
+
|
|
63
|
+
### Erro do cliente (4xx)
|
|
64
|
+
| Status | Quando usar |
|
|
65
|
+
|--------|-------------|
|
|
66
|
+
| `400 Bad Request` | Dados inválidos, validação falhou |
|
|
67
|
+
| `401 Unauthorized` | Não autenticado — token ausente ou inválido |
|
|
68
|
+
| `403 Forbidden` | Autenticado mas sem permissão |
|
|
69
|
+
| `404 Not Found` | Recurso não existe |
|
|
70
|
+
| `409 Conflict` | Conflito de estado — ex: email já cadastrado |
|
|
71
|
+
| `422 Unprocessable Entity` | Sintaxe válida mas semanticamente incorreto |
|
|
72
|
+
| `429 Too Many Requests` | Rate limit atingido |
|
|
73
|
+
|
|
74
|
+
### Erro do servidor (5xx)
|
|
75
|
+
| Status | Quando usar |
|
|
76
|
+
|--------|-------------|
|
|
77
|
+
| `500 Internal Server Error` | Erro inesperado no servidor |
|
|
78
|
+
| `503 Service Unavailable` | Serviço temporariamente indisponível |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Formato de Resposta
|
|
83
|
+
|
|
84
|
+
### Sucesso — lista
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"data": [
|
|
88
|
+
{ "id": "uuid", "name": "Ana", "email": "ana@example.com" }
|
|
89
|
+
],
|
|
90
|
+
"pagination": {
|
|
91
|
+
"page": 1,
|
|
92
|
+
"pageSize": 20,
|
|
93
|
+
"total": 143,
|
|
94
|
+
"totalPages": 8
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Sucesso — item único
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"data": {
|
|
103
|
+
"id": "uuid",
|
|
104
|
+
"name": "Ana",
|
|
105
|
+
"email": "ana@example.com",
|
|
106
|
+
"createdAt": "2026-03-23T10:00:00Z"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Erro
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"error": {
|
|
115
|
+
"code": "VALIDATION_ERROR",
|
|
116
|
+
"message": "Dados inválidos",
|
|
117
|
+
"details": [
|
|
118
|
+
{ "field": "email", "message": "Email inválido" },
|
|
119
|
+
{ "field": "name", "message": "Nome é obrigatório" }
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Convenções de campos
|
|
126
|
+
- Datas: **ISO 8601** (`2026-03-23T10:00:00Z`)
|
|
127
|
+
- IDs: **UUID v4** (evite IDs numéricos sequenciais expostos)
|
|
128
|
+
- Campos monetários: **inteiro em centavos** (`1999` = R$ 19,99)
|
|
129
|
+
- Case: **camelCase** para JSON
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Paginação
|
|
134
|
+
|
|
135
|
+
### Offset-based (padrão)
|
|
136
|
+
```
|
|
137
|
+
GET /users?page=2&pageSize=20
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Resposta inclui `pagination.total` para calcular páginas.
|
|
141
|
+
|
|
142
|
+
### Cursor-based (grandes volumes, feeds em tempo real)
|
|
143
|
+
```
|
|
144
|
+
GET /notifications?cursor=eyJpZCI6MTIzfQ&limit=20
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Resposta inclui `nextCursor` (null quando última página).
|
|
148
|
+
|
|
149
|
+
### Quando usar cada um
|
|
150
|
+
| Situação | Tipo |
|
|
151
|
+
|----------|------|
|
|
152
|
+
| Tabelas admin, relatórios | Offset |
|
|
153
|
+
| Feeds, timelines, grande volume | Cursor |
|
|
154
|
+
| Itens que mudam frequentemente | Cursor |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Filtros e Ordenação
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
GET /users?role=admin&status=active
|
|
162
|
+
GET /users?sort=createdAt&order=desc
|
|
163
|
+
GET /users?search=ana
|
|
164
|
+
GET /products?minPrice=100&maxPrice=500
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Versionamento
|
|
170
|
+
|
|
171
|
+
### Estratégia recomendada: URL path
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
/api/v1/users
|
|
175
|
+
/api/v2/users
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Regras
|
|
179
|
+
- Versão **MAJOR** na URL apenas quando há breaking change
|
|
180
|
+
- Mantenha v-anterior ativa por pelo menos **6 meses** após lançamento da nova
|
|
181
|
+
- Documente o que mudou entre versões
|
|
182
|
+
- Comunique deprecation via header: `Deprecation: 2026-09-23`
|
|
183
|
+
|
|
184
|
+
### Breaking changes (exigem nova versão)
|
|
185
|
+
- Remoção de campo obrigatório
|
|
186
|
+
- Mudança de tipo de campo
|
|
187
|
+
- Remoção de endpoint
|
|
188
|
+
- Mudança de comportamento de autenticação
|
|
189
|
+
|
|
190
|
+
### Non-breaking changes (não exigem nova versão)
|
|
191
|
+
- Adicionar campo opcional à resposta
|
|
192
|
+
- Adicionar novo endpoint
|
|
193
|
+
- Adicionar novo parâmetro de filtro opcional
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## GraphQL
|
|
198
|
+
|
|
199
|
+
### Convenções de Schema
|
|
200
|
+
|
|
201
|
+
```graphql
|
|
202
|
+
type User {
|
|
203
|
+
id: ID!
|
|
204
|
+
name: String!
|
|
205
|
+
email: String!
|
|
206
|
+
role: UserRole!
|
|
207
|
+
createdAt: DateTime!
|
|
208
|
+
posts: [Post!]!
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
enum UserRole {
|
|
212
|
+
ADMIN
|
|
213
|
+
MEMBER
|
|
214
|
+
VIEWER
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
type Query {
|
|
218
|
+
user(id: ID!): User
|
|
219
|
+
users(filter: UserFilter, pagination: PaginationInput): UserConnection!
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
type Mutation {
|
|
223
|
+
createUser(input: CreateUserInput!): CreateUserPayload!
|
|
224
|
+
updateUser(id: ID!, input: UpdateUserInput!): UpdateUserPayload!
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Padrões obrigatórios
|
|
229
|
+
- Use **Input types** para mutations (não argumentos avulsos)
|
|
230
|
+
- Use **Payload types** para retorno de mutations (permite adicionar campos sem breaking change)
|
|
231
|
+
- Use **Connection pattern** para listas paginadas
|
|
232
|
+
- Nunca exponha campos de senha ou dados sensíveis no schema
|
|
233
|
+
|
|
234
|
+
### Erros em GraphQL
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"errors": [
|
|
238
|
+
{
|
|
239
|
+
"message": "Email já cadastrado",
|
|
240
|
+
"extensions": {
|
|
241
|
+
"code": "EMAIL_ALREADY_EXISTS",
|
|
242
|
+
"field": "email"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
],
|
|
246
|
+
"data": null
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### N+1 em GraphQL
|
|
251
|
+
- Use **DataLoader** para batch de queries relacionadas
|
|
252
|
+
- Implemente **query depth limiting** (máx 5–7 níveis)
|
|
253
|
+
- Monitore queries lentas com APM
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Segurança
|
|
258
|
+
|
|
259
|
+
- **Sempre use HTTPS** — sem exceções
|
|
260
|
+
- **Autentique todos os endpoints** exceto os explicitamente públicos
|
|
261
|
+
- **Rate limiting**: 100 req/min para usuários autenticados, 20 req/min para anônimos
|
|
262
|
+
- **Valide e sanitize** todos os inputs no servidor
|
|
263
|
+
- **Não exponha stack traces** em respostas de erro em produção
|
|
264
|
+
- **Versione segredos** fora do código (env vars / secret manager)
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Documentação
|
|
269
|
+
|
|
270
|
+
- Use **OpenAPI 3.x** para documentar REST
|
|
271
|
+
- Inclua exemplos reais de request e response
|
|
272
|
+
- Documente todos os códigos de erro possíveis
|
|
273
|
+
- Mantenha docs atualizadas junto com o código (code-first ou schema-first)
|
|
274
|
+
- Ferramentas: Swagger UI, Redoc, Scalar
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: code-review
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
domain: [frontend, backend, fullstack, mobile]
|
|
5
|
+
whenToUse: "Quando o squad faz review de código em qualquer linguagem"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Guia de Code Review
|
|
9
|
+
|
|
10
|
+
> Referência para conduzir reviews construtivos, eficientes e consistentes.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Princípios
|
|
15
|
+
|
|
16
|
+
- **Review é colaboração, não crítica pessoal** — o alvo é o código, não o autor
|
|
17
|
+
- **Clareza sobre completude** — um review útil é melhor que um review perfeito que demora dias
|
|
18
|
+
- **Contexto sempre** — entenda o objetivo do PR antes de avaliar as escolhas
|
|
19
|
+
- **Automatize o óbvio** — lint, formatação e testes devem ser verificados por CI, não por humanos
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Categorias de Comentário
|
|
24
|
+
|
|
25
|
+
Use prefixos para indicar a gravidade e intenção de cada comentário:
|
|
26
|
+
|
|
27
|
+
| Prefixo | Significado | Bloqueia merge? |
|
|
28
|
+
|---------|-------------|-----------------|
|
|
29
|
+
| `BLOCKER:` | Problema que deve ser corrigido antes do merge | ✅ Sim |
|
|
30
|
+
| `SUGGESTION:` | Melhoria recomendada, mas não obrigatória | ❌ Não |
|
|
31
|
+
| `QUESTION:` | Dúvida legítima — pode ser falta de contexto | ❌ Não |
|
|
32
|
+
| `PRAISE:` | Algo que merece reconhecimento explícito | ❌ Não |
|
|
33
|
+
| `NITPICK:` | Preferência pessoal, baixíssima prioridade | ❌ Não |
|
|
34
|
+
|
|
35
|
+
### Exemplos
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
BLOCKER: Esta query não tem índice em `user_id`. Em produção com volume vai travar.
|
|
39
|
+
|
|
40
|
+
SUGGESTION: Extrair esse bloco para um custom hook `useFormValidation` melhoraria
|
|
41
|
+
a legibilidade e facilitaria os testes.
|
|
42
|
+
|
|
43
|
+
QUESTION: Por que optou por `useEffect` aqui em vez de `useMemo`? Há alguma
|
|
44
|
+
dependência externa que precisa de side effect?
|
|
45
|
+
|
|
46
|
+
PRAISE: Boa escolha em usar `AbortController` — o tratamento de cancelamento
|
|
47
|
+
de fetch estava faltando há tempo.
|
|
48
|
+
|
|
49
|
+
NITPICK: Prefiro `const` ao invés de `let` aqui, mas ambos funcionam.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Checklist do Reviewer
|
|
55
|
+
|
|
56
|
+
### Lógica e Corretude
|
|
57
|
+
- [ ] O código faz o que o PR descreve?
|
|
58
|
+
- [ ] Edge cases e valores nulos são tratados?
|
|
59
|
+
- [ ] Condições de corrida ou problemas de concorrência?
|
|
60
|
+
- [ ] Reversibilidade: o PR pode ser revertido sem efeitos colaterais?
|
|
61
|
+
|
|
62
|
+
### Qualidade e Manutenibilidade
|
|
63
|
+
- [ ] O código é legível sem precisar de comentário explicativo?
|
|
64
|
+
- [ ] Funções/métodos têm responsabilidade única?
|
|
65
|
+
- [ ] Há duplicação que poderia ser extraída?
|
|
66
|
+
- [ ] Nomes de variáveis e funções são descritivos e consistentes?
|
|
67
|
+
|
|
68
|
+
### Performance
|
|
69
|
+
- [ ] Há chamadas N+1 em loops?
|
|
70
|
+
- [ ] Queries ao banco são otimizadas (índices, projeção de campos)?
|
|
71
|
+
- [ ] Há operações custosas que poderiam ser cacheadas?
|
|
72
|
+
|
|
73
|
+
### Segurança
|
|
74
|
+
- [ ] Inputs do usuário são validados e sanitizados?
|
|
75
|
+
- [ ] Dados sensíveis não são logados ou expostos?
|
|
76
|
+
- [ ] Autenticação e autorização verificadas nos novos endpoints?
|
|
77
|
+
|
|
78
|
+
### Testes
|
|
79
|
+
- [ ] Os testes cobrem o caminho feliz?
|
|
80
|
+
- [ ] Os testes cobrem casos de erro e edge cases relevantes?
|
|
81
|
+
- [ ] Os testes são legíveis e descrevem o comportamento esperado?
|
|
82
|
+
|
|
83
|
+
### Documentação
|
|
84
|
+
- [ ] Mudanças de API estão documentadas?
|
|
85
|
+
- [ ] Decisões não óbvias têm comentário ou ADR?
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Tom Construtivo
|
|
90
|
+
|
|
91
|
+
### Faça
|
|
92
|
+
- Explique o **porquê** da sua sugestão
|
|
93
|
+
- Ofereça alternativas concretas quando apontar problemas
|
|
94
|
+
- Reconheça explicitamente boas escolhas
|
|
95
|
+
- Pergunte antes de assumir que é um erro
|
|
96
|
+
|
|
97
|
+
### Evite
|
|
98
|
+
- Comentários vagos: ~~"Isso está errado"~~ → diga o que está errado e por quê
|
|
99
|
+
- Tom imperativo sem explicação: ~~"Muda isso"~~ → "Sugiro mudar X porque Y"
|
|
100
|
+
- Reviews exaustivas sobre estilo que o linter deveria pegar
|
|
101
|
+
- Ignorar o contexto do PR (deadline, constraint técnica, débito aceito)
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Fluxo de Review
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
Autor abre PR
|
|
109
|
+
↓
|
|
110
|
+
CI roda (lint + testes) — falha aqui bloqueia review
|
|
111
|
+
↓
|
|
112
|
+
Reviewer lê descrição + contexto
|
|
113
|
+
↓
|
|
114
|
+
Reviewer comenta com categorias claras
|
|
115
|
+
↓
|
|
116
|
+
Autor responde / corrige / justifica
|
|
117
|
+
↓
|
|
118
|
+
Reviewer aprova ou abre nova rodada (max 2 rodadas para BLOCKERs)
|
|
119
|
+
↓
|
|
120
|
+
Merge
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Tempo esperado
|
|
124
|
+
- PRs pequenos (< 200 linhas): review em até 24h
|
|
125
|
+
- PRs médios (200–500 linhas): review em até 48h
|
|
126
|
+
- PRs grandes (> 500 linhas): considere quebrar o PR
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Tamanho de PR
|
|
131
|
+
|
|
132
|
+
| Tamanho | Linhas | Qualidade do review |
|
|
133
|
+
|---------|--------|---------------------|
|
|
134
|
+
| Ótimo | < 200 | Alta — fácil de revisar completamente |
|
|
135
|
+
| Aceitável | 200–500 | Média — revisor pode perder detalhes |
|
|
136
|
+
| Problemático | > 500 | Baixa — dividir em PRs menores |
|
|
137
|
+
|
|
138
|
+
> PRs grandes não são mais produtivos — são mais difíceis de revisar, mais difíceis de reverter e têm maior chance de conflito.
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: git-workflow
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
domain: [frontend, backend, fullstack, mobile, devops]
|
|
5
|
+
whenToUse: "Quando o squad trabalha com branches, commits e PRs"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Git Workflow
|
|
9
|
+
|
|
10
|
+
> Convenções de branching, commits semânticos, PRs e estratégia de merge.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Branch Strategy
|
|
15
|
+
|
|
16
|
+
### Modelo: GitHub Flow (recomendado para a maioria dos projetos)
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
main
|
|
20
|
+
├── feat/auth-login
|
|
21
|
+
├── feat/checkout-v2
|
|
22
|
+
├── fix/payment-timeout
|
|
23
|
+
└── chore/upgrade-deps
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Regras:**
|
|
27
|
+
- `main` é sempre deployável
|
|
28
|
+
- Todo trabalho acontece em feature branches
|
|
29
|
+
- Merge via PR com ao menos 1 aprovação
|
|
30
|
+
- Branch de curta duração (idealmente < 3 dias)
|
|
31
|
+
|
|
32
|
+
### Modelo: Git Flow (projetos com releases cadenciadas)
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
main ← produção
|
|
36
|
+
develop ← integração contínua
|
|
37
|
+
├── feat/ ← features
|
|
38
|
+
├── fix/ ← bugfixes
|
|
39
|
+
├── hotfix/← correções urgentes em prod
|
|
40
|
+
└── release/← preparação de release
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Use quando: produto mobile com release na loja, projetos com janelas de deploy fixas.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Nomenclatura de Branches
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
{tipo}/{descricao-curta}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
| Tipo | Uso |
|
|
54
|
+
|------|-----|
|
|
55
|
+
| `feat/` | Nova funcionalidade |
|
|
56
|
+
| `fix/` | Correção de bug |
|
|
57
|
+
| `chore/` | Manutenção, deps, configs |
|
|
58
|
+
| `refactor/` | Refatoração sem mudança de comportamento |
|
|
59
|
+
| `test/` | Adição ou melhoria de testes |
|
|
60
|
+
| `docs/` | Documentação |
|
|
61
|
+
| `hotfix/` | Correção urgente em produção |
|
|
62
|
+
|
|
63
|
+
### Exemplos
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
feat/user-authentication
|
|
67
|
+
feat/checkout-pix-payment
|
|
68
|
+
fix/cart-total-calculation
|
|
69
|
+
fix/login-redirect-loop
|
|
70
|
+
chore/upgrade-react-19
|
|
71
|
+
refactor/extract-payment-service
|
|
72
|
+
hotfix/payment-gateway-timeout
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Commits Semânticos
|
|
78
|
+
|
|
79
|
+
Formato: `{tipo}({escopo}): {descrição}`
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
feat(auth): adicionar autenticação via Google OAuth
|
|
83
|
+
fix(cart): corrigir cálculo de desconto com cupom
|
|
84
|
+
chore(deps): atualizar react para v19
|
|
85
|
+
refactor(api): extrair camada de serviço de pagamentos
|
|
86
|
+
test(checkout): adicionar testes E2E do fluxo de compra
|
|
87
|
+
docs(api): documentar endpoints de usuário
|
|
88
|
+
perf(dashboard): lazy load de gráficos pesados
|
|
89
|
+
ci: configurar deploy automático para staging
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Tipos válidos
|
|
93
|
+
|
|
94
|
+
| Tipo | Quando usar |
|
|
95
|
+
|------|-------------|
|
|
96
|
+
| `feat` | Nova funcionalidade |
|
|
97
|
+
| `fix` | Correção de bug |
|
|
98
|
+
| `chore` | Tarefas de manutenção, deps, scripts |
|
|
99
|
+
| `refactor` | Refatoração sem mudança de comportamento |
|
|
100
|
+
| `test` | Testes novos ou melhorados |
|
|
101
|
+
| `docs` | Documentação |
|
|
102
|
+
| `perf` | Melhoria de performance |
|
|
103
|
+
| `ci` | Mudanças em CI/CD |
|
|
104
|
+
| `build` | Build system, packaging |
|
|
105
|
+
| `revert` | Reversão de commit anterior |
|
|
106
|
+
|
|
107
|
+
### Regras para a mensagem
|
|
108
|
+
- **Imperativo presente**: "adicionar" não "adicionei" ou "adicionando"
|
|
109
|
+
- **Sem ponto final**
|
|
110
|
+
- **Máx 72 caracteres** na primeira linha
|
|
111
|
+
- Body opcional para contexto: o quê, por quê (não o como)
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
fix(auth): corrigir expiração de token em fuso UTC-3
|
|
115
|
+
|
|
116
|
+
O token era validado em UTC mas comparado com timestamp local,
|
|
117
|
+
causando logout prematuro para usuários no Brasil.
|
|
118
|
+
|
|
119
|
+
Closes #342
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Pull Requests
|
|
125
|
+
|
|
126
|
+
### Antes de abrir o PR
|
|
127
|
+
- [ ] Branch está atualizada com `main` (ou `develop`)
|
|
128
|
+
- [ ] CI local passa (testes + lint)
|
|
129
|
+
- [ ] Código auto-revisado (leia seu próprio diff antes de pedir review)
|
|
130
|
+
- [ ] PR é pequeno e focado em um objetivo
|
|
131
|
+
|
|
132
|
+
### Descrição do PR
|
|
133
|
+
|
|
134
|
+
```markdown
|
|
135
|
+
## O que esse PR faz
|
|
136
|
+
Implementa autenticação via Google OAuth usando a estratégia Passport.js.
|
|
137
|
+
|
|
138
|
+
## Por que
|
|
139
|
+
Usuários solicitaram login social — reduz fricção de cadastro.
|
|
140
|
+
|
|
141
|
+
## Como testar
|
|
142
|
+
1. Configurar `.env` com `GOOGLE_CLIENT_ID` e `GOOGLE_CLIENT_SECRET`
|
|
143
|
+
2. Acessar `/auth/google`
|
|
144
|
+
3. Completar fluxo OAuth
|
|
145
|
+
4. Verificar redirecionamento para dashboard
|
|
146
|
+
|
|
147
|
+
## Checklist
|
|
148
|
+
- [x] Testes passando
|
|
149
|
+
- [x] Sem console.log esquecidos
|
|
150
|
+
- [x] Variáveis de ambiente documentadas no .env.example
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Tamanho do PR
|
|
154
|
+
|
|
155
|
+
| Tamanho | Linhas | Recomendação |
|
|
156
|
+
|---------|--------|--------------|
|
|
157
|
+
| Ideal | < 200 | Revisar no mesmo dia |
|
|
158
|
+
| Aceitável | 200–400 | Revisar em até 24h |
|
|
159
|
+
| Problemático | > 400 | Quebrar em PRs menores |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Squash vs Merge vs Rebase
|
|
164
|
+
|
|
165
|
+
| Estratégia | Quando usar | Resultado |
|
|
166
|
+
|------------|-------------|-----------|
|
|
167
|
+
| **Squash merge** | Feature branches | 1 commit limpo no main |
|
|
168
|
+
| **Merge commit** | Release branches, histórico importante | Todos os commits preservados |
|
|
169
|
+
| **Rebase** | Branches próprias antes do PR | Histórico linear, sem merge commits |
|
|
170
|
+
|
|
171
|
+
### Recomendação padrão
|
|
172
|
+
- Feature branches → **Squash merge** (histórico limpo no main)
|
|
173
|
+
- Hotfixes → **Merge commit** (rastreabilidade de emergência)
|
|
174
|
+
- Nunca force-push em `main` ou `develop`
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Proteção de Branch
|
|
179
|
+
|
|
180
|
+
Configure no GitHub/GitLab:
|
|
181
|
+
|
|
182
|
+
```yaml
|
|
183
|
+
main:
|
|
184
|
+
- Require PR before merging
|
|
185
|
+
- Require at least 1 approval
|
|
186
|
+
- Require status checks: CI, lint, tests
|
|
187
|
+
- Dismiss stale approvals on new commits
|
|
188
|
+
- Restrict force-push
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Git Hooks Recomendados
|
|
194
|
+
|
|
195
|
+
Use **Husky** + **lint-staged**:
|
|
196
|
+
|
|
197
|
+
```json
|
|
198
|
+
{
|
|
199
|
+
"pre-commit": "lint-staged",
|
|
200
|
+
"commit-msg": "commitlint --edit $1"
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
```json
|
|
205
|
+
{
|
|
206
|
+
"lint-staged": {
|
|
207
|
+
"*.{ts,tsx}": ["eslint --fix", "prettier --write"],
|
|
208
|
+
"*.{json,md,yaml}": ["prettier --write"]
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Resolução de Conflitos
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# Atualizar branch com main antes do PR
|
|
219
|
+
git fetch origin
|
|
220
|
+
git rebase origin/main
|
|
221
|
+
|
|
222
|
+
# Se conflito: resolver manualmente, depois
|
|
223
|
+
git add .
|
|
224
|
+
git rebase --continue
|
|
225
|
+
|
|
226
|
+
# Em caso de confusão, abortar e recomeçar
|
|
227
|
+
git rebase --abort
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Regras:**
|
|
231
|
+
- Resolva conflitos na sua branch, não em `main`
|
|
232
|
+
- Nunca resolva conflito em `main` diretamente
|
|
233
|
+
- Em caso de conflito complexo, pair com o autor do código conflitante
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Fluxo Resumido
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
git checkout -b feat/minha-feature
|
|
241
|
+
|
|
242
|
+
# ... trabalho ...
|
|
243
|
+
|
|
244
|
+
git add src/feature.ts
|
|
245
|
+
git commit -m "feat(feature): implementar nova funcionalidade"
|
|
246
|
+
|
|
247
|
+
git fetch origin
|
|
248
|
+
git rebase origin/main
|
|
249
|
+
|
|
250
|
+
git push origin feat/minha-feature
|
|
251
|
+
# → Abre PR no GitHub
|
|
252
|
+
# → CI passa
|
|
253
|
+
# → Code review aprovado
|
|
254
|
+
# → Squash merge em main
|
|
255
|
+
# → Branch deletada automaticamente
|
|
256
|
+
```
|