@maestro-ai/cli 1.0.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.
Files changed (252) hide show
  1. package/README.md +59 -0
  2. package/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +119 -0
  3. package/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +147 -0
  4. package/content/guides/Checklist Mestre de Entrega.md +68 -0
  5. package/content/guides/Gates de Qualidade.md +209 -0
  6. package/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +355 -0
  7. package/content/guides/Guia de Chaos Engineering.md +267 -0
  8. package/content/guides/Guia de Debugging com IA.md +135 -0
  9. package/content/guides/Guia de Estrat/303/251gias de Cache.md" +352 -0
  10. package/content/guides/Guia de Migrations Zero-Downtime.md +311 -0
  11. package/content/guides/Guia de Multi-tenancy.md +368 -0
  12. package/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +195 -0
  13. package/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +162 -0
  14. package/content/guides/Guia de SLOs e Error Budgets.md +315 -0
  15. package/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +93 -0
  16. package/content/guides/Rules base.md +90 -0
  17. package/content/prompts/README.md +203 -0
  18. package/content/prompts/acessibilidade/analise-acessibilidade.md +257 -0
  19. package/content/prompts/apis/design-api-rest.md +303 -0
  20. package/content/prompts/apis/idempotencia.md +254 -0
  21. package/content/prompts/apis/versionamento.md +313 -0
  22. package/content/prompts/arquitetura/arquitetura-c4-completo.md +190 -0
  23. package/content/prompts/arquitetura/clean-architecture.md +151 -0
  24. package/content/prompts/arquitetura/ddd-bounded-contexts.md +183 -0
  25. package/content/prompts/arquitetura/ddd-cqrs.md +176 -0
  26. package/content/prompts/arquitetura/modelo-dominio.md +207 -0
  27. package/content/prompts/arquitetura/multi-tenancy.md +235 -0
  28. package/content/prompts/database/migrations-zero-downtime.md +192 -0
  29. package/content/prompts/database/otimizacao-queries.md +296 -0
  30. package/content/prompts/desenvolvimento/code-review.md +301 -0
  31. package/content/prompts/desenvolvimento/gerar-servico.md +271 -0
  32. package/content/prompts/devops/docker-compose.md +336 -0
  33. package/content/prompts/devops/feature-flags.md +374 -0
  34. package/content/prompts/devops/kubernetes-deploy.md +460 -0
  35. package/content/prompts/devops/pipeline-cicd.md +358 -0
  36. package/content/prompts/devops/terraform-iac.md +502 -0
  37. package/content/prompts/escalabilidade/analise-performance.md +240 -0
  38. package/content/prompts/escalabilidade/analise-performance.txt +94 -0
  39. package/content/prompts/escalabilidade/caching.md +255 -0
  40. package/content/prompts/observabilidade/chaos-testing.md +237 -0
  41. package/content/prompts/observabilidade/estrategia-observabilidade.md +263 -0
  42. package/content/prompts/observabilidade/estrategia-observabilidade.txt +134 -0
  43. package/content/prompts/observabilidade/slos.md +215 -0
  44. package/content/prompts/produto/discovery-inicial.md +203 -0
  45. package/content/prompts/produto/discovery-inicial.txt +33 -0
  46. package/content/prompts/requisitos/refinar-requisitos.md +232 -0
  47. package/content/prompts/requisitos/refinar-requisitos.txt +40 -0
  48. package/content/prompts/seguranca/analise-seguranca.md +243 -0
  49. package/content/prompts/seguranca/pentest-checklist.md +333 -0
  50. package/content/prompts/seguranca/rate-limiting.md +356 -0
  51. package/content/prompts/seguranca/revisao-lgpd.md +227 -0
  52. package/content/prompts/seguranca/threat-modeling.md +224 -0
  53. package/content/prompts/testes/contract-testing.md +340 -0
  54. package/content/prompts/testes/gerar-testes-unitarios.md +474 -0
  55. package/content/prompts/testes/testes-e2e.md +460 -0
  56. package/content/prompts/testes/testes-integracao.md +418 -0
  57. package/content/prompts/testes/testes-performance.md +458 -0
  58. package/content/prompts/ux/gerar-ui-stitch.md +151 -0
  59. package/content/skills/api-patterns/SKILL.md +81 -0
  60. package/content/skills/api-patterns/api-style.md +42 -0
  61. package/content/skills/api-patterns/auth.md +24 -0
  62. package/content/skills/api-patterns/documentation.md +26 -0
  63. package/content/skills/api-patterns/graphql.md +41 -0
  64. package/content/skills/api-patterns/rate-limiting.md +31 -0
  65. package/content/skills/api-patterns/response.md +37 -0
  66. package/content/skills/api-patterns/rest.md +40 -0
  67. package/content/skills/api-patterns/scripts/api_validator.py +211 -0
  68. package/content/skills/api-patterns/security-testing.md +122 -0
  69. package/content/skills/api-patterns/trpc.md +41 -0
  70. package/content/skills/api-patterns/versioning.md +22 -0
  71. package/content/skills/app-builder/SKILL.md +75 -0
  72. package/content/skills/app-builder/agent-coordination.md +71 -0
  73. package/content/skills/app-builder/feature-building.md +53 -0
  74. package/content/skills/app-builder/project-detection.md +34 -0
  75. package/content/skills/app-builder/scaffolding.md +118 -0
  76. package/content/skills/app-builder/tech-stack.md +40 -0
  77. package/content/skills/app-builder/templates/SKILL.md +39 -0
  78. package/content/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  79. package/content/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  80. package/content/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  81. package/content/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  82. package/content/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  83. package/content/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  84. package/content/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  85. package/content/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  86. package/content/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  87. package/content/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  88. package/content/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  89. package/content/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  90. package/content/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  91. package/content/skills/architecture/SKILL.md +55 -0
  92. package/content/skills/architecture/context-discovery.md +43 -0
  93. package/content/skills/architecture/examples.md +94 -0
  94. package/content/skills/architecture/pattern-selection.md +68 -0
  95. package/content/skills/architecture/patterns-reference.md +50 -0
  96. package/content/skills/architecture/trade-off-analysis.md +77 -0
  97. package/content/skills/bash-linux/SKILL.md +199 -0
  98. package/content/skills/behavioral-modes/SKILL.md +242 -0
  99. package/content/skills/brainstorming/SKILL.md +163 -0
  100. package/content/skills/brainstorming/dynamic-questioning.md +350 -0
  101. package/content/skills/clean-code/SKILL.md +201 -0
  102. package/content/skills/code-review-checklist/SKILL.md +109 -0
  103. package/content/skills/database-design/SKILL.md +52 -0
  104. package/content/skills/database-design/database-selection.md +43 -0
  105. package/content/skills/database-design/indexing.md +39 -0
  106. package/content/skills/database-design/migrations.md +48 -0
  107. package/content/skills/database-design/optimization.md +36 -0
  108. package/content/skills/database-design/orm-selection.md +30 -0
  109. package/content/skills/database-design/schema-design.md +56 -0
  110. package/content/skills/database-design/scripts/schema_validator.py +172 -0
  111. package/content/skills/deployment-procedures/SKILL.md +241 -0
  112. package/content/skills/doc.md +177 -0
  113. package/content/skills/documentation-templates/SKILL.md +194 -0
  114. package/content/skills/frontend-design/SKILL.md +396 -0
  115. package/content/skills/frontend-design/animation-guide.md +331 -0
  116. package/content/skills/frontend-design/color-system.md +311 -0
  117. package/content/skills/frontend-design/decision-trees.md +418 -0
  118. package/content/skills/frontend-design/motion-graphics.md +306 -0
  119. package/content/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  120. package/content/skills/frontend-design/scripts/ux_audit.py +722 -0
  121. package/content/skills/frontend-design/typography-system.md +345 -0
  122. package/content/skills/frontend-design/ux-psychology.md +541 -0
  123. package/content/skills/frontend-design/visual-effects.md +383 -0
  124. package/content/skills/game-development/2d-games/SKILL.md +119 -0
  125. package/content/skills/game-development/3d-games/SKILL.md +135 -0
  126. package/content/skills/game-development/SKILL.md +167 -0
  127. package/content/skills/game-development/game-art/SKILL.md +185 -0
  128. package/content/skills/game-development/game-audio/SKILL.md +190 -0
  129. package/content/skills/game-development/game-design/SKILL.md +129 -0
  130. package/content/skills/game-development/mobile-games/SKILL.md +108 -0
  131. package/content/skills/game-development/multiplayer/SKILL.md +132 -0
  132. package/content/skills/game-development/pc-games/SKILL.md +144 -0
  133. package/content/skills/game-development/vr-ar/SKILL.md +123 -0
  134. package/content/skills/game-development/web-games/SKILL.md +150 -0
  135. package/content/skills/geo-fundamentals/SKILL.md +156 -0
  136. package/content/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  137. package/content/skills/i18n-localization/SKILL.md +154 -0
  138. package/content/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  139. package/content/skills/intelligent-routing/SKILL.md +334 -0
  140. package/content/skills/lint-and-validate/SKILL.md +45 -0
  141. package/content/skills/lint-and-validate/scripts/lint_runner.py +172 -0
  142. package/content/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  143. package/content/skills/mcp-builder/SKILL.md +176 -0
  144. package/content/skills/mobile-design/SKILL.md +394 -0
  145. package/content/skills/mobile-design/decision-trees.md +516 -0
  146. package/content/skills/mobile-design/mobile-backend.md +491 -0
  147. package/content/skills/mobile-design/mobile-color-system.md +420 -0
  148. package/content/skills/mobile-design/mobile-debugging.md +122 -0
  149. package/content/skills/mobile-design/mobile-design-thinking.md +357 -0
  150. package/content/skills/mobile-design/mobile-navigation.md +458 -0
  151. package/content/skills/mobile-design/mobile-performance.md +767 -0
  152. package/content/skills/mobile-design/mobile-testing.md +356 -0
  153. package/content/skills/mobile-design/mobile-typography.md +433 -0
  154. package/content/skills/mobile-design/platform-android.md +666 -0
  155. package/content/skills/mobile-design/platform-ios.md +561 -0
  156. package/content/skills/mobile-design/scripts/mobile_audit.py +670 -0
  157. package/content/skills/mobile-design/touch-psychology.md +537 -0
  158. package/content/skills/nextjs-best-practices/SKILL.md +203 -0
  159. package/content/skills/nodejs-best-practices/SKILL.md +333 -0
  160. package/content/skills/parallel-agents/SKILL.md +175 -0
  161. package/content/skills/performance-profiling/SKILL.md +143 -0
  162. package/content/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  163. package/content/skills/plan-writing/SKILL.md +152 -0
  164. package/content/skills/powershell-windows/SKILL.md +167 -0
  165. package/content/skills/python-patterns/SKILL.md +441 -0
  166. package/content/skills/react-patterns/SKILL.md +198 -0
  167. package/content/skills/red-team-tactics/SKILL.md +199 -0
  168. package/content/skills/seo-fundamentals/SKILL.md +129 -0
  169. package/content/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  170. package/content/skills/server-management/SKILL.md +161 -0
  171. package/content/skills/systematic-debugging/SKILL.md +109 -0
  172. package/content/skills/tailwind-patterns/SKILL.md +269 -0
  173. package/content/skills/tdd-workflow/SKILL.md +149 -0
  174. package/content/skills/testing-patterns/SKILL.md +178 -0
  175. package/content/skills/testing-patterns/scripts/test_runner.py +219 -0
  176. package/content/skills/vulnerability-scanner/SKILL.md +276 -0
  177. package/content/skills/vulnerability-scanner/checklists.md +121 -0
  178. package/content/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  179. package/content/skills/webapp-testing/SKILL.md +187 -0
  180. package/content/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  181. package/content/specialists/Especialista em Acessibilidade.md +266 -0
  182. package/content/specialists/Especialista em An/303/241lise de Testes.md" +434 -0
  183. package/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +358 -0
  184. package/content/specialists/Especialista em Arquitetura de Software.md +177 -0
  185. package/content/specialists/Especialista em Banco de Dados.md +260 -0
  186. package/content/specialists/Especialista em Contrato de API.md +172 -0
  187. package/content/specialists/Especialista em Dados e Analytics com IA.md +246 -0
  188. package/content/specialists/Especialista em Debugging e Troubleshooting.md +191 -0
  189. package/content/specialists/Especialista em Desenvolvimento Frontend.md +477 -0
  190. package/content/specialists/Especialista em Desenvolvimento Mobile.md +241 -0
  191. package/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +417 -0
  192. package/content/specialists/Especialista em DevOps e Infraestrutura.md +294 -0
  193. package/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +227 -0
  194. package/content/specialists/Especialista em Engenharia de Requisitos com IA.md +299 -0
  195. package/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +179 -0
  196. package/content/specialists/Especialista em Gest/303/243o de Produto.md" +179 -0
  197. package/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +410 -0
  198. package/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +248 -0
  199. package/content/specialists/Especialista em Observabilidade.md +415 -0
  200. package/content/specialists/Especialista em Performance e Escalabilidade.md +373 -0
  201. package/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +341 -0
  202. package/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +419 -0
  203. package/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +508 -0
  204. package/content/specialists/Especialista em UX Design.md +453 -0
  205. package/content/specialists/INDEX.md +43 -0
  206. package/content/templates/PRD.md +165 -0
  207. package/content/templates/README.md +65 -0
  208. package/content/templates/adr.md +103 -0
  209. package/content/templates/arquitetura.md +279 -0
  210. package/content/templates/backlog.md +185 -0
  211. package/content/templates/checklist-seguranca.md +180 -0
  212. package/content/templates/contexto.md +120 -0
  213. package/content/templates/criterios-aceite.md +99 -0
  214. package/content/templates/design-banco.md +270 -0
  215. package/content/templates/design-doc.md +240 -0
  216. package/content/templates/feature.md +88 -0
  217. package/content/templates/historia-backend.md +84 -0
  218. package/content/templates/historia-frontend.md +75 -0
  219. package/content/templates/historia-usuario.md +125 -0
  220. package/content/templates/mapa-navegacao.md +133 -0
  221. package/content/templates/matriz-rastreabilidade.md +121 -0
  222. package/content/templates/modelo-dominio.md +219 -0
  223. package/content/templates/plano-testes.md +199 -0
  224. package/content/templates/prototipo-stitch.md +138 -0
  225. package/content/templates/requisitos.md +162 -0
  226. package/content/templates/slo-sli.md +197 -0
  227. package/content/workflows/README-MCP.md +363 -0
  228. package/content/workflows/brainstorm.md +113 -0
  229. package/content/workflows/create.md +59 -0
  230. package/content/workflows/debug.md +103 -0
  231. package/content/workflows/deploy.md +176 -0
  232. package/content/workflows/enhance.md +63 -0
  233. package/content/workflows/mcp-debug.md +506 -0
  234. package/content/workflows/mcp-feature.md +385 -0
  235. package/content/workflows/mcp-gate.md +413 -0
  236. package/content/workflows/mcp-next.md +388 -0
  237. package/content/workflows/mcp-refactor.md +600 -0
  238. package/content/workflows/mcp-start.md +304 -0
  239. package/content/workflows/mcp-status.md +400 -0
  240. package/content/workflows/orchestrate.md +237 -0
  241. package/content/workflows/plan.md +89 -0
  242. package/content/workflows/preview.md +81 -0
  243. package/content/workflows/status.md +86 -0
  244. package/content/workflows/test.md +144 -0
  245. package/content/workflows/ui-ux-pro-max.md +296 -0
  246. package/dist/commands/init.d.ts +6 -0
  247. package/dist/commands/init.js +138 -0
  248. package/dist/commands/update.d.ts +5 -0
  249. package/dist/commands/update.js +50 -0
  250. package/dist/index.d.ts +2 -0
  251. package/dist/index.js +21 -0
  252. package/package.json +48 -0
@@ -0,0 +1,303 @@
1
+ # Prompt: Design de API REST
2
+
3
+ > **Quando usar**: Fase de arquitetura, antes de implementar endpoints
4
+ > **Especialista**: [Arquitetura de Software](../../02-especialistas/Especialista%20em%20Arquitetura%20de%20Software.md)
5
+ > **Nível**: Médio
6
+
7
+ ---
8
+
9
+ ## Fluxo de Contexto
10
+
11
+ Antes de usar este prompt, tenha em mãos:
12
+ - `docs/CONTEXTO.md` - Entendimento do projeto
13
+ - `docs/02-requisitos/requisitos.md` - Requisitos funcionais
14
+ - `docs/04-modelo/modelo-dominio.md` - Entidades do sistema
15
+
16
+ Após gerar, salve o resultado em:
17
+ - `docs/06-api/api-design.md`
18
+ - `docs/06-api/openapi.yaml` (especificação)
19
+
20
+ ---
21
+
22
+ ## Prompt Completo
23
+
24
+ ```text
25
+ Atue como arquiteto de APIs especializado em REST e OpenAPI.
26
+
27
+ ## Contexto do Projeto
28
+
29
+ [COLE O CONTEÚDO DE docs/CONTEXTO.md]
30
+
31
+ ## Requisitos Funcionais
32
+
33
+ [COLE RFs DE docs/02-requisitos/requisitos.md]
34
+
35
+ ## Modelo de Domínio
36
+
37
+ [COLE ENTIDADES DE docs/04-modelo/modelo-dominio.md]
38
+
39
+ ## Configurações
40
+
41
+ Versionamento: [URL path: /v1 | Header: X-API-Version | Query: ?version=1]
42
+ Autenticação: [JWT Bearer | API Key | OAuth 2.0 | Session]
43
+ Formato: [JSON | JSON:API | HAL]
44
+ Base URL: [https://api.exemplo.com]
45
+
46
+ ---
47
+
48
+ ## Sua Missão
49
+
50
+ Projete uma API REST completa seguindo boas práticas:
51
+
52
+ ### 1. Recursos e Endpoints
53
+
54
+ Para cada recurso (baseado nas entidades):
55
+
56
+ **Recurso: /recursos**
57
+
58
+ | Método | Endpoint | Descrição | Auth |
59
+ |--------|----------|-----------|------|
60
+ | GET | /recursos | Listar (paginado) | Sim/Não |
61
+ | GET | /recursos/:id | Obter por ID | Sim/Não |
62
+ | POST | /recursos | Criar | Sim/Não |
63
+ | PUT | /recursos/:id | Atualizar completo | Sim/Não |
64
+ | PATCH | /recursos/:id | Atualizar parcial | Sim/Não |
65
+ | DELETE | /recursos/:id | Remover | Sim/Não |
66
+
67
+ ### 2. Padrões de Nomenclatura
68
+
69
+ - Recursos no plural: /users, /orders
70
+ - Kebab-case para multi-palavras: /order-items
71
+ - IDs como path parameter: /users/:id
72
+ - Relacionamentos: /users/:id/orders
73
+ - Ações especiais: POST /orders/:id/cancel
74
+
75
+ ### 3. Query Parameters
76
+
77
+ Padronize:
78
+ - **Paginação**: page, limit (ou cursor)
79
+ - **Ordenação**: sort=field:asc,field2:desc
80
+ - **Filtros**: filter[field]=value
81
+ - **Campos**: fields=id,name,email
82
+ - **Expands**: include=orders,profile
83
+
84
+ ### 4. Request/Response Schemas
85
+
86
+ Para cada endpoint principal, defina:
87
+
88
+ **Request Body (POST/PUT)**
89
+ ```json
90
+ {
91
+ "campo1": "tipo",
92
+ "campo2": "tipo"
93
+ }
94
+ ```
95
+
96
+ **Response Body (Sucesso)**
97
+ ```json
98
+ {
99
+ "data": { ... },
100
+ "meta": { ... }
101
+ }
102
+ ```
103
+
104
+ **Response Body (Lista)**
105
+ ```json
106
+ {
107
+ "data": [ ... ],
108
+ "meta": {
109
+ "page": 1,
110
+ "limit": 20,
111
+ "total": 100,
112
+ "totalPages": 5
113
+ }
114
+ }
115
+ ```
116
+
117
+ ### 5. HTTP Status Codes
118
+
119
+ | Código | Quando Usar |
120
+ |--------|-------------|
121
+ | 200 | Sucesso (GET, PUT, PATCH) |
122
+ | 201 | Criado (POST) |
123
+ | 204 | Sem conteúdo (DELETE) |
124
+ | 400 | Request inválido |
125
+ | 401 | Não autenticado |
126
+ | 403 | Não autorizado |
127
+ | 404 | Não encontrado |
128
+ | 409 | Conflito (duplicação) |
129
+ | 422 | Erro de validação |
130
+ | 429 | Rate limit exceeded |
131
+ | 500 | Erro interno |
132
+
133
+ ### 6. Formato de Erros
134
+
135
+ ```json
136
+ {
137
+ "error": {
138
+ "code": "VALIDATION_ERROR",
139
+ "message": "Mensagem amigável",
140
+ "details": [
141
+ {
142
+ "field": "email",
143
+ "message": "Email inválido"
144
+ }
145
+ ],
146
+ "traceId": "abc-123"
147
+ }
148
+ }
149
+ ```
150
+
151
+ ### 7. Headers
152
+
153
+ **Request Headers**
154
+ - Authorization: Bearer {token}
155
+ - Content-Type: application/json
156
+ - Accept: application/json
157
+ - X-Request-ID: {uuid}
158
+
159
+ **Response Headers**
160
+ - X-Request-ID: {uuid}
161
+ - X-RateLimit-Limit: 100
162
+ - X-RateLimit-Remaining: 95
163
+ - X-RateLimit-Reset: timestamp
164
+
165
+ ### 8. Versionamento
166
+
167
+ Estratégia escolhida e como deprecar versões antigas.
168
+
169
+ ### 9. Segurança
170
+
171
+ - Rate limiting por endpoint
172
+ - Validação de input
173
+ - CORS configuration
174
+
175
+ ### 10. OpenAPI Specification
176
+
177
+ Gere a especificação OpenAPI 3.0 em YAML para os endpoints principais.
178
+ ```
179
+
180
+ ---
181
+
182
+ ## Exemplo de Uso
183
+
184
+ ```text
185
+ Atue como arquiteto de APIs especializado em REST e OpenAPI.
186
+
187
+ ## Contexto do Projeto
188
+
189
+ Sistema de agendamento para salões de beleza.
190
+
191
+ ## Requisitos Funcionais
192
+
193
+ - RF-001: Listar horários disponíveis
194
+ - RF-002: Criar agendamento
195
+ - RF-003: Cancelar agendamento
196
+ - RF-004: Listar agendamentos do dia
197
+
198
+ ## Modelo de Domínio
199
+
200
+ - Cliente (id, nome, telefone, email)
201
+ - Servico (id, nome, duracao, preco)
202
+ - Profissional (id, nome, especialidades)
203
+ - Agendamento (id, clienteId, servicoId, profissionalId, dataHora, status)
204
+
205
+ ## Configurações
206
+
207
+ Versionamento: URL path /v1
208
+ Autenticação: JWT Bearer (admin) / Público (cliente agendando)
209
+ Formato: JSON
210
+ Base URL: https://api.salao.com
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Resposta Esperada
216
+
217
+ ### Recursos
218
+
219
+ **Recurso: /agendamentos**
220
+
221
+ | Método | Endpoint | Descrição | Auth |
222
+ |--------|----------|-----------|------|
223
+ | GET | /v1/agendamentos | Listar (admin) | JWT |
224
+ | GET | /v1/agendamentos/:id | Obter | JWT |
225
+ | POST | /v1/agendamentos | Criar | Público |
226
+ | DELETE | /v1/agendamentos/:id | Cancelar | JWT ou Token |
227
+
228
+ **Recurso: /disponibilidade**
229
+
230
+ | Método | Endpoint | Descrição | Auth |
231
+ |--------|----------|-----------|------|
232
+ | GET | /v1/profissionais/:id/disponibilidade | Horários livres | Público |
233
+
234
+ ### Request/Response
235
+
236
+ **POST /v1/agendamentos**
237
+
238
+ Request:
239
+ ```json
240
+ {
241
+ "profissionalId": "uuid",
242
+ "servicoId": "uuid",
243
+ "dataHora": "2024-01-15T14:00:00Z",
244
+ "cliente": {
245
+ "nome": "Maria Silva",
246
+ "telefone": "11999998888"
247
+ }
248
+ }
249
+ ```
250
+
251
+ Response (201):
252
+ ```json
253
+ {
254
+ "data": {
255
+ "id": "uuid",
256
+ "status": "CONFIRMADO",
257
+ "dataHora": "2024-01-15T14:00:00Z",
258
+ "profissional": { "id": "uuid", "nome": "Ana" },
259
+ "servico": { "id": "uuid", "nome": "Corte", "duracao": 30 }
260
+ }
261
+ }
262
+ ```
263
+
264
+ ### OpenAPI (Resumo)
265
+
266
+ ```yaml
267
+ openapi: 3.0.3
268
+ info:
269
+ title: API Salão de Beleza
270
+ version: 1.0.0
271
+
272
+ paths:
273
+ /v1/agendamentos:
274
+ post:
275
+ summary: Criar agendamento
276
+ requestBody:
277
+ content:
278
+ application/json:
279
+ schema:
280
+ $ref: '#/components/schemas/CriarAgendamento'
281
+ responses:
282
+ '201':
283
+ description: Agendamento criado
284
+ content:
285
+ application/json:
286
+ schema:
287
+ $ref: '#/components/schemas/AgendamentoResponse'
288
+ ```
289
+
290
+ ---
291
+
292
+ ## Checklist Pós-Geração
293
+
294
+ - [ ] Todos os recursos mapeados das entidades
295
+ - [ ] Verbos HTTP corretos para cada ação
296
+ - [ ] Paginação padronizada
297
+ - [ ] Formato de erro consistente
298
+ - [ ] Status codes documentados
299
+ - [ ] Headers de request/response definidos
300
+ - [ ] Rate limiting especificado
301
+ - [ ] Versionamento definido
302
+ - [ ] OpenAPI spec gerada
303
+ - [ ] Salvar em `docs/06-api/api-design.md`
@@ -0,0 +1,254 @@
1
+ # Prompt: Idempotência em APIs
2
+
3
+ > **Prioridade**: 🔴 CRÍTICA
4
+ > **Aplicável a**: Projetos Nível 2 (Médio) e Nível 3 (Complexo)
5
+
6
+ ---
7
+
8
+ ## Por que é Crítico?
9
+
10
+ Sem idempotência, operações podem ser duplicadas em caso de:
11
+ - Retry automático de clientes
12
+ - Timeout de rede seguido de retry manual
13
+ - Falha de conexão após processamento
14
+
15
+ **Consequências em produção:**
16
+ - Cobranças duplicadas em pagamentos
17
+ - Pedidos duplicados em e-commerce
18
+ - Criação de recursos duplicados
19
+ - Inconsistência de dados
20
+
21
+ ---
22
+
23
+ ## Conceito
24
+
25
+ > **Idempotência**: Uma operação que pode ser executada múltiplas vezes produzindo o mesmo resultado.
26
+
27
+ | Método HTTP | Naturalmente Idempotente? |
28
+ |-------------|---------------------------|
29
+ | GET | ✅ Sim |
30
+ | PUT | ✅ Sim (substitui recurso) |
31
+ | DELETE | ✅ Sim (recurso já deletado = ok) |
32
+ | POST | ❌ **Não** - Requer implementação |
33
+ | PATCH | ⚠️ Depende da implementação |
34
+
35
+ ---
36
+
37
+ ## Prompt Base
38
+
39
+ ```text
40
+ Atue como arquiteto de APIs com foco em resiliência.
41
+
42
+ Preciso implementar idempotência no seguinte endpoint:
43
+ - Método: [POST/PATCH]
44
+ - Rota: [ex: /api/v1/payments]
45
+ - Operação: [ex: criar pagamento, processar pedido]
46
+
47
+ Stack: [ex: Node.js + Express + Redis / Java + Spring + PostgreSQL]
48
+
49
+ Gere uma implementação completa com:
50
+
51
+ 1. **Estratégia de Idempotency Key**
52
+ - Via header `Idempotency-Key`
53
+ - Formato: UUID v4
54
+ - Validação de formato
55
+
56
+ 2. **Armazenamento de Estado**
57
+ - Schema para Redis ou tabela em banco
58
+ - Estados: PROCESSING, COMPLETED, FAILED
59
+ - TTL apropriado (mínimo 24h)
60
+
61
+ 3. **Fluxo de Processamento**
62
+ - Verificar se key já existe
63
+ - Se PROCESSING: retornar 409 Conflict
64
+ - Se COMPLETED: retornar resposta cacheada
65
+ - Se nova: processar e armazenar resultado
66
+
67
+ 4. **Middleware/Interceptor**
68
+ - Código reutilizável para decorar endpoints
69
+
70
+ 5. **Testes**
71
+ - Request normal (200)
72
+ - Request duplicada (resposta cached)
73
+ - Request durante processamento (409)
74
+ - Request com key inválida (400)
75
+
76
+ Inclua:
77
+ - Código completo e comentado
78
+ - Schema de armazenamento
79
+ - Exemplos de uso
80
+ ```
81
+
82
+ ---
83
+
84
+ ## Padrões Obrigatórios
85
+
86
+ ### Header Padrão
87
+
88
+ ```http
89
+ POST /api/v1/orders HTTP/1.1
90
+ Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
91
+ Content-Type: application/json
92
+
93
+ {
94
+ "product_id": "123",
95
+ "quantity": 1
96
+ }
97
+ ```
98
+
99
+ ### Respostas
100
+
101
+ | Cenário | Status Code | Body |
102
+ |---------|-------------|------|
103
+ | Primeira execução com sucesso | 200/201 | Recurso criado |
104
+ | Key já processada com sucesso | 200/201 | Resposta cacheada (idêntica) |
105
+ | Key em processamento | 409 Conflict | `{"error": "Request already in progress"}` |
106
+ | Key inválida/ausente | 400 Bad Request | `{"error": "Invalid Idempotency-Key"}` |
107
+ | Primeira execução com erro | 4xx/5xx | Erro original (cachear também) |
108
+
109
+ ### Schema Redis
110
+
111
+ ```plaintext
112
+ Key: idempotency:{idempotency_key}
113
+ TTL: 86400 (24 horas)
114
+ Value: {
115
+ "status": "PROCESSING" | "COMPLETED" | "FAILED",
116
+ "response_code": 201,
117
+ "response_body": {...},
118
+ "created_at": "2024-01-01T00:00:00Z"
119
+ }
120
+ ```
121
+
122
+ ### Schema SQL (Alternativa)
123
+
124
+ ```sql
125
+ CREATE TABLE idempotency_keys (
126
+ key VARCHAR(36) PRIMARY KEY,
127
+ status VARCHAR(20) NOT NULL DEFAULT 'PROCESSING',
128
+ response_code INT,
129
+ response_body JSONB,
130
+ created_at TIMESTAMP DEFAULT NOW(),
131
+ updated_at TIMESTAMP DEFAULT NOW()
132
+ );
133
+
134
+ CREATE INDEX idx_idempotency_created ON idempotency_keys(created_at);
135
+
136
+ -- Job para limpar keys antigas (> 24h)
137
+ DELETE FROM idempotency_keys WHERE created_at < NOW() - INTERVAL '24 hours';
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Exemplo de Implementação (Node.js + Express + Redis)
143
+
144
+ ```typescript
145
+ import { Redis } from 'ioredis';
146
+ import { Request, Response, NextFunction } from 'express';
147
+
148
+ const redis = new Redis();
149
+ const TTL_SECONDS = 86400; // 24 horas
150
+
151
+ interface IdempotencyRecord {
152
+ status: 'PROCESSING' | 'COMPLETED' | 'FAILED';
153
+ responseCode?: number;
154
+ responseBody?: any;
155
+ createdAt: string;
156
+ }
157
+
158
+ export function idempotent() {
159
+ return async (req: Request, res: Response, next: NextFunction) => {
160
+ const idempotencyKey = req.headers['idempotency-key'] as string;
161
+
162
+ // Validar presença e formato
163
+ if (!idempotencyKey) {
164
+ return res.status(400).json({ error: 'Idempotency-Key header required' });
165
+ }
166
+
167
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
168
+ if (!uuidRegex.test(idempotencyKey)) {
169
+ return res.status(400).json({ error: 'Invalid Idempotency-Key format' });
170
+ }
171
+
172
+ const redisKey = `idempotency:${idempotencyKey}`;
173
+
174
+ // Verificar se já existe
175
+ const existing = await redis.get(redisKey);
176
+
177
+ if (existing) {
178
+ const record: IdempotencyRecord = JSON.parse(existing);
179
+
180
+ if (record.status === 'PROCESSING') {
181
+ return res.status(409).json({
182
+ error: 'Request already in progress',
183
+ idempotency_key: idempotencyKey
184
+ });
185
+ }
186
+
187
+ // Retornar resposta cacheada
188
+ return res.status(record.responseCode!).json(record.responseBody);
189
+ }
190
+
191
+ // Marcar como em processamento
192
+ const processingRecord: IdempotencyRecord = {
193
+ status: 'PROCESSING',
194
+ createdAt: new Date().toISOString()
195
+ };
196
+
197
+ await redis.setex(redisKey, TTL_SECONDS, JSON.stringify(processingRecord));
198
+
199
+ // Interceptar a resposta para cachear
200
+ const originalJson = res.json.bind(res);
201
+ res.json = (body: any) => {
202
+ const completedRecord: IdempotencyRecord = {
203
+ status: res.statusCode >= 400 ? 'FAILED' : 'COMPLETED',
204
+ responseCode: res.statusCode,
205
+ responseBody: body,
206
+ createdAt: processingRecord.createdAt
207
+ };
208
+
209
+ redis.setex(redisKey, TTL_SECONDS, JSON.stringify(completedRecord));
210
+
211
+ return originalJson(body);
212
+ };
213
+
214
+ next();
215
+ };
216
+ }
217
+
218
+ // Uso no router
219
+ app.post('/api/v1/orders', idempotent(), createOrderHandler);
220
+ ```
221
+
222
+ ---
223
+
224
+ ## Prompt para Revisar Idempotência Existente
225
+
226
+ ```text
227
+ Tenho este endpoint que realiza operações que não podem ser duplicadas:
228
+ [COLE O CÓDIGO DO ENDPOINT]
229
+
230
+ Analise:
231
+ 1. O endpoint é idempotente? Se não, por quê?
232
+ 2. Quais operações podem causar problemas se duplicadas?
233
+ 3. Sugira como adicionar idempotência mantendo compatibilidade.
234
+ ```
235
+
236
+ ---
237
+
238
+ ## Checklist de Implementação
239
+
240
+ - [ ] Header `Idempotency-Key` definido
241
+ - [ ] Validação de formato (UUID v4)
242
+ - [ ] Armazenamento de estado configurado (Redis/DB)
243
+ - [ ] TTL mínimo de 24 horas
244
+ - [ ] Tratamento de requisição em andamento (409)
245
+ - [ ] Cache de resposta para requests duplicadas
246
+ - [ ] Testes automatizados cobrindo todos os cenários
247
+ - [ ] Documentação na OpenAPI/Swagger
248
+
249
+ ---
250
+
251
+ ## Referências
252
+
253
+ - [Stripe - Idempotent Requests](https://stripe.com/docs/api/idempotent_requests)
254
+ - [Idempotency Patterns](https://blog.bitsrc.io/design-patterns-for-microservices-idempotency/)