@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.
- package/CATALOG.md +317 -0
- package/README.md +121 -0
- package/aliases.json +65 -0
- package/bin/vibe.js +2 -0
- package/bundles.json +265 -0
- package/catalog.json +1560 -0
- package/dist/antigravity-skills/bin/cli.js +438 -0
- package/dist/antigravity-skills/lib/skill-utils.js +158 -0
- package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
- package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
- package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
- package/dist/bin/vibe.js +2 -0
- package/dist/dist/src/cli/index.js +26 -0
- package/dist/lib/skill-utils.js +158 -0
- package/dist/scripts/build-catalog.js +50 -0
- package/dist/scripts/normalize-frontmatter.js +144 -0
- package/dist/scripts/validate-skills.js +56 -0
- package/dist/src/cli/index.js +146 -0
- package/dist/src/types/index.js +13 -0
- package/dist/src/utils/fs.js +1 -0
- package/package.json +43 -0
- package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
- package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
- package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
- package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
- package/skills/agent-orchestrator/SKILL.md +24 -0
- package/skills/ai-engineer/SKILL.md +171 -0
- package/skills/airflow-dag-patterns/SKILL.md +41 -0
- package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
- package/skills/angular-migration/SKILL.md +428 -0
- package/skills/anti-reversing-techniques/SKILL.md +42 -0
- package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
- package/skills/api-design-principles/SKILL.md +37 -0
- package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/skills/api-documenter/SKILL.md +184 -0
- package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
- package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
- package/skills/application-performance-performance-optimization/SKILL.md +154 -0
- package/skills/architect-review/SKILL.md +174 -0
- package/skills/architecture-decision-records/SKILL.md +441 -0
- package/skills/architecture-patterns/SKILL.md +37 -0
- package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
- package/skills/arm-cortex-expert/SKILL.md +306 -0
- package/skills/async-python-patterns/SKILL.md +39 -0
- package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
- package/skills/attack-tree-construction/SKILL.md +38 -0
- package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
- package/skills/auth-implementation-patterns/SKILL.md +39 -0
- package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
- package/skills/backend-architect/SKILL.md +333 -0
- package/skills/backend-development-feature-development/SKILL.md +180 -0
- package/skills/backend-security-coder/SKILL.md +156 -0
- package/skills/backtesting-frameworks/SKILL.md +39 -0
- package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
- package/skills/bash-defensive-patterns/SKILL.md +43 -0
- package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
- package/skills/bash-pro/SKILL.md +310 -0
- package/skills/bats-testing-patterns/SKILL.md +34 -0
- package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
- package/skills/bazel-build-optimization/SKILL.md +397 -0
- package/skills/billing-automation/SKILL.md +42 -0
- package/skills/billing-automation/resources/implementation-playbook.md +544 -0
- package/skills/binary-analysis-patterns/SKILL.md +450 -0
- package/skills/blockchain-developer/SKILL.md +208 -0
- package/skills/business-analyst/SKILL.md +182 -0
- package/skills/c-pro/SKILL.md +56 -0
- package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
- package/skills/c4-code/SKILL.md +244 -0
- package/skills/c4-component/SKILL.md +153 -0
- package/skills/c4-container/SKILL.md +171 -0
- package/skills/c4-context/SKILL.md +150 -0
- package/skills/changelog-automation/SKILL.md +38 -0
- package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
- package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
- package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
- package/skills/clean-markdown/SKILL.md +23 -0
- package/skills/cloud-architect/SKILL.md +135 -0
- package/skills/code-documentation-code-explain/SKILL.md +46 -0
- package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
- package/skills/code-documentation-doc-generate/SKILL.md +48 -0
- package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/code-refactoring-context-restore/SKILL.md +179 -0
- package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
- package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
- package/skills/code-review-ai-ai-review/SKILL.md +450 -0
- package/skills/code-review-excellence/SKILL.md +40 -0
- package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
- package/skills/code-reviewer/SKILL.md +178 -0
- package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
- package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
- package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
- package/skills/competitive-landscape/SKILL.md +34 -0
- package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
- package/skills/comprehensive-review-full-review/SKILL.md +146 -0
- package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
- package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
- package/skills/conductor-implement/SKILL.md +388 -0
- package/skills/conductor-manage/SKILL.md +39 -0
- package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
- package/skills/conductor-new-track/SKILL.md +433 -0
- package/skills/conductor-revert/SKILL.md +372 -0
- package/skills/conductor-setup/SKILL.md +426 -0
- package/skills/conductor-status/SKILL.md +338 -0
- package/skills/conductor-validator/SKILL.md +62 -0
- package/skills/content-marketer/SKILL.md +170 -0
- package/skills/context-driven-development/SKILL.md +400 -0
- package/skills/context-management-context-restore/SKILL.md +179 -0
- package/skills/context-management-context-save/SKILL.md +177 -0
- package/skills/context-manager/SKILL.md +185 -0
- package/skills/cost-optimization/SKILL.md +286 -0
- package/skills/cpp-pro/SKILL.md +59 -0
- package/skills/cqrs-implementation/SKILL.md +35 -0
- package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
- package/skills/csharp-pro/SKILL.md +59 -0
- package/skills/customer-support/SKILL.md +170 -0
- package/skills/data-engineer/SKILL.md +224 -0
- package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
- package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
- package/skills/data-quality-frameworks/SKILL.md +40 -0
- package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
- package/skills/data-scientist/SKILL.md +199 -0
- package/skills/data-storytelling/SKILL.md +465 -0
- package/skills/database-admin/SKILL.md +165 -0
- package/skills/database-architect/SKILL.md +268 -0
- package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
- package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
- package/skills/database-migration/SKILL.md +436 -0
- package/skills/database-migrations-migration-observability/SKILL.md +420 -0
- package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
- package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
- package/skills/database-optimizer/SKILL.md +167 -0
- package/skills/dbt-transformation-patterns/SKILL.md +34 -0
- package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
- package/skills/debugger/SKILL.md +49 -0
- package/skills/debugging-strategies/SKILL.md +34 -0
- package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
- package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
- package/skills/defi-protocol-templates/SKILL.md +466 -0
- package/skills/dependency-management-deps-audit/SKILL.md +44 -0
- package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/dependency-upgrade/SKILL.md +421 -0
- package/skills/deployment-engineer/SKILL.md +170 -0
- package/skills/deployment-pipeline-design/SKILL.md +371 -0
- package/skills/deployment-validation-config-validate/SKILL.md +496 -0
- package/skills/devops-troubleshooter/SKILL.md +161 -0
- package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
- package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
- package/skills/distributed-tracing/SKILL.md +450 -0
- package/skills/django-pro/SKILL.md +180 -0
- package/skills/docs-architect/SKILL.md +98 -0
- package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
- package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/dotnet-architect/SKILL.md +197 -0
- package/skills/dotnet-backend-patterns/SKILL.md +37 -0
- package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
- package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
- package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
- package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
- package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
- package/skills/dummy-skill/SKILL.md +5 -0
- package/skills/dx-optimizer/SKILL.md +83 -0
- package/skills/e2e-testing-patterns/SKILL.md +41 -0
- package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
- package/skills/elixir-pro/SKILL.md +59 -0
- package/skills/embedding-strategies/SKILL.md +491 -0
- package/skills/employment-contract-templates/SKILL.md +39 -0
- package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
- package/skills/error-debugging-error-analysis/SKILL.md +47 -0
- package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-debugging-error-trace/SKILL.md +43 -0
- package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
- package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
- package/skills/error-detective/SKILL.md +53 -0
- package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
- package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
- package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
- package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
- package/skills/error-handling-patterns/SKILL.md +35 -0
- package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
- package/skills/event-sourcing-architect/SKILL.md +58 -0
- package/skills/event-store-design/SKILL.md +449 -0
- package/skills/fastapi-pro/SKILL.md +192 -0
- package/skills/fastapi-templates/SKILL.md +32 -0
- package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
- package/skills/final-test/SKILL.md +5 -0
- package/skills/firmware-analyst/SKILL.md +320 -0
- package/skills/flutter-expert/SKILL.md +200 -0
- package/skills/framework-migration-code-migrate/SKILL.md +48 -0
- package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
- package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
- package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
- package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
- package/skills/frontend-developer/SKILL.md +171 -0
- package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
- package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
- package/skills/frontend-security-coder/SKILL.md +170 -0
- package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
- package/skills/gdpr-data-handling/SKILL.md +33 -0
- package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
- package/skills/git-advanced-workflows/SKILL.md +412 -0
- package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
- package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
- package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
- package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
- package/skills/github-actions-templates/SKILL.md +345 -0
- package/skills/gitlab-ci-patterns/SKILL.md +283 -0
- package/skills/gitops-workflow/SKILL.md +303 -0
- package/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/skills/go-concurrency-patterns/SKILL.md +33 -0
- package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
- package/skills/godot-gdscript-patterns/SKILL.md +33 -0
- package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
- package/skills/golang-pro/SKILL.md +179 -0
- package/skills/grafana-dashboards/SKILL.md +381 -0
- package/skills/graphql-architect/SKILL.md +182 -0
- package/skills/haskell-pro/SKILL.md +56 -0
- package/skills/helm-chart-scaffolding/SKILL.md +34 -0
- package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
- package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/skills/hr-pro/SKILL.md +126 -0
- package/skills/hybrid-cloud-architect/SKILL.md +168 -0
- package/skills/hybrid-cloud-networking/SKILL.md +238 -0
- package/skills/hybrid-search-implementation/SKILL.md +32 -0
- package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
- package/skills/incident-responder/SKILL.md +213 -0
- package/skills/incident-response-incident-response/SKILL.md +168 -0
- package/skills/incident-response-smart-fix/SKILL.md +29 -0
- package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
- package/skills/incident-runbook-templates/SKILL.md +395 -0
- package/skills/ios-developer/SKILL.md +219 -0
- package/skills/istio-traffic-management/SKILL.md +337 -0
- package/skills/java-pro/SKILL.md +177 -0
- package/skills/javascript-pro/SKILL.md +57 -0
- package/skills/javascript-testing-patterns/SKILL.md +35 -0
- package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
- package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
- package/skills/julia-pro/SKILL.md +209 -0
- package/skills/k8s-manifest-generator/SKILL.md +35 -0
- package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
- package/skills/k8s-security-policies/SKILL.md +346 -0
- package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/skills/kpi-dashboard-design/SKILL.md +440 -0
- package/skills/kubernetes-architect/SKILL.md +170 -0
- package/skills/langchain-architecture/SKILL.md +350 -0
- package/skills/legacy-modernizer/SKILL.md +53 -0
- package/skills/legal-advisor/SKILL.md +70 -0
- package/skills/linkerd-patterns/SKILL.md +321 -0
- package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
- package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
- package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
- package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
- package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
- package/skills/llm-evaluation/SKILL.md +483 -0
- package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
- package/skills/malware-analyst/SKILL.md +247 -0
- package/skills/market-sizing-analysis/SKILL.md +425 -0
- package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
- package/skills/market-sizing-analysis/references/data-sources.md +360 -0
- package/skills/memory-forensics/SKILL.md +491 -0
- package/skills/memory-safety-patterns/SKILL.md +33 -0
- package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
- package/skills/mermaid-expert/SKILL.md +59 -0
- package/skills/microservices-patterns/SKILL.md +35 -0
- package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
- package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
- package/skills/ml-engineer/SKILL.md +168 -0
- package/skills/ml-pipeline-workflow/SKILL.md +257 -0
- package/skills/mlops-engineer/SKILL.md +219 -0
- package/skills/mobile-developer/SKILL.md +205 -0
- package/skills/mobile-security-coder/SKILL.md +184 -0
- package/skills/modern-javascript-patterns/SKILL.md +35 -0
- package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
- package/skills/monorepo-architect/SKILL.md +61 -0
- package/skills/monorepo-management/SKILL.md +35 -0
- package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
- package/skills/mtls-configuration/SKILL.md +359 -0
- package/skills/multi-cloud-architecture/SKILL.md +189 -0
- package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
- package/skills/network-engineer/SKILL.md +169 -0
- package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
- package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
- package/skills/nft-standards/SKILL.md +395 -0
- package/skills/node-expert/SKILL.md +23 -0
- package/skills/nodejs-backend-patterns/SKILL.md +35 -0
- package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
- package/skills/nx-workspace-patterns/SKILL.md +464 -0
- package/skills/observability-engineer/SKILL.md +237 -0
- package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
- package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
- package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
- package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
- package/skills/on-call-handoff-patterns/SKILL.md +453 -0
- package/skills/openapi-spec-generation/SKILL.md +33 -0
- package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
- package/skills/payment-integration/SKILL.md +77 -0
- package/skills/paypal-integration/SKILL.md +479 -0
- package/skills/pci-compliance/SKILL.md +478 -0
- package/skills/performance-engineer/SKILL.md +180 -0
- package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
- package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
- package/skills/php-pro/SKILL.md +63 -0
- package/skills/posix-shell-pro/SKILL.md +304 -0
- package/skills/postgresql/SKILL.md +230 -0
- package/skills/postmortem-writing/SKILL.md +386 -0
- package/skills/projection-patterns/SKILL.md +33 -0
- package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
- package/skills/prometheus-configuration/SKILL.md +404 -0
- package/skills/prompt-engineer/SKILL.md +272 -0
- package/skills/prompt-engineering-patterns/SKILL.md +213 -0
- package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
- package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
- package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
- package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
- package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
- package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
- package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
- package/skills/protocol-reverse-engineering/SKILL.md +29 -0
- package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
- package/skills/python-development-python-scaffold/SKILL.md +331 -0
- package/skills/python-packaging/SKILL.md +36 -0
- package/skills/python-packaging/resources/implementation-playbook.md +869 -0
- package/skills/python-performance-optimization/SKILL.md +36 -0
- package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
- package/skills/python-pro/SKILL.md +158 -0
- package/skills/python-testing-patterns/SKILL.md +37 -0
- package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
- package/skills/quant-analyst/SKILL.md +53 -0
- package/skills/rag-implementation/SKILL.md +421 -0
- package/skills/react-modernization/SKILL.md +34 -0
- package/skills/react-modernization/resources/implementation-playbook.md +512 -0
- package/skills/react-native-architecture/SKILL.md +33 -0
- package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
- package/skills/react-state-management/SKILL.md +441 -0
- package/skills/reference-builder/SKILL.md +188 -0
- package/skills/reverse-engineer/SKILL.md +173 -0
- package/skills/risk-manager/SKILL.md +61 -0
- package/skills/risk-metrics-calculation/SKILL.md +33 -0
- package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
- package/skills/ruby-pro/SKILL.md +56 -0
- package/skills/rust-async-patterns/SKILL.md +33 -0
- package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
- package/skills/rust-pro/SKILL.md +178 -0
- package/skills/saga-orchestration/SKILL.md +496 -0
- package/skills/sales-automator/SKILL.md +55 -0
- package/skills/sast-configuration/SKILL.md +212 -0
- package/skills/scala-pro/SKILL.md +82 -0
- package/skills/screen-reader-testing/SKILL.md +33 -0
- package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
- package/skills/search-specialist/SKILL.md +80 -0
- package/skills/secrets-management/SKILL.md +364 -0
- package/skills/security-auditor/SKILL.md +169 -0
- package/skills/security-compliance-compliance-check/SKILL.md +55 -0
- package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
- package/skills/security-requirement-extraction/SKILL.md +33 -0
- package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
- package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
- package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
- package/skills/security-scanning-security-hardening/SKILL.md +147 -0
- package/skills/security-scanning-security-sast/SKILL.md +495 -0
- package/skills/seo-authority-builder/SKILL.md +136 -0
- package/skills/seo-cannibalization-detector/SKILL.md +123 -0
- package/skills/seo-content-auditor/SKILL.md +83 -0
- package/skills/seo-content-planner/SKILL.md +108 -0
- package/skills/seo-content-refresher/SKILL.md +118 -0
- package/skills/seo-content-writer/SKILL.md +96 -0
- package/skills/seo-keyword-strategist/SKILL.md +95 -0
- package/skills/seo-meta-optimizer/SKILL.md +92 -0
- package/skills/seo-snippet-hunter/SKILL.md +114 -0
- package/skills/seo-structure-architect/SKILL.md +108 -0
- package/skills/service-mesh-expert/SKILL.md +58 -0
- package/skills/service-mesh-observability/SKILL.md +395 -0
- package/skills/shellcheck-configuration/SKILL.md +466 -0
- package/skills/similarity-search-patterns/SKILL.md +33 -0
- package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
- package/skills/slo-implementation/SKILL.md +341 -0
- package/skills/solidity-security/SKILL.md +34 -0
- package/skills/solidity-security/resources/implementation-playbook.md +524 -0
- package/skills/spark-optimization/SKILL.md +427 -0
- package/skills/sql-optimization-patterns/SKILL.md +35 -0
- package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
- package/skills/sql-pro/SKILL.md +173 -0
- package/skills/startup-analyst/SKILL.md +328 -0
- package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
- package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
- package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
- package/skills/startup-financial-modeling/SKILL.md +467 -0
- package/skills/startup-metrics-framework/SKILL.md +34 -0
- package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
- package/skills/stride-analysis-patterns/SKILL.md +33 -0
- package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
- package/skills/stripe-integration/SKILL.md +454 -0
- package/skills/systems-programming-rust-project/SKILL.md +440 -0
- package/skills/tailwind-design-system/SKILL.md +33 -0
- package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
- package/skills/tdd-orchestrator/SKILL.md +205 -0
- package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
- package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
- package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
- package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
- package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
- package/skills/team-collaboration-issue/SKILL.md +37 -0
- package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
- package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
- package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
- package/skills/team-composition-analysis/SKILL.md +413 -0
- package/skills/temporal-python-pro/SKILL.md +370 -0
- package/skills/temporal-python-testing/SKILL.md +170 -0
- package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
- package/skills/temporal-python-testing/resources/local-setup.md +553 -0
- package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
- package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
- package/skills/terraform-module-library/SKILL.md +261 -0
- package/skills/terraform-module-library/references/aws-modules.md +63 -0
- package/skills/terraform-specialist/SKILL.md +166 -0
- package/skills/test-automator/SKILL.md +224 -0
- package/skills/threat-mitigation-mapping/SKILL.md +33 -0
- package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
- package/skills/threat-modeling-expert/SKILL.md +60 -0
- package/skills/track-management/SKILL.md +38 -0
- package/skills/track-management/resources/implementation-playbook.md +591 -0
- package/skills/turborepo-caching/SKILL.md +419 -0
- package/skills/tutorial-engineer/SKILL.md +139 -0
- package/skills/typescript-advanced-types/SKILL.md +35 -0
- package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
- package/skills/typescript-pro/SKILL.md +55 -0
- package/skills/ui-minimal/SKILL.md +23 -0
- package/skills/ui-ux-designer/SKILL.md +209 -0
- package/skills/ui-visual-validator/SKILL.md +214 -0
- package/skills/unit-testing-test-generate/SKILL.md +319 -0
- package/skills/unity-developer/SKILL.md +230 -0
- package/skills/unity-ecs-patterns/SKILL.md +33 -0
- package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
- package/skills/uv-package-manager/SKILL.md +37 -0
- package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
- package/skills/vector-database-engineer/SKILL.md +60 -0
- package/skills/vector-index-tuning/SKILL.md +42 -0
- package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
- package/skills/wcag-audit-patterns/SKILL.md +41 -0
- package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
- package/skills/web3-testing/SKILL.md +427 -0
- package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
- package/skills/workflow-patterns/SKILL.md +38 -0
- package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
// Service Implementation Template for .NET 8+
|
|
2
|
+
// This template demonstrates best practices for building robust services
|
|
3
|
+
|
|
4
|
+
using System.Text.Json;
|
|
5
|
+
using FluentValidation;
|
|
6
|
+
using Microsoft.Extensions.Logging;
|
|
7
|
+
using Microsoft.Extensions.Options;
|
|
8
|
+
|
|
9
|
+
namespace YourNamespace.Application.Services;
|
|
10
|
+
|
|
11
|
+
/// <summary>
|
|
12
|
+
/// Configuration options for the service
|
|
13
|
+
/// </summary>
|
|
14
|
+
public class ProductServiceOptions
|
|
15
|
+
{
|
|
16
|
+
public const string SectionName = "ProductService";
|
|
17
|
+
|
|
18
|
+
public int DefaultPageSize { get; set; } = 50;
|
|
19
|
+
public int MaxPageSize { get; set; } = 200;
|
|
20
|
+
public TimeSpan CacheDuration { get; set; } = TimeSpan.FromMinutes(15);
|
|
21
|
+
public bool EnableEnrichment { get; set; } = true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// <summary>
|
|
25
|
+
/// Generic result type for operations that can fail
|
|
26
|
+
/// </summary>
|
|
27
|
+
public class Result<T>
|
|
28
|
+
{
|
|
29
|
+
public bool IsSuccess { get; }
|
|
30
|
+
public T? Value { get; }
|
|
31
|
+
public string? Error { get; }
|
|
32
|
+
public string? ErrorCode { get; }
|
|
33
|
+
|
|
34
|
+
private Result(bool isSuccess, T? value, string? error, string? errorCode)
|
|
35
|
+
{
|
|
36
|
+
IsSuccess = isSuccess;
|
|
37
|
+
Value = value;
|
|
38
|
+
Error = error;
|
|
39
|
+
ErrorCode = errorCode;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public static Result<T> Success(T value) => new(true, value, null, null);
|
|
43
|
+
public static Result<T> Failure(string error, string? code = null) => new(false, default, error, code);
|
|
44
|
+
|
|
45
|
+
public Result<TNew> Map<TNew>(Func<T, TNew> mapper) =>
|
|
46
|
+
IsSuccess ? Result<TNew>.Success(mapper(Value!)) : Result<TNew>.Failure(Error!, ErrorCode);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// <summary>
|
|
50
|
+
/// Service interface - define the contract
|
|
51
|
+
/// </summary>
|
|
52
|
+
public interface IProductService
|
|
53
|
+
{
|
|
54
|
+
Task<Result<Product>> GetByIdAsync(string id, CancellationToken ct = default);
|
|
55
|
+
Task<Result<PagedResult<Product>>> SearchAsync(ProductSearchRequest request, CancellationToken ct = default);
|
|
56
|
+
Task<Result<Product>> CreateAsync(CreateProductRequest request, CancellationToken ct = default);
|
|
57
|
+
Task<Result<Product>> UpdateAsync(string id, UpdateProductRequest request, CancellationToken ct = default);
|
|
58
|
+
Task<Result<bool>> DeleteAsync(string id, CancellationToken ct = default);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/// <summary>
|
|
62
|
+
/// Service implementation with full patterns
|
|
63
|
+
/// </summary>
|
|
64
|
+
public class ProductService : IProductService
|
|
65
|
+
{
|
|
66
|
+
private readonly IProductRepository _repository;
|
|
67
|
+
private readonly ICacheService _cache;
|
|
68
|
+
private readonly IValidator<CreateProductRequest> _createValidator;
|
|
69
|
+
private readonly IValidator<UpdateProductRequest> _updateValidator;
|
|
70
|
+
private readonly ILogger<ProductService> _logger;
|
|
71
|
+
private readonly ProductServiceOptions _options;
|
|
72
|
+
|
|
73
|
+
public ProductService(
|
|
74
|
+
IProductRepository repository,
|
|
75
|
+
ICacheService cache,
|
|
76
|
+
IValidator<CreateProductRequest> createValidator,
|
|
77
|
+
IValidator<UpdateProductRequest> updateValidator,
|
|
78
|
+
ILogger<ProductService> logger,
|
|
79
|
+
IOptions<ProductServiceOptions> options)
|
|
80
|
+
{
|
|
81
|
+
_repository = repository ?? throw new ArgumentNullException(nameof(repository));
|
|
82
|
+
_cache = cache ?? throw new ArgumentNullException(nameof(cache));
|
|
83
|
+
_createValidator = createValidator ?? throw new ArgumentNullException(nameof(createValidator));
|
|
84
|
+
_updateValidator = updateValidator ?? throw new ArgumentNullException(nameof(updateValidator));
|
|
85
|
+
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
|
86
|
+
_options = options?.Value ?? throw new ArgumentNullException(nameof(options));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public async Task<Result<Product>> GetByIdAsync(string id, CancellationToken ct = default)
|
|
90
|
+
{
|
|
91
|
+
if (string.IsNullOrWhiteSpace(id))
|
|
92
|
+
return Result<Product>.Failure("Product ID is required", "INVALID_ID");
|
|
93
|
+
|
|
94
|
+
try
|
|
95
|
+
{
|
|
96
|
+
// Try cache first
|
|
97
|
+
var cacheKey = GetCacheKey(id);
|
|
98
|
+
var cached = await _cache.GetAsync<Product>(cacheKey, ct);
|
|
99
|
+
|
|
100
|
+
if (cached != null)
|
|
101
|
+
{
|
|
102
|
+
_logger.LogDebug("Cache hit for product {ProductId}", id);
|
|
103
|
+
return Result<Product>.Success(cached);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Fetch from repository
|
|
107
|
+
var product = await _repository.GetByIdAsync(id, ct);
|
|
108
|
+
|
|
109
|
+
if (product == null)
|
|
110
|
+
{
|
|
111
|
+
_logger.LogWarning("Product not found: {ProductId}", id);
|
|
112
|
+
return Result<Product>.Failure($"Product '{id}' not found", "NOT_FOUND");
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Populate cache
|
|
116
|
+
await _cache.SetAsync(cacheKey, product, _options.CacheDuration, ct);
|
|
117
|
+
|
|
118
|
+
return Result<Product>.Success(product);
|
|
119
|
+
}
|
|
120
|
+
catch (Exception ex)
|
|
121
|
+
{
|
|
122
|
+
_logger.LogError(ex, "Error retrieving product {ProductId}", id);
|
|
123
|
+
return Result<Product>.Failure("An error occurred while retrieving the product", "INTERNAL_ERROR");
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
public async Task<Result<PagedResult<Product>>> SearchAsync(
|
|
128
|
+
ProductSearchRequest request,
|
|
129
|
+
CancellationToken ct = default)
|
|
130
|
+
{
|
|
131
|
+
try
|
|
132
|
+
{
|
|
133
|
+
// Sanitize pagination
|
|
134
|
+
var pageSize = Math.Clamp(request.PageSize ?? _options.DefaultPageSize, 1, _options.MaxPageSize);
|
|
135
|
+
var page = Math.Max(request.Page ?? 1, 1);
|
|
136
|
+
|
|
137
|
+
var sanitizedRequest = request with
|
|
138
|
+
{
|
|
139
|
+
PageSize = pageSize,
|
|
140
|
+
Page = page
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// Execute search
|
|
144
|
+
var (items, totalCount) = await _repository.SearchAsync(sanitizedRequest, ct);
|
|
145
|
+
|
|
146
|
+
var result = new PagedResult<Product>
|
|
147
|
+
{
|
|
148
|
+
Items = items,
|
|
149
|
+
TotalCount = totalCount,
|
|
150
|
+
Page = page,
|
|
151
|
+
PageSize = pageSize,
|
|
152
|
+
TotalPages = (int)Math.Ceiling((double)totalCount / pageSize)
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
return Result<PagedResult<Product>>.Success(result);
|
|
156
|
+
}
|
|
157
|
+
catch (Exception ex)
|
|
158
|
+
{
|
|
159
|
+
_logger.LogError(ex, "Error searching products with request {@Request}", request);
|
|
160
|
+
return Result<PagedResult<Product>>.Failure("An error occurred while searching products", "INTERNAL_ERROR");
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public async Task<Result<Product>> CreateAsync(CreateProductRequest request, CancellationToken ct = default)
|
|
165
|
+
{
|
|
166
|
+
// Validate
|
|
167
|
+
var validation = await _createValidator.ValidateAsync(request, ct);
|
|
168
|
+
if (!validation.IsValid)
|
|
169
|
+
{
|
|
170
|
+
var errors = string.Join("; ", validation.Errors.Select(e => e.ErrorMessage));
|
|
171
|
+
return Result<Product>.Failure(errors, "VALIDATION_ERROR");
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
try
|
|
175
|
+
{
|
|
176
|
+
// Check for duplicates
|
|
177
|
+
var existing = await _repository.GetBySkuAsync(request.Sku, ct);
|
|
178
|
+
if (existing != null)
|
|
179
|
+
return Result<Product>.Failure($"Product with SKU '{request.Sku}' already exists", "DUPLICATE_SKU");
|
|
180
|
+
|
|
181
|
+
// Create entity
|
|
182
|
+
var product = new Product
|
|
183
|
+
{
|
|
184
|
+
Id = Guid.NewGuid().ToString("N"),
|
|
185
|
+
Name = request.Name,
|
|
186
|
+
Sku = request.Sku,
|
|
187
|
+
Price = request.Price,
|
|
188
|
+
CategoryId = request.CategoryId,
|
|
189
|
+
CreatedAt = DateTime.UtcNow
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
// Persist
|
|
193
|
+
var created = await _repository.CreateAsync(product, ct);
|
|
194
|
+
|
|
195
|
+
_logger.LogInformation("Created product {ProductId} with SKU {Sku}", created.Id, created.Sku);
|
|
196
|
+
|
|
197
|
+
return Result<Product>.Success(created);
|
|
198
|
+
}
|
|
199
|
+
catch (Exception ex)
|
|
200
|
+
{
|
|
201
|
+
_logger.LogError(ex, "Error creating product with SKU {Sku}", request.Sku);
|
|
202
|
+
return Result<Product>.Failure("An error occurred while creating the product", "INTERNAL_ERROR");
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
public async Task<Result<Product>> UpdateAsync(
|
|
207
|
+
string id,
|
|
208
|
+
UpdateProductRequest request,
|
|
209
|
+
CancellationToken ct = default)
|
|
210
|
+
{
|
|
211
|
+
if (string.IsNullOrWhiteSpace(id))
|
|
212
|
+
return Result<Product>.Failure("Product ID is required", "INVALID_ID");
|
|
213
|
+
|
|
214
|
+
// Validate
|
|
215
|
+
var validation = await _updateValidator.ValidateAsync(request, ct);
|
|
216
|
+
if (!validation.IsValid)
|
|
217
|
+
{
|
|
218
|
+
var errors = string.Join("; ", validation.Errors.Select(e => e.ErrorMessage));
|
|
219
|
+
return Result<Product>.Failure(errors, "VALIDATION_ERROR");
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
try
|
|
223
|
+
{
|
|
224
|
+
// Fetch existing
|
|
225
|
+
var existing = await _repository.GetByIdAsync(id, ct);
|
|
226
|
+
if (existing == null)
|
|
227
|
+
return Result<Product>.Failure($"Product '{id}' not found", "NOT_FOUND");
|
|
228
|
+
|
|
229
|
+
// Apply updates (only non-null values)
|
|
230
|
+
if (request.Name != null) existing.Name = request.Name;
|
|
231
|
+
if (request.Price.HasValue) existing.Price = request.Price.Value;
|
|
232
|
+
if (request.CategoryId.HasValue) existing.CategoryId = request.CategoryId.Value;
|
|
233
|
+
existing.UpdatedAt = DateTime.UtcNow;
|
|
234
|
+
|
|
235
|
+
// Persist
|
|
236
|
+
var updated = await _repository.UpdateAsync(existing, ct);
|
|
237
|
+
|
|
238
|
+
// Invalidate cache
|
|
239
|
+
await _cache.RemoveAsync(GetCacheKey(id), ct);
|
|
240
|
+
|
|
241
|
+
_logger.LogInformation("Updated product {ProductId}", id);
|
|
242
|
+
|
|
243
|
+
return Result<Product>.Success(updated);
|
|
244
|
+
}
|
|
245
|
+
catch (Exception ex)
|
|
246
|
+
{
|
|
247
|
+
_logger.LogError(ex, "Error updating product {ProductId}", id);
|
|
248
|
+
return Result<Product>.Failure("An error occurred while updating the product", "INTERNAL_ERROR");
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
public async Task<Result<bool>> DeleteAsync(string id, CancellationToken ct = default)
|
|
253
|
+
{
|
|
254
|
+
if (string.IsNullOrWhiteSpace(id))
|
|
255
|
+
return Result<bool>.Failure("Product ID is required", "INVALID_ID");
|
|
256
|
+
|
|
257
|
+
try
|
|
258
|
+
{
|
|
259
|
+
var existing = await _repository.GetByIdAsync(id, ct);
|
|
260
|
+
if (existing == null)
|
|
261
|
+
return Result<bool>.Failure($"Product '{id}' not found", "NOT_FOUND");
|
|
262
|
+
|
|
263
|
+
// Soft delete
|
|
264
|
+
await _repository.DeleteAsync(id, ct);
|
|
265
|
+
|
|
266
|
+
// Invalidate cache
|
|
267
|
+
await _cache.RemoveAsync(GetCacheKey(id), ct);
|
|
268
|
+
|
|
269
|
+
_logger.LogInformation("Deleted product {ProductId}", id);
|
|
270
|
+
|
|
271
|
+
return Result<bool>.Success(true);
|
|
272
|
+
}
|
|
273
|
+
catch (Exception ex)
|
|
274
|
+
{
|
|
275
|
+
_logger.LogError(ex, "Error deleting product {ProductId}", id);
|
|
276
|
+
return Result<bool>.Failure("An error occurred while deleting the product", "INTERNAL_ERROR");
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
private static string GetCacheKey(string id) => $"product:{id}";
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Supporting types
|
|
284
|
+
public record CreateProductRequest(string Name, string Sku, decimal Price, int CategoryId);
|
|
285
|
+
public record UpdateProductRequest(string? Name = null, decimal? Price = null, int? CategoryId = null);
|
|
286
|
+
public record ProductSearchRequest(
|
|
287
|
+
string? SearchTerm = null,
|
|
288
|
+
int? CategoryId = null,
|
|
289
|
+
decimal? MinPrice = null,
|
|
290
|
+
decimal? MaxPrice = null,
|
|
291
|
+
int? Page = null,
|
|
292
|
+
int? PageSize = null);
|
|
293
|
+
|
|
294
|
+
public class PagedResult<T>
|
|
295
|
+
{
|
|
296
|
+
public IReadOnlyList<T> Items { get; init; } = Array.Empty<T>();
|
|
297
|
+
public int TotalCount { get; init; }
|
|
298
|
+
public int Page { get; init; }
|
|
299
|
+
public int PageSize { get; init; }
|
|
300
|
+
public int TotalPages { get; init; }
|
|
301
|
+
public bool HasNextPage => Page < TotalPages;
|
|
302
|
+
public bool HasPreviousPage => Page > 1;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
public class Product
|
|
306
|
+
{
|
|
307
|
+
public string Id { get; set; } = string.Empty;
|
|
308
|
+
public string Name { get; set; } = string.Empty;
|
|
309
|
+
public string Sku { get; set; } = string.Empty;
|
|
310
|
+
public decimal Price { get; set; }
|
|
311
|
+
public int CategoryId { get; set; }
|
|
312
|
+
public DateTime CreatedAt { get; set; }
|
|
313
|
+
public DateTime? UpdatedAt { get; set; }
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// Validators using FluentValidation
|
|
317
|
+
public class CreateProductRequestValidator : AbstractValidator<CreateProductRequest>
|
|
318
|
+
{
|
|
319
|
+
public CreateProductRequestValidator()
|
|
320
|
+
{
|
|
321
|
+
RuleFor(x => x.Name)
|
|
322
|
+
.NotEmpty().WithMessage("Name is required")
|
|
323
|
+
.MaximumLength(200).WithMessage("Name must not exceed 200 characters");
|
|
324
|
+
|
|
325
|
+
RuleFor(x => x.Sku)
|
|
326
|
+
.NotEmpty().WithMessage("SKU is required")
|
|
327
|
+
.MaximumLength(50).WithMessage("SKU must not exceed 50 characters")
|
|
328
|
+
.Matches(@"^[A-Z0-9\-]+$").WithMessage("SKU must contain only uppercase letters, numbers, and hyphens");
|
|
329
|
+
|
|
330
|
+
RuleFor(x => x.Price)
|
|
331
|
+
.GreaterThan(0).WithMessage("Price must be greater than 0");
|
|
332
|
+
|
|
333
|
+
RuleFor(x => x.CategoryId)
|
|
334
|
+
.GreaterThan(0).WithMessage("Category is required");
|
|
335
|
+
}
|
|
336
|
+
}
|