@ruaruababa/vibe-kit 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 (462) hide show
  1. package/CATALOG.md +317 -0
  2. package/README.md +121 -0
  3. package/aliases.json +65 -0
  4. package/bin/vibe.js +2 -0
  5. package/bundles.json +265 -0
  6. package/catalog.json +1560 -0
  7. package/dist/antigravity-skills/bin/cli.js +438 -0
  8. package/dist/antigravity-skills/lib/skill-utils.js +158 -0
  9. package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
  10. package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
  11. package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
  12. package/dist/bin/vibe.js +2 -0
  13. package/dist/dist/src/cli/index.js +26 -0
  14. package/dist/lib/skill-utils.js +158 -0
  15. package/dist/scripts/build-catalog.js +50 -0
  16. package/dist/scripts/normalize-frontmatter.js +144 -0
  17. package/dist/scripts/validate-skills.js +56 -0
  18. package/dist/src/cli/index.js +146 -0
  19. package/dist/src/types/index.js +13 -0
  20. package/dist/src/utils/fs.js +1 -0
  21. package/package.json +43 -0
  22. package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
  23. package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
  24. package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
  25. package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
  26. package/skills/agent-orchestrator/SKILL.md +24 -0
  27. package/skills/ai-engineer/SKILL.md +171 -0
  28. package/skills/airflow-dag-patterns/SKILL.md +41 -0
  29. package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
  30. package/skills/angular-migration/SKILL.md +428 -0
  31. package/skills/anti-reversing-techniques/SKILL.md +42 -0
  32. package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
  33. package/skills/api-design-principles/SKILL.md +37 -0
  34. package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  35. package/skills/api-design-principles/assets/rest-api-template.py +182 -0
  36. package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  37. package/skills/api-design-principles/references/rest-best-practices.md +408 -0
  38. package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  39. package/skills/api-documenter/SKILL.md +184 -0
  40. package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
  41. package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
  42. package/skills/application-performance-performance-optimization/SKILL.md +154 -0
  43. package/skills/architect-review/SKILL.md +174 -0
  44. package/skills/architecture-decision-records/SKILL.md +441 -0
  45. package/skills/architecture-patterns/SKILL.md +37 -0
  46. package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
  47. package/skills/arm-cortex-expert/SKILL.md +306 -0
  48. package/skills/async-python-patterns/SKILL.md +39 -0
  49. package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
  50. package/skills/attack-tree-construction/SKILL.md +38 -0
  51. package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
  52. package/skills/auth-implementation-patterns/SKILL.md +39 -0
  53. package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
  54. package/skills/backend-architect/SKILL.md +333 -0
  55. package/skills/backend-development-feature-development/SKILL.md +180 -0
  56. package/skills/backend-security-coder/SKILL.md +156 -0
  57. package/skills/backtesting-frameworks/SKILL.md +39 -0
  58. package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
  59. package/skills/bash-defensive-patterns/SKILL.md +43 -0
  60. package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
  61. package/skills/bash-pro/SKILL.md +310 -0
  62. package/skills/bats-testing-patterns/SKILL.md +34 -0
  63. package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
  64. package/skills/bazel-build-optimization/SKILL.md +397 -0
  65. package/skills/billing-automation/SKILL.md +42 -0
  66. package/skills/billing-automation/resources/implementation-playbook.md +544 -0
  67. package/skills/binary-analysis-patterns/SKILL.md +450 -0
  68. package/skills/blockchain-developer/SKILL.md +208 -0
  69. package/skills/business-analyst/SKILL.md +182 -0
  70. package/skills/c-pro/SKILL.md +56 -0
  71. package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
  72. package/skills/c4-code/SKILL.md +244 -0
  73. package/skills/c4-component/SKILL.md +153 -0
  74. package/skills/c4-container/SKILL.md +171 -0
  75. package/skills/c4-context/SKILL.md +150 -0
  76. package/skills/changelog-automation/SKILL.md +38 -0
  77. package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
  78. package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
  79. package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
  80. package/skills/clean-markdown/SKILL.md +23 -0
  81. package/skills/cloud-architect/SKILL.md +135 -0
  82. package/skills/code-documentation-code-explain/SKILL.md +46 -0
  83. package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
  84. package/skills/code-documentation-doc-generate/SKILL.md +48 -0
  85. package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
  86. package/skills/code-refactoring-context-restore/SKILL.md +179 -0
  87. package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
  88. package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
  89. package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
  90. package/skills/code-review-ai-ai-review/SKILL.md +450 -0
  91. package/skills/code-review-excellence/SKILL.md +40 -0
  92. package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
  93. package/skills/code-reviewer/SKILL.md +178 -0
  94. package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
  95. package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
  96. package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
  97. package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
  98. package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
  99. package/skills/competitive-landscape/SKILL.md +34 -0
  100. package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
  101. package/skills/comprehensive-review-full-review/SKILL.md +146 -0
  102. package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
  103. package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
  104. package/skills/conductor-implement/SKILL.md +388 -0
  105. package/skills/conductor-manage/SKILL.md +39 -0
  106. package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
  107. package/skills/conductor-new-track/SKILL.md +433 -0
  108. package/skills/conductor-revert/SKILL.md +372 -0
  109. package/skills/conductor-setup/SKILL.md +426 -0
  110. package/skills/conductor-status/SKILL.md +338 -0
  111. package/skills/conductor-validator/SKILL.md +62 -0
  112. package/skills/content-marketer/SKILL.md +170 -0
  113. package/skills/context-driven-development/SKILL.md +400 -0
  114. package/skills/context-management-context-restore/SKILL.md +179 -0
  115. package/skills/context-management-context-save/SKILL.md +177 -0
  116. package/skills/context-manager/SKILL.md +185 -0
  117. package/skills/cost-optimization/SKILL.md +286 -0
  118. package/skills/cpp-pro/SKILL.md +59 -0
  119. package/skills/cqrs-implementation/SKILL.md +35 -0
  120. package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
  121. package/skills/csharp-pro/SKILL.md +59 -0
  122. package/skills/customer-support/SKILL.md +170 -0
  123. package/skills/data-engineer/SKILL.md +224 -0
  124. package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
  125. package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
  126. package/skills/data-quality-frameworks/SKILL.md +40 -0
  127. package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
  128. package/skills/data-scientist/SKILL.md +199 -0
  129. package/skills/data-storytelling/SKILL.md +465 -0
  130. package/skills/database-admin/SKILL.md +165 -0
  131. package/skills/database-architect/SKILL.md +268 -0
  132. package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
  133. package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
  134. package/skills/database-migration/SKILL.md +436 -0
  135. package/skills/database-migrations-migration-observability/SKILL.md +420 -0
  136. package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
  137. package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
  138. package/skills/database-optimizer/SKILL.md +167 -0
  139. package/skills/dbt-transformation-patterns/SKILL.md +34 -0
  140. package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
  141. package/skills/debugger/SKILL.md +49 -0
  142. package/skills/debugging-strategies/SKILL.md +34 -0
  143. package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
  144. package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
  145. package/skills/defi-protocol-templates/SKILL.md +466 -0
  146. package/skills/dependency-management-deps-audit/SKILL.md +44 -0
  147. package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
  148. package/skills/dependency-upgrade/SKILL.md +421 -0
  149. package/skills/deployment-engineer/SKILL.md +170 -0
  150. package/skills/deployment-pipeline-design/SKILL.md +371 -0
  151. package/skills/deployment-validation-config-validate/SKILL.md +496 -0
  152. package/skills/devops-troubleshooter/SKILL.md +161 -0
  153. package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
  154. package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
  155. package/skills/distributed-tracing/SKILL.md +450 -0
  156. package/skills/django-pro/SKILL.md +180 -0
  157. package/skills/docs-architect/SKILL.md +98 -0
  158. package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
  159. package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
  160. package/skills/dotnet-architect/SKILL.md +197 -0
  161. package/skills/dotnet-backend-patterns/SKILL.md +37 -0
  162. package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
  163. package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
  164. package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
  165. package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
  166. package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
  167. package/skills/dummy-skill/SKILL.md +5 -0
  168. package/skills/dx-optimizer/SKILL.md +83 -0
  169. package/skills/e2e-testing-patterns/SKILL.md +41 -0
  170. package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
  171. package/skills/elixir-pro/SKILL.md +59 -0
  172. package/skills/embedding-strategies/SKILL.md +491 -0
  173. package/skills/employment-contract-templates/SKILL.md +39 -0
  174. package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
  175. package/skills/error-debugging-error-analysis/SKILL.md +47 -0
  176. package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
  177. package/skills/error-debugging-error-trace/SKILL.md +43 -0
  178. package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
  179. package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
  180. package/skills/error-detective/SKILL.md +53 -0
  181. package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
  182. package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
  183. package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
  184. package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
  185. package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
  186. package/skills/error-handling-patterns/SKILL.md +35 -0
  187. package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
  188. package/skills/event-sourcing-architect/SKILL.md +58 -0
  189. package/skills/event-store-design/SKILL.md +449 -0
  190. package/skills/fastapi-pro/SKILL.md +192 -0
  191. package/skills/fastapi-templates/SKILL.md +32 -0
  192. package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
  193. package/skills/final-test/SKILL.md +5 -0
  194. package/skills/firmware-analyst/SKILL.md +320 -0
  195. package/skills/flutter-expert/SKILL.md +200 -0
  196. package/skills/framework-migration-code-migrate/SKILL.md +48 -0
  197. package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
  198. package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
  199. package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
  200. package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
  201. package/skills/frontend-developer/SKILL.md +171 -0
  202. package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
  203. package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
  204. package/skills/frontend-security-coder/SKILL.md +170 -0
  205. package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
  206. package/skills/gdpr-data-handling/SKILL.md +33 -0
  207. package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
  208. package/skills/git-advanced-workflows/SKILL.md +412 -0
  209. package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
  210. package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
  211. package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
  212. package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
  213. package/skills/github-actions-templates/SKILL.md +345 -0
  214. package/skills/gitlab-ci-patterns/SKILL.md +283 -0
  215. package/skills/gitops-workflow/SKILL.md +303 -0
  216. package/skills/gitops-workflow/references/argocd-setup.md +134 -0
  217. package/skills/gitops-workflow/references/sync-policies.md +131 -0
  218. package/skills/go-concurrency-patterns/SKILL.md +33 -0
  219. package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
  220. package/skills/godot-gdscript-patterns/SKILL.md +33 -0
  221. package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
  222. package/skills/golang-pro/SKILL.md +179 -0
  223. package/skills/grafana-dashboards/SKILL.md +381 -0
  224. package/skills/graphql-architect/SKILL.md +182 -0
  225. package/skills/haskell-pro/SKILL.md +56 -0
  226. package/skills/helm-chart-scaffolding/SKILL.md +34 -0
  227. package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  228. package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  229. package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  230. package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
  231. package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  232. package/skills/hr-pro/SKILL.md +126 -0
  233. package/skills/hybrid-cloud-architect/SKILL.md +168 -0
  234. package/skills/hybrid-cloud-networking/SKILL.md +238 -0
  235. package/skills/hybrid-search-implementation/SKILL.md +32 -0
  236. package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
  237. package/skills/incident-responder/SKILL.md +213 -0
  238. package/skills/incident-response-incident-response/SKILL.md +168 -0
  239. package/skills/incident-response-smart-fix/SKILL.md +29 -0
  240. package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
  241. package/skills/incident-runbook-templates/SKILL.md +395 -0
  242. package/skills/ios-developer/SKILL.md +219 -0
  243. package/skills/istio-traffic-management/SKILL.md +337 -0
  244. package/skills/java-pro/SKILL.md +177 -0
  245. package/skills/javascript-pro/SKILL.md +57 -0
  246. package/skills/javascript-testing-patterns/SKILL.md +35 -0
  247. package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
  248. package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
  249. package/skills/julia-pro/SKILL.md +209 -0
  250. package/skills/k8s-manifest-generator/SKILL.md +35 -0
  251. package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  252. package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  253. package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  254. package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  255. package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  256. package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
  257. package/skills/k8s-security-policies/SKILL.md +346 -0
  258. package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  259. package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  260. package/skills/kpi-dashboard-design/SKILL.md +440 -0
  261. package/skills/kubernetes-architect/SKILL.md +170 -0
  262. package/skills/langchain-architecture/SKILL.md +350 -0
  263. package/skills/legacy-modernizer/SKILL.md +53 -0
  264. package/skills/legal-advisor/SKILL.md +70 -0
  265. package/skills/linkerd-patterns/SKILL.md +321 -0
  266. package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
  267. package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
  268. package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
  269. package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
  270. package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
  271. package/skills/llm-evaluation/SKILL.md +483 -0
  272. package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
  273. package/skills/malware-analyst/SKILL.md +247 -0
  274. package/skills/market-sizing-analysis/SKILL.md +425 -0
  275. package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
  276. package/skills/market-sizing-analysis/references/data-sources.md +360 -0
  277. package/skills/memory-forensics/SKILL.md +491 -0
  278. package/skills/memory-safety-patterns/SKILL.md +33 -0
  279. package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
  280. package/skills/mermaid-expert/SKILL.md +59 -0
  281. package/skills/microservices-patterns/SKILL.md +35 -0
  282. package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
  283. package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
  284. package/skills/ml-engineer/SKILL.md +168 -0
  285. package/skills/ml-pipeline-workflow/SKILL.md +257 -0
  286. package/skills/mlops-engineer/SKILL.md +219 -0
  287. package/skills/mobile-developer/SKILL.md +205 -0
  288. package/skills/mobile-security-coder/SKILL.md +184 -0
  289. package/skills/modern-javascript-patterns/SKILL.md +35 -0
  290. package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
  291. package/skills/monorepo-architect/SKILL.md +61 -0
  292. package/skills/monorepo-management/SKILL.md +35 -0
  293. package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
  294. package/skills/mtls-configuration/SKILL.md +359 -0
  295. package/skills/multi-cloud-architecture/SKILL.md +189 -0
  296. package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
  297. package/skills/network-engineer/SKILL.md +169 -0
  298. package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
  299. package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
  300. package/skills/nft-standards/SKILL.md +395 -0
  301. package/skills/node-expert/SKILL.md +23 -0
  302. package/skills/nodejs-backend-patterns/SKILL.md +35 -0
  303. package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
  304. package/skills/nx-workspace-patterns/SKILL.md +464 -0
  305. package/skills/observability-engineer/SKILL.md +237 -0
  306. package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
  307. package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
  308. package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
  309. package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
  310. package/skills/on-call-handoff-patterns/SKILL.md +453 -0
  311. package/skills/openapi-spec-generation/SKILL.md +33 -0
  312. package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
  313. package/skills/payment-integration/SKILL.md +77 -0
  314. package/skills/paypal-integration/SKILL.md +479 -0
  315. package/skills/pci-compliance/SKILL.md +478 -0
  316. package/skills/performance-engineer/SKILL.md +180 -0
  317. package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
  318. package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
  319. package/skills/php-pro/SKILL.md +63 -0
  320. package/skills/posix-shell-pro/SKILL.md +304 -0
  321. package/skills/postgresql/SKILL.md +230 -0
  322. package/skills/postmortem-writing/SKILL.md +386 -0
  323. package/skills/projection-patterns/SKILL.md +33 -0
  324. package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
  325. package/skills/prometheus-configuration/SKILL.md +404 -0
  326. package/skills/prompt-engineer/SKILL.md +272 -0
  327. package/skills/prompt-engineering-patterns/SKILL.md +213 -0
  328. package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  329. package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  330. package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  331. package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  332. package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  333. package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  334. package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
  335. package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  336. package/skills/protocol-reverse-engineering/SKILL.md +29 -0
  337. package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
  338. package/skills/python-development-python-scaffold/SKILL.md +331 -0
  339. package/skills/python-packaging/SKILL.md +36 -0
  340. package/skills/python-packaging/resources/implementation-playbook.md +869 -0
  341. package/skills/python-performance-optimization/SKILL.md +36 -0
  342. package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
  343. package/skills/python-pro/SKILL.md +158 -0
  344. package/skills/python-testing-patterns/SKILL.md +37 -0
  345. package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
  346. package/skills/quant-analyst/SKILL.md +53 -0
  347. package/skills/rag-implementation/SKILL.md +421 -0
  348. package/skills/react-modernization/SKILL.md +34 -0
  349. package/skills/react-modernization/resources/implementation-playbook.md +512 -0
  350. package/skills/react-native-architecture/SKILL.md +33 -0
  351. package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
  352. package/skills/react-state-management/SKILL.md +441 -0
  353. package/skills/reference-builder/SKILL.md +188 -0
  354. package/skills/reverse-engineer/SKILL.md +173 -0
  355. package/skills/risk-manager/SKILL.md +61 -0
  356. package/skills/risk-metrics-calculation/SKILL.md +33 -0
  357. package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
  358. package/skills/ruby-pro/SKILL.md +56 -0
  359. package/skills/rust-async-patterns/SKILL.md +33 -0
  360. package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
  361. package/skills/rust-pro/SKILL.md +178 -0
  362. package/skills/saga-orchestration/SKILL.md +496 -0
  363. package/skills/sales-automator/SKILL.md +55 -0
  364. package/skills/sast-configuration/SKILL.md +212 -0
  365. package/skills/scala-pro/SKILL.md +82 -0
  366. package/skills/screen-reader-testing/SKILL.md +33 -0
  367. package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
  368. package/skills/search-specialist/SKILL.md +80 -0
  369. package/skills/secrets-management/SKILL.md +364 -0
  370. package/skills/security-auditor/SKILL.md +169 -0
  371. package/skills/security-compliance-compliance-check/SKILL.md +55 -0
  372. package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
  373. package/skills/security-requirement-extraction/SKILL.md +33 -0
  374. package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
  375. package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
  376. package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
  377. package/skills/security-scanning-security-hardening/SKILL.md +147 -0
  378. package/skills/security-scanning-security-sast/SKILL.md +495 -0
  379. package/skills/seo-authority-builder/SKILL.md +136 -0
  380. package/skills/seo-cannibalization-detector/SKILL.md +123 -0
  381. package/skills/seo-content-auditor/SKILL.md +83 -0
  382. package/skills/seo-content-planner/SKILL.md +108 -0
  383. package/skills/seo-content-refresher/SKILL.md +118 -0
  384. package/skills/seo-content-writer/SKILL.md +96 -0
  385. package/skills/seo-keyword-strategist/SKILL.md +95 -0
  386. package/skills/seo-meta-optimizer/SKILL.md +92 -0
  387. package/skills/seo-snippet-hunter/SKILL.md +114 -0
  388. package/skills/seo-structure-architect/SKILL.md +108 -0
  389. package/skills/service-mesh-expert/SKILL.md +58 -0
  390. package/skills/service-mesh-observability/SKILL.md +395 -0
  391. package/skills/shellcheck-configuration/SKILL.md +466 -0
  392. package/skills/similarity-search-patterns/SKILL.md +33 -0
  393. package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
  394. package/skills/slo-implementation/SKILL.md +341 -0
  395. package/skills/solidity-security/SKILL.md +34 -0
  396. package/skills/solidity-security/resources/implementation-playbook.md +524 -0
  397. package/skills/spark-optimization/SKILL.md +427 -0
  398. package/skills/sql-optimization-patterns/SKILL.md +35 -0
  399. package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
  400. package/skills/sql-pro/SKILL.md +173 -0
  401. package/skills/startup-analyst/SKILL.md +328 -0
  402. package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
  403. package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
  404. package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
  405. package/skills/startup-financial-modeling/SKILL.md +467 -0
  406. package/skills/startup-metrics-framework/SKILL.md +34 -0
  407. package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
  408. package/skills/stride-analysis-patterns/SKILL.md +33 -0
  409. package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
  410. package/skills/stripe-integration/SKILL.md +454 -0
  411. package/skills/systems-programming-rust-project/SKILL.md +440 -0
  412. package/skills/tailwind-design-system/SKILL.md +33 -0
  413. package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
  414. package/skills/tdd-orchestrator/SKILL.md +205 -0
  415. package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
  416. package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
  417. package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
  418. package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
  419. package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
  420. package/skills/team-collaboration-issue/SKILL.md +37 -0
  421. package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
  422. package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
  423. package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
  424. package/skills/team-composition-analysis/SKILL.md +413 -0
  425. package/skills/temporal-python-pro/SKILL.md +370 -0
  426. package/skills/temporal-python-testing/SKILL.md +170 -0
  427. package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  428. package/skills/temporal-python-testing/resources/local-setup.md +553 -0
  429. package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  430. package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  431. package/skills/terraform-module-library/SKILL.md +261 -0
  432. package/skills/terraform-module-library/references/aws-modules.md +63 -0
  433. package/skills/terraform-specialist/SKILL.md +166 -0
  434. package/skills/test-automator/SKILL.md +224 -0
  435. package/skills/threat-mitigation-mapping/SKILL.md +33 -0
  436. package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
  437. package/skills/threat-modeling-expert/SKILL.md +60 -0
  438. package/skills/track-management/SKILL.md +38 -0
  439. package/skills/track-management/resources/implementation-playbook.md +591 -0
  440. package/skills/turborepo-caching/SKILL.md +419 -0
  441. package/skills/tutorial-engineer/SKILL.md +139 -0
  442. package/skills/typescript-advanced-types/SKILL.md +35 -0
  443. package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
  444. package/skills/typescript-pro/SKILL.md +55 -0
  445. package/skills/ui-minimal/SKILL.md +23 -0
  446. package/skills/ui-ux-designer/SKILL.md +209 -0
  447. package/skills/ui-visual-validator/SKILL.md +214 -0
  448. package/skills/unit-testing-test-generate/SKILL.md +319 -0
  449. package/skills/unity-developer/SKILL.md +230 -0
  450. package/skills/unity-ecs-patterns/SKILL.md +33 -0
  451. package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
  452. package/skills/uv-package-manager/SKILL.md +37 -0
  453. package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
  454. package/skills/vector-database-engineer/SKILL.md +60 -0
  455. package/skills/vector-index-tuning/SKILL.md +42 -0
  456. package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
  457. package/skills/wcag-audit-patterns/SKILL.md +41 -0
  458. package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
  459. package/skills/web3-testing/SKILL.md +427 -0
  460. package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
  461. package/skills/workflow-patterns/SKILL.md +38 -0
  462. package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
@@ -0,0 +1,523 @@
1
+ // Repository Implementation Template for .NET 8+
2
+ // Demonstrates both Dapper (performance) and EF Core (convenience) patterns
3
+
4
+ using System.Data;
5
+ using Dapper;
6
+ using Microsoft.Data.SqlClient;
7
+ using Microsoft.EntityFrameworkCore;
8
+ using Microsoft.Extensions.Logging;
9
+
10
+ namespace YourNamespace.Infrastructure.Data;
11
+
12
+ #region Interfaces
13
+
14
+ public interface IProductRepository
15
+ {
16
+ Task<Product?> GetByIdAsync(string id, CancellationToken ct = default);
17
+ Task<Product?> GetBySkuAsync(string sku, CancellationToken ct = default);
18
+ Task<(IReadOnlyList<Product> Items, int TotalCount)> SearchAsync(ProductSearchRequest request, CancellationToken ct = default);
19
+ Task<Product> CreateAsync(Product product, CancellationToken ct = default);
20
+ Task<Product> UpdateAsync(Product product, CancellationToken ct = default);
21
+ Task DeleteAsync(string id, CancellationToken ct = default);
22
+ Task<IReadOnlyList<Product>> GetByIdsAsync(IEnumerable<string> ids, CancellationToken ct = default);
23
+ }
24
+
25
+ #endregion
26
+
27
+ #region Dapper Implementation (High Performance)
28
+
29
+ public class DapperProductRepository : IProductRepository
30
+ {
31
+ private readonly IDbConnection _connection;
32
+ private readonly ILogger<DapperProductRepository> _logger;
33
+
34
+ public DapperProductRepository(
35
+ IDbConnection connection,
36
+ ILogger<DapperProductRepository> logger)
37
+ {
38
+ _connection = connection;
39
+ _logger = logger;
40
+ }
41
+
42
+ public async Task<Product?> GetByIdAsync(string id, CancellationToken ct = default)
43
+ {
44
+ const string sql = """
45
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt, UpdatedAt
46
+ FROM Products
47
+ WHERE Id = @Id AND IsDeleted = 0
48
+ """;
49
+
50
+ return await _connection.QueryFirstOrDefaultAsync<Product>(
51
+ new CommandDefinition(sql, new { Id = id }, cancellationToken: ct));
52
+ }
53
+
54
+ public async Task<Product?> GetBySkuAsync(string sku, CancellationToken ct = default)
55
+ {
56
+ const string sql = """
57
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt, UpdatedAt
58
+ FROM Products
59
+ WHERE Sku = @Sku AND IsDeleted = 0
60
+ """;
61
+
62
+ return await _connection.QueryFirstOrDefaultAsync<Product>(
63
+ new CommandDefinition(sql, new { Sku = sku }, cancellationToken: ct));
64
+ }
65
+
66
+ public async Task<(IReadOnlyList<Product> Items, int TotalCount)> SearchAsync(
67
+ ProductSearchRequest request,
68
+ CancellationToken ct = default)
69
+ {
70
+ var whereClauses = new List<string> { "IsDeleted = 0" };
71
+ var parameters = new DynamicParameters();
72
+
73
+ // Build dynamic WHERE clause
74
+ if (!string.IsNullOrWhiteSpace(request.SearchTerm))
75
+ {
76
+ whereClauses.Add("(Name LIKE @SearchTerm OR Sku LIKE @SearchTerm)");
77
+ parameters.Add("SearchTerm", $"%{request.SearchTerm}%");
78
+ }
79
+
80
+ if (request.CategoryId.HasValue)
81
+ {
82
+ whereClauses.Add("CategoryId = @CategoryId");
83
+ parameters.Add("CategoryId", request.CategoryId.Value);
84
+ }
85
+
86
+ if (request.MinPrice.HasValue)
87
+ {
88
+ whereClauses.Add("Price >= @MinPrice");
89
+ parameters.Add("MinPrice", request.MinPrice.Value);
90
+ }
91
+
92
+ if (request.MaxPrice.HasValue)
93
+ {
94
+ whereClauses.Add("Price <= @MaxPrice");
95
+ parameters.Add("MaxPrice", request.MaxPrice.Value);
96
+ }
97
+
98
+ var whereClause = string.Join(" AND ", whereClauses);
99
+ var page = request.Page ?? 1;
100
+ var pageSize = request.PageSize ?? 50;
101
+ var offset = (page - 1) * pageSize;
102
+
103
+ parameters.Add("Offset", offset);
104
+ parameters.Add("PageSize", pageSize);
105
+
106
+ // Use multi-query for count + data in single roundtrip
107
+ var sql = $"""
108
+ -- Count query
109
+ SELECT COUNT(*) FROM Products WHERE {whereClause};
110
+
111
+ -- Data query with pagination
112
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt, UpdatedAt
113
+ FROM Products
114
+ WHERE {whereClause}
115
+ ORDER BY Name
116
+ OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY;
117
+ """;
118
+
119
+ using var multi = await _connection.QueryMultipleAsync(
120
+ new CommandDefinition(sql, parameters, cancellationToken: ct));
121
+
122
+ var totalCount = await multi.ReadSingleAsync<int>();
123
+ var items = (await multi.ReadAsync<Product>()).ToList();
124
+
125
+ return (items, totalCount);
126
+ }
127
+
128
+ public async Task<Product> CreateAsync(Product product, CancellationToken ct = default)
129
+ {
130
+ const string sql = """
131
+ INSERT INTO Products (Id, Name, Sku, Price, CategoryId, Stock, CreatedAt, IsDeleted)
132
+ VALUES (@Id, @Name, @Sku, @Price, @CategoryId, @Stock, @CreatedAt, 0);
133
+
134
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt, UpdatedAt
135
+ FROM Products WHERE Id = @Id;
136
+ """;
137
+
138
+ return await _connection.QuerySingleAsync<Product>(
139
+ new CommandDefinition(sql, product, cancellationToken: ct));
140
+ }
141
+
142
+ public async Task<Product> UpdateAsync(Product product, CancellationToken ct = default)
143
+ {
144
+ const string sql = """
145
+ UPDATE Products
146
+ SET Name = @Name,
147
+ Sku = @Sku,
148
+ Price = @Price,
149
+ CategoryId = @CategoryId,
150
+ Stock = @Stock,
151
+ UpdatedAt = @UpdatedAt
152
+ WHERE Id = @Id AND IsDeleted = 0;
153
+
154
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt, UpdatedAt
155
+ FROM Products WHERE Id = @Id;
156
+ """;
157
+
158
+ return await _connection.QuerySingleAsync<Product>(
159
+ new CommandDefinition(sql, product, cancellationToken: ct));
160
+ }
161
+
162
+ public async Task DeleteAsync(string id, CancellationToken ct = default)
163
+ {
164
+ const string sql = """
165
+ UPDATE Products
166
+ SET IsDeleted = 1, UpdatedAt = @UpdatedAt
167
+ WHERE Id = @Id
168
+ """;
169
+
170
+ await _connection.ExecuteAsync(
171
+ new CommandDefinition(sql, new { Id = id, UpdatedAt = DateTime.UtcNow }, cancellationToken: ct));
172
+ }
173
+
174
+ public async Task<IReadOnlyList<Product>> GetByIdsAsync(
175
+ IEnumerable<string> ids,
176
+ CancellationToken ct = default)
177
+ {
178
+ var idList = ids.ToList();
179
+ if (idList.Count == 0)
180
+ return Array.Empty<Product>();
181
+
182
+ const string sql = """
183
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt, UpdatedAt
184
+ FROM Products
185
+ WHERE Id IN @Ids AND IsDeleted = 0
186
+ """;
187
+
188
+ var results = await _connection.QueryAsync<Product>(
189
+ new CommandDefinition(sql, new { Ids = idList }, cancellationToken: ct));
190
+
191
+ return results.ToList();
192
+ }
193
+ }
194
+
195
+ #endregion
196
+
197
+ #region EF Core Implementation (Rich Domain Models)
198
+
199
+ public class EfCoreProductRepository : IProductRepository
200
+ {
201
+ private readonly AppDbContext _context;
202
+ private readonly ILogger<EfCoreProductRepository> _logger;
203
+
204
+ public EfCoreProductRepository(
205
+ AppDbContext context,
206
+ ILogger<EfCoreProductRepository> logger)
207
+ {
208
+ _context = context;
209
+ _logger = logger;
210
+ }
211
+
212
+ public async Task<Product?> GetByIdAsync(string id, CancellationToken ct = default)
213
+ {
214
+ return await _context.Products
215
+ .AsNoTracking()
216
+ .FirstOrDefaultAsync(p => p.Id == id, ct);
217
+ }
218
+
219
+ public async Task<Product?> GetBySkuAsync(string sku, CancellationToken ct = default)
220
+ {
221
+ return await _context.Products
222
+ .AsNoTracking()
223
+ .FirstOrDefaultAsync(p => p.Sku == sku, ct);
224
+ }
225
+
226
+ public async Task<(IReadOnlyList<Product> Items, int TotalCount)> SearchAsync(
227
+ ProductSearchRequest request,
228
+ CancellationToken ct = default)
229
+ {
230
+ var query = _context.Products.AsNoTracking();
231
+
232
+ // Apply filters
233
+ if (!string.IsNullOrWhiteSpace(request.SearchTerm))
234
+ {
235
+ var term = request.SearchTerm.ToLower();
236
+ query = query.Where(p =>
237
+ p.Name.ToLower().Contains(term) ||
238
+ p.Sku.ToLower().Contains(term));
239
+ }
240
+
241
+ if (request.CategoryId.HasValue)
242
+ query = query.Where(p => p.CategoryId == request.CategoryId.Value);
243
+
244
+ if (request.MinPrice.HasValue)
245
+ query = query.Where(p => p.Price >= request.MinPrice.Value);
246
+
247
+ if (request.MaxPrice.HasValue)
248
+ query = query.Where(p => p.Price <= request.MaxPrice.Value);
249
+
250
+ // Get count before pagination
251
+ var totalCount = await query.CountAsync(ct);
252
+
253
+ // Apply pagination
254
+ var page = request.Page ?? 1;
255
+ var pageSize = request.PageSize ?? 50;
256
+
257
+ var items = await query
258
+ .OrderBy(p => p.Name)
259
+ .Skip((page - 1) * pageSize)
260
+ .Take(pageSize)
261
+ .ToListAsync(ct);
262
+
263
+ return (items, totalCount);
264
+ }
265
+
266
+ public async Task<Product> CreateAsync(Product product, CancellationToken ct = default)
267
+ {
268
+ _context.Products.Add(product);
269
+ await _context.SaveChangesAsync(ct);
270
+ return product;
271
+ }
272
+
273
+ public async Task<Product> UpdateAsync(Product product, CancellationToken ct = default)
274
+ {
275
+ _context.Products.Update(product);
276
+ await _context.SaveChangesAsync(ct);
277
+ return product;
278
+ }
279
+
280
+ public async Task DeleteAsync(string id, CancellationToken ct = default)
281
+ {
282
+ var product = await _context.Products.FindAsync(new object[] { id }, ct);
283
+ if (product != null)
284
+ {
285
+ product.IsDeleted = true;
286
+ product.UpdatedAt = DateTime.UtcNow;
287
+ await _context.SaveChangesAsync(ct);
288
+ }
289
+ }
290
+
291
+ public async Task<IReadOnlyList<Product>> GetByIdsAsync(
292
+ IEnumerable<string> ids,
293
+ CancellationToken ct = default)
294
+ {
295
+ var idList = ids.ToList();
296
+ if (idList.Count == 0)
297
+ return Array.Empty<Product>();
298
+
299
+ return await _context.Products
300
+ .AsNoTracking()
301
+ .Where(p => idList.Contains(p.Id))
302
+ .ToListAsync(ct);
303
+ }
304
+ }
305
+
306
+ #endregion
307
+
308
+ #region DbContext Configuration
309
+
310
+ public class AppDbContext : DbContext
311
+ {
312
+ public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
313
+
314
+ public DbSet<Product> Products => Set<Product>();
315
+ public DbSet<Category> Categories => Set<Category>();
316
+ public DbSet<Order> Orders => Set<Order>();
317
+ public DbSet<OrderItem> OrderItems => Set<OrderItem>();
318
+
319
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
320
+ {
321
+ // Apply all configurations from assembly
322
+ modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
323
+
324
+ // Global query filter for soft delete
325
+ modelBuilder.Entity<Product>().HasQueryFilter(p => !p.IsDeleted);
326
+ }
327
+ }
328
+
329
+ public class ProductConfiguration : IEntityTypeConfiguration<Product>
330
+ {
331
+ public void Configure(EntityTypeBuilder<Product> builder)
332
+ {
333
+ builder.ToTable("Products");
334
+
335
+ builder.HasKey(p => p.Id);
336
+ builder.Property(p => p.Id).HasMaxLength(40);
337
+
338
+ builder.Property(p => p.Name)
339
+ .HasMaxLength(200)
340
+ .IsRequired();
341
+
342
+ builder.Property(p => p.Sku)
343
+ .HasMaxLength(50)
344
+ .IsRequired();
345
+
346
+ builder.Property(p => p.Price)
347
+ .HasPrecision(18, 2);
348
+
349
+ // Indexes
350
+ builder.HasIndex(p => p.Sku).IsUnique();
351
+ builder.HasIndex(p => p.CategoryId);
352
+ builder.HasIndex(p => new { p.CategoryId, p.Name });
353
+
354
+ // Relationships
355
+ builder.HasOne(p => p.Category)
356
+ .WithMany(c => c.Products)
357
+ .HasForeignKey(p => p.CategoryId);
358
+ }
359
+ }
360
+
361
+ #endregion
362
+
363
+ #region Advanced Patterns
364
+
365
+ /// <summary>
366
+ /// Unit of Work pattern for coordinating multiple repositories
367
+ /// </summary>
368
+ public interface IUnitOfWork : IDisposable
369
+ {
370
+ IProductRepository Products { get; }
371
+ IOrderRepository Orders { get; }
372
+ Task<int> SaveChangesAsync(CancellationToken ct = default);
373
+ Task BeginTransactionAsync(CancellationToken ct = default);
374
+ Task CommitAsync(CancellationToken ct = default);
375
+ Task RollbackAsync(CancellationToken ct = default);
376
+ }
377
+
378
+ public class UnitOfWork : IUnitOfWork
379
+ {
380
+ private readonly AppDbContext _context;
381
+ private IDbContextTransaction? _transaction;
382
+
383
+ public IProductRepository Products { get; }
384
+ public IOrderRepository Orders { get; }
385
+
386
+ public UnitOfWork(
387
+ AppDbContext context,
388
+ IProductRepository products,
389
+ IOrderRepository orders)
390
+ {
391
+ _context = context;
392
+ Products = products;
393
+ Orders = orders;
394
+ }
395
+
396
+ public async Task<int> SaveChangesAsync(CancellationToken ct = default)
397
+ => await _context.SaveChangesAsync(ct);
398
+
399
+ public async Task BeginTransactionAsync(CancellationToken ct = default)
400
+ {
401
+ _transaction = await _context.Database.BeginTransactionAsync(ct);
402
+ }
403
+
404
+ public async Task CommitAsync(CancellationToken ct = default)
405
+ {
406
+ if (_transaction != null)
407
+ {
408
+ await _transaction.CommitAsync(ct);
409
+ await _transaction.DisposeAsync();
410
+ _transaction = null;
411
+ }
412
+ }
413
+
414
+ public async Task RollbackAsync(CancellationToken ct = default)
415
+ {
416
+ if (_transaction != null)
417
+ {
418
+ await _transaction.RollbackAsync(ct);
419
+ await _transaction.DisposeAsync();
420
+ _transaction = null;
421
+ }
422
+ }
423
+
424
+ public void Dispose()
425
+ {
426
+ _transaction?.Dispose();
427
+ _context.Dispose();
428
+ }
429
+ }
430
+
431
+ /// <summary>
432
+ /// Specification pattern for complex queries
433
+ /// </summary>
434
+ public interface ISpecification<T>
435
+ {
436
+ Expression<Func<T, bool>> Criteria { get; }
437
+ List<Expression<Func<T, object>>> Includes { get; }
438
+ List<string> IncludeStrings { get; }
439
+ Expression<Func<T, object>>? OrderBy { get; }
440
+ Expression<Func<T, object>>? OrderByDescending { get; }
441
+ int? Take { get; }
442
+ int? Skip { get; }
443
+ }
444
+
445
+ public abstract class BaseSpecification<T> : ISpecification<T>
446
+ {
447
+ public Expression<Func<T, bool>> Criteria { get; private set; } = _ => true;
448
+ public List<Expression<Func<T, object>>> Includes { get; } = new();
449
+ public List<string> IncludeStrings { get; } = new();
450
+ public Expression<Func<T, object>>? OrderBy { get; private set; }
451
+ public Expression<Func<T, object>>? OrderByDescending { get; private set; }
452
+ public int? Take { get; private set; }
453
+ public int? Skip { get; private set; }
454
+
455
+ protected void AddCriteria(Expression<Func<T, bool>> criteria) => Criteria = criteria;
456
+ protected void AddInclude(Expression<Func<T, object>> include) => Includes.Add(include);
457
+ protected void AddInclude(string include) => IncludeStrings.Add(include);
458
+ protected void ApplyOrderBy(Expression<Func<T, object>> orderBy) => OrderBy = orderBy;
459
+ protected void ApplyOrderByDescending(Expression<Func<T, object>> orderBy) => OrderByDescending = orderBy;
460
+ protected void ApplyPaging(int skip, int take) { Skip = skip; Take = take; }
461
+ }
462
+
463
+ // Example specification
464
+ public class ProductsByCategorySpec : BaseSpecification<Product>
465
+ {
466
+ public ProductsByCategorySpec(int categoryId, int page, int pageSize)
467
+ {
468
+ AddCriteria(p => p.CategoryId == categoryId);
469
+ AddInclude(p => p.Category);
470
+ ApplyOrderBy(p => p.Name);
471
+ ApplyPaging((page - 1) * pageSize, pageSize);
472
+ }
473
+ }
474
+
475
+ #endregion
476
+
477
+ #region Entity Definitions
478
+
479
+ public class Product
480
+ {
481
+ public string Id { get; set; } = string.Empty;
482
+ public string Name { get; set; } = string.Empty;
483
+ public string Sku { get; set; } = string.Empty;
484
+ public decimal Price { get; set; }
485
+ public int CategoryId { get; set; }
486
+ public int Stock { get; set; }
487
+ public bool IsDeleted { get; set; }
488
+ public DateTime CreatedAt { get; set; }
489
+ public DateTime? UpdatedAt { get; set; }
490
+
491
+ // Navigation
492
+ public Category? Category { get; set; }
493
+ }
494
+
495
+ public class Category
496
+ {
497
+ public int Id { get; set; }
498
+ public string Name { get; set; } = string.Empty;
499
+ public ICollection<Product> Products { get; set; } = new List<Product>();
500
+ }
501
+
502
+ public class Order
503
+ {
504
+ public int Id { get; set; }
505
+ public string CustomerOrderCode { get; set; } = string.Empty;
506
+ public decimal Total { get; set; }
507
+ public DateTime CreatedAt { get; set; }
508
+ public ICollection<OrderItem> Items { get; set; } = new List<OrderItem>();
509
+ }
510
+
511
+ public class OrderItem
512
+ {
513
+ public int Id { get; set; }
514
+ public int OrderId { get; set; }
515
+ public string ProductId { get; set; } = string.Empty;
516
+ public int Quantity { get; set; }
517
+ public decimal UnitPrice { get; set; }
518
+
519
+ public Order? Order { get; set; }
520
+ public Product? Product { get; set; }
521
+ }
522
+
523
+ #endregion