@jhm1909/ag-kit 0.1.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/.agent/ARCHITECTURE.md +189 -0
- package/.agent/known-registries.json +181 -0
- package/.agent/mcp_config.json +19 -0
- package/.agent/rules/clean-code.md +107 -0
- package/.agent/rules/documents.md +177 -0
- package/.agent/rules/git-workflow.md +68 -0
- package/.agent/rules/nano-banana.md +46 -0
- package/.agent/rules/research.md +35 -0
- package/.agent/rules/skill-loading.md +100 -0
- package/.agent/rules/skill-suggestion.md +47 -0
- package/.agent/rules/testing.md +52 -0
- package/.agent/rules/workflow-advisor.md +108 -0
- package/.agent/rules/workflow-skill-convention.md +127 -0
- package/.agent/skills/ai-engineer/SKILL.md +824 -0
- package/.agent/skills/ai-engineer/references/agentic-patterns.md +329 -0
- package/.agent/skills/ai-engineer/references/evaluation.md +493 -0
- package/.agent/skills/ai-engineer/references/llm.md +490 -0
- package/.agent/skills/ai-engineer/references/rag-advanced.md +444 -0
- package/.agent/skills/ai-engineer/references/serving-optimization.md +531 -0
- package/.agent/skills/ai-engineer/vector-db/README.md +137 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +41 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/backend-developer/SKILL.md +763 -0
- package/.agent/skills/backend-developer/references/general-patterns.md +65 -0
- package/.agent/skills/backend-developer/references/go-echo.md +68 -0
- package/.agent/skills/backend-developer/references/go-gin.md +76 -0
- package/.agent/skills/backend-developer/references/java-springboot.md +83 -0
- package/.agent/skills/backend-developer/references/node-express.md +64 -0
- package/.agent/skills/backend-developer/references/node-nestjs.md +69 -0
- package/.agent/skills/backend-developer/references/python-django.md +67 -0
- package/.agent/skills/backend-developer/references/python-fastapi.md +80 -0
- package/.agent/skills/blockchain-engineer/SKILL.md +975 -0
- package/.agent/skills/blockchain-engineer/references/deployment.md +28 -0
- package/.agent/skills/blockchain-engineer/references/evm.md +14 -0
- package/.agent/skills/blockchain-engineer/references/mechanisms.md +32 -0
- package/.agent/skills/blockchain-engineer/references/solidity.md +32 -0
- package/.agent/skills/business-analysis/SKILL.md +85 -0
- package/.agent/skills/business-analysis/references/best-practices/diagrams.md +141 -0
- package/.agent/skills/business-analysis/references/domains/ai-agent.md +94 -0
- package/.agent/skills/business-analysis/references/domains/blockchain-dapp.md +86 -0
- package/.agent/skills/business-analysis/references/domains/ecommerce.md +77 -0
- package/.agent/skills/business-analysis/references/domains/education.md +42 -0
- package/.agent/skills/business-analysis/references/domains/fintech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/fnb.md +82 -0
- package/.agent/skills/business-analysis/references/domains/healthtech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/internal-tools.md +38 -0
- package/.agent/skills/business-analysis/references/domains/marketplace.md +52 -0
- package/.agent/skills/business-analysis/references/domains/saas.md +36 -0
- package/.agent/skills/business-analysis/references/workflows/collaboration.md +41 -0
- package/.agent/skills/business-analysis/scripts/verify_mermaid.py +86 -0
- package/.agent/skills/business-analysis/templates/brd.md +46 -0
- package/.agent/skills/business-analysis/templates/change-request.md +41 -0
- package/.agent/skills/business-analysis/templates/prd-functional.md +38 -0
- package/.agent/skills/business-analysis/templates/use-case.md +40 -0
- package/.agent/skills/business-analysis/templates/user-story-detailed.md +36 -0
- package/.agent/skills/code-review/SKILL.md +113 -0
- package/.agent/skills/code-review/references/code-review-reception.md +209 -0
- package/.agent/skills/code-review/references/differential_review.md +59 -0
- package/.agent/skills/code-review/references/requesting-code-review.md +105 -0
- package/.agent/skills/code-review/references/spec_compliance.md +43 -0
- package/.agent/skills/code-review/references/verification-before-completion.md +139 -0
- package/.agent/skills/context-engineering/SKILL.md +68 -0
- package/.agent/skills/context-engineering/references/context-compression.md +84 -0
- package/.agent/skills/context-engineering/references/context-degradation.md +93 -0
- package/.agent/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/.agent/skills/context-engineering/references/context-optimization.md +82 -0
- package/.agent/skills/context-engineering/references/evaluation.md +89 -0
- package/.agent/skills/context-engineering/references/memory-systems.md +88 -0
- package/.agent/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/.agent/skills/context-engineering/references/project-development.md +97 -0
- package/.agent/skills/context-engineering/references/tool-design.md +86 -0
- package/.agent/skills/debugging/SKILL.md +60 -0
- package/.agent/skills/debugging/references/defense-in-depth.md +130 -0
- package/.agent/skills/debugging/references/root-cause-tracing.md +177 -0
- package/.agent/skills/debugging/references/systematic-debugging.md +295 -0
- package/.agent/skills/debugging/references/verification-before-completion.md +142 -0
- package/.agent/skills/designer/SKILL.md +159 -0
- package/.agent/skills/designer/concepts/apple-glass.md +48 -0
- package/.agent/skills/designer/concepts/aurora-gradients.md +26 -0
- package/.agent/skills/designer/concepts/bento-grids.md +14 -0
- package/.agent/skills/designer/concepts/claymorphism.md +27 -0
- package/.agent/skills/designer/concepts/neo-brutalism.md +32 -0
- package/.agent/skills/designer/data/app-interface.csv +31 -0
- package/.agent/skills/designer/data/charts.csv +26 -0
- package/.agent/skills/designer/data/colors.csv +162 -0
- package/.agent/skills/designer/data/design.csv +1776 -0
- package/.agent/skills/designer/data/icons.csv +106 -0
- package/.agent/skills/designer/data/landing.csv +35 -0
- package/.agent/skills/designer/data/products.csv +162 -0
- package/.agent/skills/designer/data/react-performance.csv +45 -0
- package/.agent/skills/designer/data/styles.csv +85 -0
- package/.agent/skills/designer/data/typography.csv +74 -0
- package/.agent/skills/designer/data/ui-reasoning.csv +162 -0
- package/.agent/skills/designer/data/ux-guidelines.csv +100 -0
- package/.agent/skills/designer/references/accessibility.md +172 -0
- package/.agent/skills/designer/references/branding.md +88 -0
- package/.agent/skills/designer/references/color-theory.md +139 -0
- package/.agent/skills/designer/references/creation.md +118 -0
- package/.agent/skills/designer/references/design-systems.md +219 -0
- package/.agent/skills/designer/references/frontend_design_aesthetics.md +57 -0
- package/.agent/skills/designer/references/layout.md +200 -0
- package/.agent/skills/designer/references/motion.md +92 -0
- package/.agent/skills/designer/references/review.md +100 -0
- package/.agent/skills/designer/references/trends.md +209 -0
- package/.agent/skills/designer/references/typography.md +190 -0
- package/.agent/skills/designer/scripts/remove_background.py +135 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/core.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/design_system.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/core.py +217 -0
- package/.agent/skills/designer/scripts/ui-search/design_system.py +1067 -0
- package/.agent/skills/designer/scripts/ui-search/search.py +114 -0
- package/.agent/skills/designer/templates/design-motion-spec.md +30 -0
- package/.agent/skills/devops-engineer/SKILL.md +90 -0
- package/.agent/skills/devops-engineer/docker-compose/README.md +47 -0
- package/.agent/skills/devops-engineer/references/ci-cd-pipelines.md +76 -0
- package/.agent/skills/devops-engineer/references/cloud-providers.md +57 -0
- package/.agent/skills/devops-engineer/references/codebase-normalization.md +104 -0
- package/.agent/skills/devops-engineer/references/container-orchestration.md +69 -0
- package/.agent/skills/devops-engineer/references/iac-tools.md +63 -0
- package/.agent/skills/devops-engineer/references/observability-security.md +45 -0
- package/.agent/skills/devops-engineer/references/vercel-supabase.md +17 -0
- package/.agent/skills/devops-engineer/templates/release-notes.md +8 -0
- package/.agent/skills/frontend-developer/SKILL.md +125 -0
- package/.agent/skills/frontend-developer/react-nextjs/README.md +90 -0
- package/.agent/skills/frontend-developer/references/angular.md +52 -0
- package/.agent/skills/frontend-developer/references/composition_patterns.md +60 -0
- package/.agent/skills/frontend-developer/references/core-performance.md +68 -0
- package/.agent/skills/frontend-developer/references/modern-signals.md +43 -0
- package/.agent/skills/frontend-developer/references/react_performance_rules.md +55 -0
- package/.agent/skills/frontend-developer/references/vue-nuxt.md +55 -0
- package/.agent/skills/frontend-developer/scripts/validate_compliance.py +65 -0
- package/.agent/skills/frontend-developer/threejs/README.md +89 -0
- package/.agent/skills/frontend-developer/threejs/animation.md +552 -0
- package/.agent/skills/frontend-developer/threejs/fundamentals.md +488 -0
- package/.agent/skills/frontend-developer/threejs/geometry.md +548 -0
- package/.agent/skills/frontend-developer/threejs/interaction.md +660 -0
- package/.agent/skills/frontend-developer/threejs/lighting.md +481 -0
- package/.agent/skills/frontend-developer/threejs/loaders.md +623 -0
- package/.agent/skills/frontend-developer/threejs/materials.md +520 -0
- package/.agent/skills/frontend-developer/threejs/postprocessing.md +602 -0
- package/.agent/skills/frontend-developer/threejs/router.json +181 -0
- package/.agent/skills/frontend-developer/threejs/shaders.md +642 -0
- package/.agent/skills/frontend-developer/threejs/textures.md +628 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/lead-architect/SKILL.md +85 -0
- package/.agent/skills/lead-architect/references/application-architecture.md +70 -0
- package/.agent/skills/lead-architect/references/infrastructure.md +51 -0
- package/.agent/skills/lead-architect/references/process.md +42 -0
- package/.agent/skills/lead-architect/references/system-architecture.md +62 -0
- package/.agent/skills/lead-architect/references/web-fullstack.md +82 -0
- package/.agent/skills/lead-architect/templates/adr.md +62 -0
- package/.agent/skills/lead-architect/templates/rfc.md +46 -0
- package/.agent/skills/lead-architect/templates/sdd.md +62 -0
- package/.agent/skills/lead-architect/templates/technical-spec.md +61 -0
- package/.agent/skills/marketer/SKILL.md +66 -0
- package/.agent/skills/marketer/remotion-best-practices/SKILL.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/3d.md +86 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/animations.md +29 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets.md +78 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/audio.md +172 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/can-decode.md +75 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/charts.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/compositions.md +146 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/display-captions.md +126 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/fonts.md +152 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/gifs.md +138 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/images.md +130 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/lottie.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-text.md +143 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/sequencing.md +106 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/timing.md +179 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transitions.md +122 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/trimming.md +53 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/videos.md +171 -0
- package/.agent/skills/mcp-builder/SKILL.md +76 -0
- package/.agent/skills/mcp-builder/references/evaluation.md +602 -0
- package/.agent/skills/mcp-builder/references/mcp_best_practices.md +249 -0
- package/.agent/skills/mcp-builder/references/node_mcp_server.md +970 -0
- package/.agent/skills/mcp-builder/references/python_mcp_server.md +719 -0
- package/.agent/skills/mobile-developer/SKILL.md +83 -0
- package/.agent/skills/mobile-developer/api-routes/SKILL.md +389 -0
- package/.agent/skills/mobile-developer/building-ui/SKILL.md +335 -0
- package/.agent/skills/mobile-developer/building-ui/references/animations.md +220 -0
- package/.agent/skills/mobile-developer/building-ui/references/controls.md +270 -0
- package/.agent/skills/mobile-developer/building-ui/references/form-sheet.md +227 -0
- package/.agent/skills/mobile-developer/building-ui/references/gradients.md +106 -0
- package/.agent/skills/mobile-developer/building-ui/references/icons.md +213 -0
- package/.agent/skills/mobile-developer/building-ui/references/media.md +198 -0
- package/.agent/skills/mobile-developer/building-ui/references/route-structure.md +229 -0
- package/.agent/skills/mobile-developer/building-ui/references/search.md +248 -0
- package/.agent/skills/mobile-developer/building-ui/references/storage.md +121 -0
- package/.agent/skills/mobile-developer/building-ui/references/tabs.md +368 -0
- package/.agent/skills/mobile-developer/building-ui/references/visual-effects.md +197 -0
- package/.agent/skills/mobile-developer/building-ui/references/webgpu-three.md +605 -0
- package/.agent/skills/mobile-developer/cicd-workflows/SKILL.md +107 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/fetch.js +109 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/package.json +11 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/validate.js +84 -0
- package/.agent/skills/mobile-developer/data-fetching/SKILL.md +508 -0
- package/.agent/skills/mobile-developer/deployment/SKILL.md +207 -0
- package/.agent/skills/mobile-developer/deployment/references/app-store-metadata.md +479 -0
- package/.agent/skills/mobile-developer/deployment/references/ios-app-store.md +355 -0
- package/.agent/skills/mobile-developer/deployment/references/play-store.md +246 -0
- package/.agent/skills/mobile-developer/deployment/references/testflight.md +58 -0
- package/.agent/skills/mobile-developer/deployment/references/workflows.md +200 -0
- package/.agent/skills/mobile-developer/dev-client/SKILL.md +181 -0
- package/.agent/skills/mobile-developer/tailwind-setup/SKILL.md +501 -0
- package/.agent/skills/mobile-developer/upgrading-expo/SKILL.md +116 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/new-architecture.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-19.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-compiler.md +59 -0
- package/.agent/skills/mobile-developer/use-dom/SKILL.md +434 -0
- package/.agent/skills/modern-python/SKILL.md +122 -0
- package/.agent/skills/project-manager/SKILL.md +110 -0
- package/.agent/skills/project-manager/references/ba-collaboration.md +62 -0
- package/.agent/skills/project-manager/references/discovery_process.md +52 -0
- package/.agent/skills/project-manager/references/jobs_to_be_done.md +51 -0
- package/.agent/skills/project-manager/references/prd_development.md +52 -0
- package/.agent/skills/project-manager/references/rules-guide.md +55 -0
- package/.agent/skills/project-manager/references/skill-creation.md +98 -0
- package/.agent/skills/project-manager/references/strategic-frameworks.md +62 -0
- package/.agent/skills/project-manager/references/task-decomposition.md +194 -0
- package/.agent/skills/project-manager/references/workflows-guide.md +44 -0
- package/.agent/skills/project-manager/router.json +160 -0
- package/.agent/skills/project-manager/scripts/compare_skill.py +177 -0
- package/.agent/skills/project-manager/scripts/encoding_utils.py +36 -0
- package/.agent/skills/project-manager/scripts/init_skill.py +190 -0
- package/.agent/skills/project-manager/scripts/quick_validate.py +123 -0
- package/.agent/skills/project-manager/templates/pm-strategy-one-pager.md +6 -0
- package/.agent/skills/project-manager/templates/prd-strategic.md +38 -0
- package/.agent/skills/project-manager/templates/skill-questionnaire.md +118 -0
- package/.agent/skills/project-manager/templates/user-story-simple.md +14 -0
- package/.agent/skills/prompt-engineer/SKILL.md +319 -0
- package/.agent/skills/prompt-engineer/skill-creator/README.md +47 -0
- package/.agent/skills/qa-tester/SKILL.md +142 -0
- package/.agent/skills/qa-tester/assets/README.md +8 -0
- package/.agent/skills/qa-tester/references/accessibility_testing.md +35 -0
- package/.agent/skills/qa-tester/references/agent_browser.md +38 -0
- package/.agent/skills/qa-tester/references/automation/api_testing.md +23 -0
- package/.agent/skills/qa-tester/references/automation/best_practices.md +14 -0
- package/.agent/skills/qa-tester/references/automation/jest_vitest.md +26 -0
- package/.agent/skills/qa-tester/references/automation/playwright.md +30 -0
- package/.agent/skills/qa-tester/references/e2e_testing.md +46 -0
- package/.agent/skills/qa-tester/references/integration_testing.md +39 -0
- package/.agent/skills/qa-tester/references/performance_testing.md +44 -0
- package/.agent/skills/qa-tester/references/property_based_testing.md +44 -0
- package/.agent/skills/qa-tester/references/security_audit.md +53 -0
- package/.agent/skills/qa-tester/references/security_testing.md +30 -0
- package/.agent/skills/qa-tester/references/sharp_edges.md +49 -0
- package/.agent/skills/qa-tester/references/static_analysis.md +52 -0
- package/.agent/skills/qa-tester/references/supply_chain_audit.md +54 -0
- package/.agent/skills/qa-tester/references/test_case_standards.md +96 -0
- package/.agent/skills/qa-tester/references/test_report_template.md +32 -0
- package/.agent/skills/qa-tester/references/unit_testing.md +50 -0
- package/.agent/skills/qa-tester/references/visual_testing.md +32 -0
- package/.agent/skills/qa-tester/templates/uat-plan.md +34 -0
- package/.agent/skills/research-first/SKILL.md +118 -0
- package/.agent/skills-manifest.json +264 -0
- package/.agent/workflows/absorb.md +176 -0
- package/.agent/workflows/bootstrap.md +91 -0
- package/.agent/workflows/brainstorm.md +168 -0
- package/.agent/workflows/break-tasks.md +77 -0
- package/.agent/workflows/commit.md +349 -0
- package/.agent/workflows/custom-behavior.md +64 -0
- package/.agent/workflows/debug.md +65 -0
- package/.agent/workflows/development.md +49 -0
- package/.agent/workflows/documentation.md +221 -0
- package/.agent/workflows/gen-tests.md +53 -0
- package/.agent/workflows/guide.md +196 -0
- package/.agent/workflows/implement-feature.md +182 -0
- package/.agent/workflows/install-skill.md +193 -0
- package/.agent/workflows/qa.md +54 -0
- package/.agent/workflows/ui-ux-design.md +108 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/cli/index.js +345 -0
- package/cli/migrate-skills.js +113 -0
- package/cli/verify.js +291 -0
- package/package.json +49 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# General Backend Patterns & Architecture
|
|
2
|
+
|
|
3
|
+
# General Backend Patterns & Architecture
|
|
4
|
+
|
|
5
|
+
> [!NOTE]
|
|
6
|
+
> This guide covers **Applied Architecture** (Implementation details). For high-level System Design, Decision Records (ADRs), and detailed Cloud Infrastructure, refer to the **[Lead Architect Skill](../lead-architect/SKILL.md)**.
|
|
7
|
+
|
|
8
|
+
This reference covers universal principles applicable across all languages and frameworks.
|
|
9
|
+
|
|
10
|
+
## 1. Architectural Patterns
|
|
11
|
+
|
|
12
|
+
### Clean Architecture / Hexagonal / Onion
|
|
13
|
+
|
|
14
|
+
Separation of concerns is paramount.
|
|
15
|
+
|
|
16
|
+
- **Domain Layer**: Pure business logic. No dependencies on frameworks or DBs.
|
|
17
|
+
- **Application Layer**: Use cases / Services. Orchestrates the domain.
|
|
18
|
+
- **Adapters (Interface) Layer**: Controllers, API Handlers, CLI.
|
|
19
|
+
- **Infrastructure Layer**: DB Implementations, External APIs.
|
|
20
|
+
|
|
21
|
+
### Domain-Driven Design (DDD)
|
|
22
|
+
|
|
23
|
+
- **Entities**: Objects with identity (e.g., User, Order).
|
|
24
|
+
- **Value Objects**: Immutable objects defined by attributes (e.g., Email, Money).
|
|
25
|
+
- **Aggregates**: Clusters of objects treated as a unit (Order + OrderItems).
|
|
26
|
+
- **Repositories**: Interface for collection-like access to Aggregates.
|
|
27
|
+
|
|
28
|
+
## 2. Database Design
|
|
29
|
+
|
|
30
|
+
### Relational (PostgreSQL, MySQL)
|
|
31
|
+
|
|
32
|
+
- **Naming**: `snake_case` for tables and columns. Plural table names (`users`, `orders`).
|
|
33
|
+
- **Primary Keys**: Use UUIDs (v7 preferred for sorting) or BigInt. Avoid auto-increment for distributed systems.
|
|
34
|
+
- **Foreign Keys**: Always define constraints. Index FK columns.
|
|
35
|
+
- **Transactions**: Use transactions for atomic operations involving multiple writes.
|
|
36
|
+
|
|
37
|
+
### NoSQL (MongoDB)
|
|
38
|
+
|
|
39
|
+
- **Embedding vs. Referencing**:
|
|
40
|
+
- **Embed**: Used together, read together, low cardinality (e.g., OrderItems in Order).
|
|
41
|
+
- **Reference**: High cardinality, updated independently (e.g., User in Order).
|
|
42
|
+
- **Schema Validation**: Use JSON Schema validation on the collection level.
|
|
43
|
+
|
|
44
|
+
### Caching (Redis)
|
|
45
|
+
|
|
46
|
+
- **Cache-Aside (Lazy Loading)**: App checks cache -> Miss -> Read DB -> Set Cache.
|
|
47
|
+
- **TTL**: Always set a Time-To-Live. avoid permanent keys unless necessary.
|
|
48
|
+
- **Keys**: Use namespaced keys `app:resource:id` (e.g., `shop:product:123`).
|
|
49
|
+
|
|
50
|
+
## 3. Security Best Practices (OWASP)
|
|
51
|
+
|
|
52
|
+
> **Advanced Security**: For Threat Modeling, Zero Trust Architecture, and compliance auditing, see `lead-architect/references/infrastructure.md`.
|
|
53
|
+
|
|
54
|
+
- **Injection**: Use parameterized queries (SQL) or ORMs. Never string concat user input.
|
|
55
|
+
- **Auth**:
|
|
56
|
+
- **Passwords**: Bcrypt, Argon2. Never MD5/SHA1.
|
|
57
|
+
- **JWT**: Short-lived access tokens (15m), Long-lived refresh tokens.
|
|
58
|
+
- **Rate Limiting**: Implement Global and Per-User rate limits (Redis Token Bucket).
|
|
59
|
+
- **CORS**: Restrict `Access-Control-Allow-Origin` to known domains.
|
|
60
|
+
|
|
61
|
+
## 4. Scalability
|
|
62
|
+
|
|
63
|
+
- **Statelessness**: Application servers should be stateless. Store session data in Redis.
|
|
64
|
+
- **Async Processing**: Offload heavy tasks (Email, Image Processing) to message queues (RabbitMQ, Kafka, BullMQ, Celery).
|
|
65
|
+
- **Idempotency**: API endpoints (especially POST/payment) should handle duplicate requests gracefully.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Go - Echo Best Practices
|
|
2
|
+
|
|
3
|
+
**Official Documentation**: [echo.labstack.com](https://echo.labstack.com/)
|
|
4
|
+
|
|
5
|
+
## 1. Golden Rules
|
|
6
|
+
|
|
7
|
+
1. **Interfaces**: Define interfaces for your Services and Repositories to make handlers testable.
|
|
8
|
+
2. **Middleware**: Use Echo's robust middleware suite (Recover, Logger, CORS).
|
|
9
|
+
3. **Error Handling**: Use `echo.NewHTTPError` to return standard errors that middleware can log.
|
|
10
|
+
|
|
11
|
+
## 2. Folder Structure
|
|
12
|
+
|
|
13
|
+
Common Domain-Driven structure.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
cmd/server/main.go
|
|
17
|
+
internal/
|
|
18
|
+
├── user/
|
|
19
|
+
│ ├── delivery/
|
|
20
|
+
│ │ └── http/
|
|
21
|
+
│ │ └── handler.go
|
|
22
|
+
│ ├── usecase/
|
|
23
|
+
│ │ └── service.go
|
|
24
|
+
│ ├── repository/
|
|
25
|
+
│ │ └── pg_repo.go
|
|
26
|
+
│ └── domain.go # Interface definitions & Models
|
|
27
|
+
pkg/
|
|
28
|
+
└── database/
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 3. Code Patterns
|
|
32
|
+
|
|
33
|
+
### Handlers
|
|
34
|
+
|
|
35
|
+
Bind and Validate in one step if using custom validator.
|
|
36
|
+
|
|
37
|
+
```go
|
|
38
|
+
type UserDTO struct {
|
|
39
|
+
Email string `json:"email" validate:"required,email"`
|
|
40
|
+
Name string `json:"name" validate:"required"`
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
func (h *UserHandler) Register(c echo.Context) error {
|
|
44
|
+
ctx := c.Request().Context()
|
|
45
|
+
var user UserDTO
|
|
46
|
+
if err := c.Bind(&user); err != nil {
|
|
47
|
+
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
|
|
48
|
+
}
|
|
49
|
+
if err := c.Validate(&user); err != nil {
|
|
50
|
+
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Call usecase...
|
|
54
|
+
return c.JSON(http.StatusCreated, user)
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 4. Security
|
|
59
|
+
|
|
60
|
+
- **Middleware**: Always Include `middleware.Recover()` and `middleware.Logger()`.
|
|
61
|
+
- **CORS**: Be specific.
|
|
62
|
+
|
|
63
|
+
```go
|
|
64
|
+
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
|
|
65
|
+
AllowOrigins: []string{"https://labstack.com"},
|
|
66
|
+
AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept},
|
|
67
|
+
}))
|
|
68
|
+
```
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Go - Gin Best Practices
|
|
2
|
+
|
|
3
|
+
**Official Documentation**: [gin-gonic.com](https://gin-gonic.com/)
|
|
4
|
+
|
|
5
|
+
## 1. Golden Rules
|
|
6
|
+
|
|
7
|
+
1. **Error Handling**: Go has no exceptions. Return errors explicitly. Use custom error types/constants.
|
|
8
|
+
2. **Context**: Always pass `context.Context` to DB and Service layers for timeout/cancellation control.
|
|
9
|
+
3. **Structure**: Avoid global variables. Use dependency injection (manual or fx) for handlers.
|
|
10
|
+
|
|
11
|
+
## 2. Folder Structure (Standard Go Layout)
|
|
12
|
+
|
|
13
|
+
Based on [golang-standards/project-layout](https://github.com/golang-standards/project-layout)
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
cmd/
|
|
17
|
+
└── api/
|
|
18
|
+
└── main.go # Entry point
|
|
19
|
+
internal/
|
|
20
|
+
├── domain/ # Enterprise logic (Entities, Interfaces)
|
|
21
|
+
│ └── user.go
|
|
22
|
+
├── handler/ # HTTP Handlers (Gin specific)
|
|
23
|
+
│ └── user_handler.go
|
|
24
|
+
├── service/ # Business Logic (Implementation of Interfaces)
|
|
25
|
+
│ └── user_service.go
|
|
26
|
+
└── repository/ # DB Access (Implementation of Interfaces)
|
|
27
|
+
└── postgres/
|
|
28
|
+
└── user_repo.go
|
|
29
|
+
pkg/ # Publicly sharable code
|
|
30
|
+
└── utils/
|
|
31
|
+
go.mod
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 3. Code Patterns
|
|
35
|
+
|
|
36
|
+
### Validation (Binding)
|
|
37
|
+
|
|
38
|
+
Use `binding` tag (validator v10) in structs.
|
|
39
|
+
|
|
40
|
+
```go
|
|
41
|
+
type CreateUserRequest struct {
|
|
42
|
+
Email string `json:"email" binding:"required,email"`
|
|
43
|
+
Password string `json:"password" binding:"required,min=8"`
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
func (h *UserHandler) Create(c *gin.Context) {
|
|
47
|
+
var req CreateUserRequest
|
|
48
|
+
if err := c.ShouldBindJSON(&req); err != nil {
|
|
49
|
+
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
// ... call service
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### DB Access (GORM or sqlc)
|
|
57
|
+
|
|
58
|
+
- **GORM**: Good for rapid dev.
|
|
59
|
+
- **sqlc**: Generates type-safe code from SQL. Preferred for performance/control.
|
|
60
|
+
|
|
61
|
+
```go
|
|
62
|
+
// Direct SQL/sqlc style is clearer than complex ORM magic
|
|
63
|
+
func (r *UserRepository) GetByID(ctx context.Context, id int64) (*domain.User, error) {
|
|
64
|
+
row := r.db.QueryRowContext(ctx, "SELECT id, email FROM users WHERE id = $1", id)
|
|
65
|
+
var u domain.User
|
|
66
|
+
if err := row.Scan(&u.ID, &u.Email); err != nil {
|
|
67
|
+
return nil, err
|
|
68
|
+
}
|
|
69
|
+
return &u, nil
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 4. Security
|
|
74
|
+
|
|
75
|
+
- **Gin Mode**: Set `GIN_MODE=release` in production.
|
|
76
|
+
- **Trusted Proxies**: Configure `router.SetTrustedProxies()` if behind Nginx/LoadBalancer.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Java - Spring Boot Best Practices
|
|
2
|
+
|
|
3
|
+
**Official Documentation**: [spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) - The Enterprise Standard.
|
|
4
|
+
|
|
5
|
+
## 1. Golden Rules
|
|
6
|
+
|
|
7
|
+
1. **Annotations**: Rely on Spring magic (`@Service`, `@Repository`, `@Transactional`). Don't fight the framework.
|
|
8
|
+
2. **Lombok**: Use Lombok (`@Data`, `@Builder`, `@RequiredArgsConstructor`) to reduce boilerplate.
|
|
9
|
+
3. **Layered Architecture**: Controller -> Service -> Repository. Never call Repository from Controller.
|
|
10
|
+
|
|
11
|
+
## 2. Folder Structure (Maven/Gradle Standard)
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
src/main/java/com/example/project/
|
|
15
|
+
├── config/ # SecurityConfig, AppConfig
|
|
16
|
+
├── controller/ # REST Endpoints
|
|
17
|
+
│ └── UserController.java
|
|
18
|
+
├── service/ # Business Logic
|
|
19
|
+
│ └── UserService.java
|
|
20
|
+
├── repository/ # JPA Repositories
|
|
21
|
+
│ └── UserRepository.java
|
|
22
|
+
├── model/ # JPA Entities
|
|
23
|
+
│ └── User.java
|
|
24
|
+
├── dto/ # Data Transfer Objects
|
|
25
|
+
│ └── UserDTO.java
|
|
26
|
+
└── exception/ # Global Exception Handling
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 3. Code Patterns
|
|
30
|
+
|
|
31
|
+
### Validation (Bean Validation)
|
|
32
|
+
|
|
33
|
+
Use `jakarta.validation` annotations on DTOs.
|
|
34
|
+
|
|
35
|
+
```java
|
|
36
|
+
@Data
|
|
37
|
+
public class UserDTO {
|
|
38
|
+
@NotNull
|
|
39
|
+
@Email
|
|
40
|
+
private String email;
|
|
41
|
+
|
|
42
|
+
@Size(min = 8)
|
|
43
|
+
private String password;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Controller
|
|
47
|
+
@PostMapping
|
|
48
|
+
public ResponseEntity<User> create(@Valid @RequestBody UserDTO userDto) {
|
|
49
|
+
// ...
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Database (Spring Data JPA)
|
|
54
|
+
|
|
55
|
+
Define Interfaces extending `JpaRepository`.
|
|
56
|
+
|
|
57
|
+
```java
|
|
58
|
+
public interface UserRepository extends JpaRepository<User, Long> {
|
|
59
|
+
Optional<User> findByEmail(String email);
|
|
60
|
+
|
|
61
|
+
@Query("SELECT u FROM User u WHERE u.isActive = true")
|
|
62
|
+
List<User> findAllActive();
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 4. Security (Spring Security)
|
|
67
|
+
|
|
68
|
+
- **Configuration**: Use `SecurityFilterChain` bean (Modern Spring Security 6+).
|
|
69
|
+
- **Passwords**: `BCryptPasswordEncoder` is the standard.
|
|
70
|
+
|
|
71
|
+
```java
|
|
72
|
+
@Bean
|
|
73
|
+
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
|
74
|
+
http
|
|
75
|
+
.csrf(csrf -> csrf.disable()) // For stateless REST APIs
|
|
76
|
+
.sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
|
|
77
|
+
.authorizeHttpRequests(auth -> auth
|
|
78
|
+
.requestMatchers("/api/auth/**").permitAll()
|
|
79
|
+
.anyRequest().authenticated()
|
|
80
|
+
);
|
|
81
|
+
return http.build();
|
|
82
|
+
}
|
|
83
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Node.js - Express.js Best Practices
|
|
2
|
+
|
|
3
|
+
**Official Documentation**: [expressjs.com](https://expressjs.com/) - Consult for Middleware syntax and Router API.
|
|
4
|
+
|
|
5
|
+
## 1. Golden Rules
|
|
6
|
+
|
|
7
|
+
1. **Always use Async/Await**: Avoid strict callbacks. Use `express-async-errors` (or Node 20+ support) to handle async errors globally.
|
|
8
|
+
2. **Environment Variables**: Never hardcode config. Use strict parsing (e.g., `dotenv` + `envalid`/`zod`).
|
|
9
|
+
3. **Middleware Order**: Global Middleware (Cors/Helmet) -> Routes -> 404 Handler -> Global Error Handler.
|
|
10
|
+
|
|
11
|
+
## 2. Folder Structure (Feature-based)
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
src/
|
|
15
|
+
├── config/ # Environment variables & constants
|
|
16
|
+
├── modules/ # Feature modules
|
|
17
|
+
│ ├── users/
|
|
18
|
+
│ │ ├── users.controller.ts # Route definitions
|
|
19
|
+
│ │ ├── users.service.ts # Business logic
|
|
20
|
+
│ │ ├── users.repository.ts # DB access (TypeORM/Prisma)
|
|
21
|
+
│ │ └── dtos/ # Validation classes
|
|
22
|
+
│ └── auth/
|
|
23
|
+
├── shared/ # Shared utilities, middlewares, guards
|
|
24
|
+
│ ├── middlewares/
|
|
25
|
+
│ └── utils/
|
|
26
|
+
├── app.ts # App cleanup & middleware setup
|
|
27
|
+
└── server.ts # Entry point
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 3. Code Patterns
|
|
31
|
+
|
|
32
|
+
### Validation (Zod)
|
|
33
|
+
|
|
34
|
+
Use Zod for strict runtime validation of request bodies.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { z } from "zod";
|
|
38
|
+
|
|
39
|
+
export const CreateUserSchema = z.object({
|
|
40
|
+
email: z.string().email(),
|
|
41
|
+
password: z.string().min(8),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Use in middleware...
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Error Handling
|
|
48
|
+
|
|
49
|
+
Centralize error handling with a custom Error class.
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// middleware/error.middleware.ts
|
|
53
|
+
export const errorHandler = (err, req, res, next) => {
|
|
54
|
+
const statusCode = err.statusCode || 500;
|
|
55
|
+
const message = err.message || "Internal Server Error";
|
|
56
|
+
res.status(statusCode).json({ status: "error", message });
|
|
57
|
+
};
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 4. Security (Helmet & CORS)
|
|
61
|
+
|
|
62
|
+
- **Helmet**: Mandatory. `app.use(helmet())`.
|
|
63
|
+
- **CORS**: whitelist specific origins.
|
|
64
|
+
- **Rate Limit**: `express-rate-limit` for public endpoints.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Node.js - NestJS Best Practices
|
|
2
|
+
|
|
3
|
+
**Official Documentation**: [docs.nestjs.com](https://docs.nestjs.com/) - This is the BIBLE. Follow it strictly.
|
|
4
|
+
|
|
5
|
+
## 1. Golden Rules
|
|
6
|
+
|
|
7
|
+
1. **Dependency Injection (DI)**: Everything is a Provider (Injectable). Never instantiate services manually with `new Service()`.
|
|
8
|
+
2. **Modules**: Organize code by domain `Modules` (UserModule, AuthModule). Use `SharedModule` for utilities.
|
|
9
|
+
3. **DTOs**: Use Classes with `class-validator` decorators for all inputs.
|
|
10
|
+
|
|
11
|
+
## 2. Folder Structure (Standard NestJS)
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
src/
|
|
15
|
+
├── app.module.ts # Root module
|
|
16
|
+
├── main.ts # Entry point
|
|
17
|
+
├── modules/
|
|
18
|
+
│ ├── users/
|
|
19
|
+
│ │ ├── users.module.ts
|
|
20
|
+
│ │ ├── users.controller.ts
|
|
21
|
+
│ │ ├── users.service.ts
|
|
22
|
+
│ │ └── dto/
|
|
23
|
+
│ │ └── create-user.dto.ts
|
|
24
|
+
│ └── auth/
|
|
25
|
+
└── common/ # Interceptors, Filters, Guards, Decorators
|
|
26
|
+
├── filters/
|
|
27
|
+
├── guards/
|
|
28
|
+
└── pipes/
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 3. Code Patterns
|
|
32
|
+
|
|
33
|
+
### Validation (Pipes)
|
|
34
|
+
|
|
35
|
+
Enable global validation pipe in `main.ts`.
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
// main.ts
|
|
39
|
+
app.useGlobalPipes(
|
|
40
|
+
new ValidationPipe({
|
|
41
|
+
whitelist: true, // Strip properties not in DTO
|
|
42
|
+
forbidNonWhitelisted: true, // Throw error if extra props sent
|
|
43
|
+
transform: true, // Auto-transform payloads to DTO instances
|
|
44
|
+
}),
|
|
45
|
+
);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Configuration
|
|
49
|
+
|
|
50
|
+
Use `@nestjs/config` for environment variables. Ensure validation with `joi` or custom validate function.
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
ConfigModule.forRoot({
|
|
54
|
+
isGlobal: true,
|
|
55
|
+
validationSchema: Joi.object({
|
|
56
|
+
DATABASE_URL: Joi.string().required(),
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Database (TypeORM / Prisma)
|
|
62
|
+
|
|
63
|
+
- **Prisma**: Preferred for type-safety. Create a `PrismaService` extending `PrismaClient` and `OnModuleInit`.
|
|
64
|
+
- **TypeORM**: Use standard Repository pattern provided by `@nestjs/typeorm`.
|
|
65
|
+
|
|
66
|
+
## 4. Security
|
|
67
|
+
|
|
68
|
+
- **Guards**: Use `@UseGuards(JwtAuthGuard)` for protected routes.
|
|
69
|
+
- **Interceptors**: Use `ClassSerializerInterceptor` to automatically exclude `@Exclude()` fields (like password) from responses.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Python - Django Best Practices
|
|
2
|
+
|
|
3
|
+
**Official Documentation**: [docs.djangoproject.com](https://docs.djangoproject.com/) - The gold standard of documentation.
|
|
4
|
+
|
|
5
|
+
## 1. Golden Rules
|
|
6
|
+
|
|
7
|
+
1. **Batteries Included**: Use reliable built-in features (Auth, Admin, ORM) before 3rd party libs.
|
|
8
|
+
2. **Fat Models, Thin Views**: Put business logic in Models or separate Service layer (`services.py`), not in Views.
|
|
9
|
+
3. **Class Based Views (CBV) vs DRF**: For APIs, use **Django Rest Framework (DRF)**.
|
|
10
|
+
|
|
11
|
+
## 2. Folder Structure (Standard Layout)
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
project_root/
|
|
15
|
+
├── manage.py
|
|
16
|
+
├── config/ # Project settings (replaces default 'project_name' folder)
|
|
17
|
+
│ ├── settings.py
|
|
18
|
+
│ ├── urls.py
|
|
19
|
+
│ └── wsgi.py
|
|
20
|
+
├── apps/ # Functionality based apps
|
|
21
|
+
│ ├── users/
|
|
22
|
+
│ │ ├── models.py
|
|
23
|
+
│ │ ├── serializers.py # DRF DTOs
|
|
24
|
+
│ │ ├── views.py
|
|
25
|
+
│ │ ├── urls.py
|
|
26
|
+
│ │ └── services.py # Business logic
|
|
27
|
+
│ └── products/
|
|
28
|
+
└── requirements.txt
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 3. Code Patterns (DRF)
|
|
32
|
+
|
|
33
|
+
### Serializers (Validation)
|
|
34
|
+
|
|
35
|
+
Use `ModelSerializer` for DB-backed APIs, `Serializer` for non-DB inputs.
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
from rest_framework import serializers
|
|
39
|
+
from .models import User
|
|
40
|
+
|
|
41
|
+
class UserSerializer(serializers.ModelSerializer):
|
|
42
|
+
class Meta:
|
|
43
|
+
model = User
|
|
44
|
+
fields = ['id', 'email', 'username']
|
|
45
|
+
read_only_fields = ['id']
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Views (ViewSets)
|
|
49
|
+
|
|
50
|
+
Prefer `ModelViewSet` for standard CRUD. Use `APIView` for custom logic.
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from rest_framework import viewsets
|
|
54
|
+
from .models import User
|
|
55
|
+
from .serializers import UserSerializer
|
|
56
|
+
|
|
57
|
+
class UserViewSet(viewsets.ModelViewSet):
|
|
58
|
+
queryset = User.objects.all()
|
|
59
|
+
serializer_class = UserSerializer
|
|
60
|
+
permission_classes = [IsAuthenticated]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 4. Security
|
|
64
|
+
|
|
65
|
+
- **Settings**: `DEBUG = False` in production.
|
|
66
|
+
- **Secrets**: Use `python-decouple` or `django-environ` for `.env` files.
|
|
67
|
+
- **Middleware**: `SecurityMiddleware`, `CsrfViewMiddleware` (automatically included, do not remove).
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Python - FastAPI Best Practices
|
|
2
|
+
|
|
3
|
+
**Official Documentation**: [fastapi.tiangolo.com](https://fastapi.tiangolo.com/) - Essential for Pydantic models and Dependency Injection.
|
|
4
|
+
|
|
5
|
+
## 1. Golden Rules
|
|
6
|
+
|
|
7
|
+
1. **Strict Pydantic Models**: Every Request body and Response model must be a Pydantic schema.
|
|
8
|
+
2. **Dependency Injection**: Use `Depends` for Database sessions, Auth, and Services.
|
|
9
|
+
3. **Async/Await**: Use `async def` for I/O bound operations (DB, API calls). Use `def` for CPU bound to run in threadpool.
|
|
10
|
+
|
|
11
|
+
## 2. Folder Structure
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
src/
|
|
15
|
+
├── app/
|
|
16
|
+
│ ├── api/ # Router/Endpoints
|
|
17
|
+
│ │ ├── v1/
|
|
18
|
+
│ │ ├── endpoints/
|
|
19
|
+
│ │ ├── users.py
|
|
20
|
+
│ │ └── login.py
|
|
21
|
+
│ ├── core/ # Config, Security, Events
|
|
22
|
+
│ │ ├── config.py
|
|
23
|
+
│ │ └── security.py
|
|
24
|
+
│ ├── crud/ # DB operations (Repository pattern)
|
|
25
|
+
│ │ └── crud_user.py
|
|
26
|
+
│ ├── models/ # SQLAlchemy/SQLModel tables
|
|
27
|
+
│ │ └── user.py
|
|
28
|
+
│ ├── schemas/ # Pydantic models (DTOs)
|
|
29
|
+
│ │ └── user.py
|
|
30
|
+
│ └── main.py
|
|
31
|
+
└── algembic/ # Migrations
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 3. Code Patterns
|
|
35
|
+
|
|
36
|
+
### Validation (Pydantic)
|
|
37
|
+
|
|
38
|
+
Separate `Base`, `Create`, `Update`, and `Response` schemas.
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from pydantic import BaseModel, EmailStr
|
|
42
|
+
|
|
43
|
+
class UserBase(BaseModel):
|
|
44
|
+
email: EmailStr
|
|
45
|
+
is_active: bool = True
|
|
46
|
+
|
|
47
|
+
class UserCreate(UserBase):
|
|
48
|
+
password: str
|
|
49
|
+
|
|
50
|
+
class UserResponse(UserBase):
|
|
51
|
+
id: int
|
|
52
|
+
class Config:
|
|
53
|
+
from_attributes = True # for ORM compatibility
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Dependency Injection (DB Session)
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
# deps.py
|
|
60
|
+
def get_db():
|
|
61
|
+
db = SessionLocal()
|
|
62
|
+
try:
|
|
63
|
+
yield db
|
|
64
|
+
finally:
|
|
65
|
+
db.close()
|
|
66
|
+
|
|
67
|
+
# usage in route
|
|
68
|
+
@router.post("/", response_model=schemas.UserResponse)
|
|
69
|
+
def create_user(
|
|
70
|
+
user: schemas.UserCreate,
|
|
71
|
+
db: Session = Depends(get_db)
|
|
72
|
+
):
|
|
73
|
+
return crud.create_user(db=db, user=user)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 4. Security
|
|
77
|
+
|
|
78
|
+
- **OAuth2**: Use `FastAPI.security.OAuth2PasswordBearer` for standard flows.
|
|
79
|
+
- **Password Hashing**: Use `passlib[bcrypt]`.
|
|
80
|
+
- **CORS**: `CORSMiddleware` configured in `main.py`.
|