moai-adk 0.35.1__py3-none-any.whl
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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +10 -0
- moai_adk/__main__.py +199 -0
- moai_adk/cli/__init__.py +6 -0
- moai_adk/cli/commands/__init__.py +17 -0
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +272 -0
- moai_adk/cli/commands/init.py +372 -0
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +104 -0
- moai_adk/cli/commands/update.py +2686 -0
- moai_adk/cli/main.py +13 -0
- moai_adk/cli/prompts/__init__.py +5 -0
- moai_adk/cli/prompts/init_prompts.py +219 -0
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +1 -0
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +19 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +244 -0
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/__init__.py +19 -0
- moai_adk/core/diagnostics/slash_commands.py +159 -0
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +31 -0
- moai_adk/core/git/branch.py +25 -0
- moai_adk/core/git/branch_manager.py +129 -0
- moai_adk/core/git/checkpoint.py +134 -0
- moai_adk/core/git/commit.py +67 -0
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +79 -0
- moai_adk/core/git/manager.py +216 -0
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +605 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +1 -0
- moai_adk/core/project/backup_utils.py +70 -0
- moai_adk/core/project/checker.py +300 -0
- moai_adk/core/project/detector.py +293 -0
- moai_adk/core/project/initializer.py +387 -0
- moai_adk/core/project/phase_executor.py +716 -0
- moai_adk/core/project/validator.py +139 -0
- moai_adk/core/quality/__init__.py +6 -0
- moai_adk/core/quality/trust_checker.py +377 -0
- moai_adk/core/quality/validators/__init__.py +6 -0
- moai_adk/core/quality/validators/base_validator.py +19 -0
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +7 -0
- moai_adk/core/template/backup.py +174 -0
- moai_adk/core/template/config.py +191 -0
- moai_adk/core/template/languages.py +43 -0
- moai_adk/core/template/merger.py +233 -0
- moai_adk/core/template/processor.py +1200 -0
- moai_adk/core/template_engine.py +310 -0
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +557 -0
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
- moai_adk/templates/.gitignore +222 -0
- moai_adk/templates/.mcp.json +13 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
- moai_adk/templates/.moai/config/sections/system.yaml +24 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +642 -0
- moai_adk/utils/__init__.py +30 -0
- moai_adk/utils/banner.py +38 -0
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +147 -0
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.35.1.dist-info/METADATA +3018 -0
- moai_adk-0.35.1.dist-info/RECORD +502 -0
- moai_adk-0.35.1.dist-info/WHEEL +4 -0
- moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
- moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Database Domain Modules
|
|
2
|
+
|
|
3
|
+
This directory contains specialized modules for advanced database patterns and implementations across multiple database systems.
|
|
4
|
+
|
|
5
|
+
## Module Structure
|
|
6
|
+
|
|
7
|
+
### Core Database Systems
|
|
8
|
+
|
|
9
|
+
- postgresql.md - Advanced PostgreSQL patterns, optimization, and scaling
|
|
10
|
+
- mongodb.md - NoSQL document modeling, aggregation, and performance tuning
|
|
11
|
+
- redis.md - In-memory caching, real-time data structures, and distributed systems
|
|
12
|
+
|
|
13
|
+
### Usage Patterns
|
|
14
|
+
|
|
15
|
+
1. Relational Database: Use `postgresql.md` for structured data and complex queries
|
|
16
|
+
2. Document Database: Use `mongodb.md` for flexible schemas and rapid development
|
|
17
|
+
3. In-Memory Store: Use `redis.md` for caching, sessions, and real-time features
|
|
18
|
+
4. Multi-Database: Combine modules for hybrid data architectures
|
|
19
|
+
|
|
20
|
+
### Integration Guidelines
|
|
21
|
+
|
|
22
|
+
Each module provides comprehensive patterns for:
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
# PostgreSQL integration
|
|
26
|
+
from moai_domain_database.modules.postgresql import AdvancedPostgreSQL
|
|
27
|
+
|
|
28
|
+
# MongoDB integration
|
|
29
|
+
from moai_domain_database.modules.mongodb import MongoAggregation
|
|
30
|
+
|
|
31
|
+
# Redis integration
|
|
32
|
+
from moai_domain_database.modules.redis import CacheManager
|
|
33
|
+
|
|
34
|
+
# Hybrid database architecture
|
|
35
|
+
def setup_database_stack():
|
|
36
|
+
postgresql = AdvancedPostgreSQL()
|
|
37
|
+
mongodb = MongoAggregation()
|
|
38
|
+
redis = CacheManager()
|
|
39
|
+
return DatabaseStack(postgresql, mongodb, redis)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Progressive Disclosure
|
|
43
|
+
|
|
44
|
+
- Quick Start: Use individual database modules for specific needs
|
|
45
|
+
- Implementation: Combine modules for comprehensive data solutions
|
|
46
|
+
- Advanced: Custom implementations based on module patterns
|
|
47
|
+
|
|
48
|
+
### Dependencies
|
|
49
|
+
|
|
50
|
+
- PostgreSQL: asyncpg, SQLAlchemy, Psycopg2
|
|
51
|
+
- MongoDB: pymongo, motor, mongoose
|
|
52
|
+
- Redis: redis-py, ioredis, node-redis
|
|
53
|
+
- General: Connection pooling, ORM frameworks, migration tools
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# MongoDB Advanced Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Advanced MongoDB patterns covering document modeling, aggregation pipelines, indexing strategies, and performance optimization for scalable NoSQL applications.
|
|
5
|
+
|
|
6
|
+
## Quick Implementation
|
|
7
|
+
|
|
8
|
+
### Document Modeling
|
|
9
|
+
|
|
10
|
+
```javascript
|
|
11
|
+
// User schema with embedded and referenced patterns
|
|
12
|
+
const userSchema = new Schema({
|
|
13
|
+
_id: ObjectId,
|
|
14
|
+
username: { type: String, required: true, unique: true },
|
|
15
|
+
email: { type: String, required: true, unique: true },
|
|
16
|
+
profile: {
|
|
17
|
+
displayName: String,
|
|
18
|
+
bio: String,
|
|
19
|
+
avatar: String,
|
|
20
|
+
preferences: {
|
|
21
|
+
theme: { type: String, enum: ['light', 'dark'], default: 'light' },
|
|
22
|
+
language: { type: String, default: 'en' },
|
|
23
|
+
notifications: {
|
|
24
|
+
email: { type: Boolean, default: true },
|
|
25
|
+
push: { type: Boolean, default: false }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
security: {
|
|
30
|
+
passwordHash: String,
|
|
31
|
+
lastLoginAt: Date,
|
|
32
|
+
failedLoginAttempts: { type: Number, default: 0 },
|
|
33
|
+
lockedUntil: Date
|
|
34
|
+
},
|
|
35
|
+
activity: {
|
|
36
|
+
lastSeenAt: Date,
|
|
37
|
+
loginCount: { type: Number, default: 0 }
|
|
38
|
+
}
|
|
39
|
+
}, {
|
|
40
|
+
timestamps: true,
|
|
41
|
+
// Optimized indexes
|
|
42
|
+
index: [
|
|
43
|
+
{ username: 1 },
|
|
44
|
+
{ email: 1 },
|
|
45
|
+
{ 'security.lastLoginAt': -1 },
|
|
46
|
+
{ 'activity.lastSeenAt': -1 }
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// Post schema with comments embedded for performance
|
|
51
|
+
const postSchema = new Schema({
|
|
52
|
+
_id: ObjectId,
|
|
53
|
+
authorId: { type: ObjectId, ref: 'User', required: true },
|
|
54
|
+
title: { type: String, required: true },
|
|
55
|
+
content: { type: String, required: true },
|
|
56
|
+
tags: [String],
|
|
57
|
+
metadata: {
|
|
58
|
+
viewCount: { type: Number, default: 0 },
|
|
59
|
+
likeCount: { type: Number, default: 0 },
|
|
60
|
+
commentCount: { type: Number, default: 0 }
|
|
61
|
+
},
|
|
62
|
+
// Embed recent comments for performance
|
|
63
|
+
recentComments: [{
|
|
64
|
+
_id: ObjectId,
|
|
65
|
+
authorId: ObjectId,
|
|
66
|
+
authorName: String,
|
|
67
|
+
content: String,
|
|
68
|
+
createdAt: { type: Date, default: Date.now }
|
|
69
|
+
}],
|
|
70
|
+
status: { type: String, enum: ['draft', 'published', 'archived'], default: 'draft' }
|
|
71
|
+
}, {
|
|
72
|
+
timestamps: true,
|
|
73
|
+
index: [
|
|
74
|
+
{ authorId: 1, createdAt: -1 },
|
|
75
|
+
{ status: 1, createdAt: -1 },
|
|
76
|
+
{ tags: 1 },
|
|
77
|
+
{ 'metadata.viewCount': -1 }
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Advanced Aggregation Pipelines
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
// User analytics with complex aggregation
|
|
86
|
+
const getUserAnalytics = async (userId, timeRange) => {
|
|
87
|
+
return await User.aggregate([
|
|
88
|
+
// Match specific user
|
|
89
|
+
{ $match: { _id: userId } },
|
|
90
|
+
|
|
91
|
+
// Lookup posts and engagement
|
|
92
|
+
{
|
|
93
|
+
$lookup: {
|
|
94
|
+
from: 'posts',
|
|
95
|
+
localField: '_id',
|
|
96
|
+
foreignField: 'authorId',
|
|
97
|
+
as: 'posts'
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
// Unwind posts for processing
|
|
102
|
+
{ $unwind: '$posts' },
|
|
103
|
+
|
|
104
|
+
// Filter by time range
|
|
105
|
+
{
|
|
106
|
+
$match: {
|
|
107
|
+
'posts.createdAt': {
|
|
108
|
+
$gte: timeRange.start,
|
|
109
|
+
$lte: timeRange.end
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
// Group by user and calculate metrics
|
|
115
|
+
{
|
|
116
|
+
$group: {
|
|
117
|
+
_id: '$_id',
|
|
118
|
+
username: { $first: '$username' },
|
|
119
|
+
totalPosts: { $sum: 1 },
|
|
120
|
+
totalViews: { $sum: '$posts.metadata.viewCount' },
|
|
121
|
+
totalLikes: { $sum: '$posts.metadata.likeCount' },
|
|
122
|
+
avgViewsPerPost: { $avg: '$posts.metadata.viewCount' },
|
|
123
|
+
tags: { $push: '$posts.tags' }
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
// Flatten and count tags
|
|
128
|
+
{
|
|
129
|
+
$addFields: {
|
|
130
|
+
allTags: { $reduce: {
|
|
131
|
+
input: '$tags',
|
|
132
|
+
initialValue: [],
|
|
133
|
+
in: { $concatArrays: ['$$value', '$$this'] }
|
|
134
|
+
}}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
{
|
|
139
|
+
$addFields: {
|
|
140
|
+
uniqueTags: { $setUnion: ['$allTags', []] },
|
|
141
|
+
topTags: { $slice: [
|
|
142
|
+
{ $sortArray: { input: { $objectToArray: { $size: '$allTags' } }, sortBy: { count: -1 } } },
|
|
143
|
+
5
|
|
144
|
+
]}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
]);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// Time series aggregation for activity tracking
|
|
151
|
+
const getActivityTrends = async (userId, granularity = 'daily') => {
|
|
152
|
+
const groupFormat = granularity === 'daily' ?
|
|
153
|
+
{ $dateToString: { format: '%Y-%m-%d', date: '$createdAt' } } :
|
|
154
|
+
{ $dateToString: { format: '%Y-%U', date: '$createdAt' } };
|
|
155
|
+
|
|
156
|
+
return await Activity.aggregate([
|
|
157
|
+
{ $match: { userId } },
|
|
158
|
+
{
|
|
159
|
+
$group: {
|
|
160
|
+
_id: groupFormat,
|
|
161
|
+
totalEvents: { $sum: 1 },
|
|
162
|
+
eventTypes: { $addToSet: '$eventType' },
|
|
163
|
+
uniqueSessions: { $addToSet: '$sessionId' }
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
$addFields: {
|
|
168
|
+
eventCount: { $size: '$eventTypes' },
|
|
169
|
+
sessionCount: { $size: '$uniqueSessions' }
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
{ $sort: { _id: 1 } }
|
|
173
|
+
]);
|
|
174
|
+
};
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Key Features
|
|
178
|
+
|
|
179
|
+
### 1. Document Design Patterns
|
|
180
|
+
- Embedding vs referencing strategies
|
|
181
|
+
- Denormalization for read performance
|
|
182
|
+
- Schema validation and constraints
|
|
183
|
+
- Array and object modeling
|
|
184
|
+
|
|
185
|
+
### 2. Indexing Strategies
|
|
186
|
+
- Compound indexes for multi-field queries
|
|
187
|
+
- Text indexes for full-text search
|
|
188
|
+
- Geospatial indexes for location data
|
|
189
|
+
- TTL indexes for automatic expiration
|
|
190
|
+
|
|
191
|
+
### 3. Aggregation Framework
|
|
192
|
+
- Multi-stage data processing pipelines
|
|
193
|
+
- Lookup operations for joins
|
|
194
|
+
- Group and accumulate operations
|
|
195
|
+
- Window functions for analytics
|
|
196
|
+
|
|
197
|
+
### 4. Performance Optimization
|
|
198
|
+
- Query pattern analysis
|
|
199
|
+
- Index usage optimization
|
|
200
|
+
- Connection pooling strategies
|
|
201
|
+
- Sharding for horizontal scaling
|
|
202
|
+
|
|
203
|
+
## Design Patterns
|
|
204
|
+
|
|
205
|
+
### Embedding Patterns
|
|
206
|
+
- One-to-One: Embed related data
|
|
207
|
+
- One-to-Many: Embed for small arrays
|
|
208
|
+
- Many-to-Many: Use references with lookups
|
|
209
|
+
|
|
210
|
+
### Reference Patterns
|
|
211
|
+
- Population for related data
|
|
212
|
+
- Manual joins with aggregation
|
|
213
|
+
- Caching frequently accessed data
|
|
214
|
+
|
|
215
|
+
### Schema Evolution
|
|
216
|
+
- Version-controlled schema changes
|
|
217
|
+
- Backward compatibility strategies
|
|
218
|
+
- Data migration approaches
|
|
219
|
+
|
|
220
|
+
## Best Practices
|
|
221
|
+
- Design for query patterns
|
|
222
|
+
- Use appropriate data types
|
|
223
|
+
- Implement proper indexing
|
|
224
|
+
- Monitor performance metrics
|
|
225
|
+
- Plan for schema evolution
|
|
226
|
+
|
|
227
|
+
## Integration Points
|
|
228
|
+
- ORMs (Mongoose, TypeGOOSE)
|
|
229
|
+
- ODMs for Node.js applications
|
|
230
|
+
- Connection pooling libraries
|
|
231
|
+
- Monitoring and analytics tools
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# PostgreSQL Advanced Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Comprehensive PostgreSQL patterns covering advanced schema design, query optimization, indexing strategies, partitioning, and performance tuning for modern applications.
|
|
5
|
+
|
|
6
|
+
## Quick Implementation
|
|
7
|
+
|
|
8
|
+
### Advanced Schema Design
|
|
9
|
+
|
|
10
|
+
```sql
|
|
11
|
+
-- User table with proper constraints and indexes
|
|
12
|
+
CREATE TABLE users (
|
|
13
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
14
|
+
email VARCHAR(255) UNIQUE NOT NULL,
|
|
15
|
+
username VARCHAR(50) UNIQUE,
|
|
16
|
+
password_hash VARCHAR(255) NOT NULL,
|
|
17
|
+
email_verified BOOLEAN DEFAULT FALSE,
|
|
18
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
19
|
+
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
20
|
+
last_login_at TIMESTAMP WITH TIME ZONE
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
-- Optimized indexes
|
|
24
|
+
CREATE INDEX idx_users_email ON users (email) WHERE email_verified = TRUE;
|
|
25
|
+
CREATE INDEX idx_users_created_at ON users (created_at DESC);
|
|
26
|
+
CREATE INDEX idx_users_username_trgm ON users USING gin (username gin_trgm_ops);
|
|
27
|
+
|
|
28
|
+
-- User profiles with JSONB
|
|
29
|
+
CREATE TABLE user_profiles (
|
|
30
|
+
user_id UUID PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
|
|
31
|
+
display_name VARCHAR(100),
|
|
32
|
+
bio TEXT,
|
|
33
|
+
avatar_url VARCHAR(500),
|
|
34
|
+
preferences JSONB DEFAULT '{}',
|
|
35
|
+
metadata JSONB DEFAULT '{}',
|
|
36
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
37
|
+
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- GIN index for JSONB queries
|
|
41
|
+
CREATE INDEX idx_user_profiles_preferences ON user_profiles USING gin (preferences);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Advanced Query Patterns
|
|
45
|
+
|
|
46
|
+
```sql
|
|
47
|
+
-- Efficient pagination with cursor-based approach
|
|
48
|
+
WITH ranked_users AS (
|
|
49
|
+
SELECT
|
|
50
|
+
u.id,
|
|
51
|
+
u.username,
|
|
52
|
+
u.email,
|
|
53
|
+
up.display_name,
|
|
54
|
+
ROW_NUMBER() OVER (ORDER BY u.created_at DESC) as rn
|
|
55
|
+
FROM users u
|
|
56
|
+
LEFT JOIN user_profiles up ON u.id = up.user_id
|
|
57
|
+
WHERE u.created_at < :cursor OR :cursor IS NULL
|
|
58
|
+
)
|
|
59
|
+
SELECT * FROM ranked_users
|
|
60
|
+
WHERE rn > :offset
|
|
61
|
+
ORDER BY created_at DESC
|
|
62
|
+
LIMIT :limit;
|
|
63
|
+
|
|
64
|
+
-- Full-text search with trigrams
|
|
65
|
+
SELECT
|
|
66
|
+
u.id,
|
|
67
|
+
u.username,
|
|
68
|
+
up.display_name,
|
|
69
|
+
similarity(u.username, :query) as username_sim,
|
|
70
|
+
ts_rank_cd(search_vector, plainto_tsquery('english', :query)) as search_rank
|
|
71
|
+
FROM users u
|
|
72
|
+
LEFT JOIN user_profiles up ON u.id = up.user_id,
|
|
73
|
+
to_tsvector('english', u.username || ' ' || COALESCE(up.display_name, '')) search_vector
|
|
74
|
+
WHERE u.username % :query
|
|
75
|
+
OR plainto_tsquery('english', :query) @@ search_vector
|
|
76
|
+
ORDER BY username_sim DESC, search_rank DESC
|
|
77
|
+
LIMIT 20;
|
|
78
|
+
|
|
79
|
+
-- Window functions for analytics
|
|
80
|
+
SELECT
|
|
81
|
+
DATE_TRUNC('month', created_at) as month,
|
|
82
|
+
COUNT(*) as new_users,
|
|
83
|
+
SUM(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at)) as cumulative_users,
|
|
84
|
+
COUNT(*) - LAG(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', created_at)) as month_over_month_change
|
|
85
|
+
FROM users
|
|
86
|
+
WHERE created_at >= NOW() - INTERVAL '1 year'
|
|
87
|
+
GROUP BY DATE_TRUNC('month', created_at)
|
|
88
|
+
ORDER BY month;
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Performance Optimization
|
|
92
|
+
|
|
93
|
+
```sql
|
|
94
|
+
-- Partitioning for time-series data
|
|
95
|
+
CREATE TABLE events (
|
|
96
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
97
|
+
user_id UUID NOT NULL REFERENCES users(id),
|
|
98
|
+
event_type VARCHAR(50) NOT NULL,
|
|
99
|
+
data JSONB,
|
|
100
|
+
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
101
|
+
) PARTITION BY RANGE (created_at);
|
|
102
|
+
|
|
103
|
+
-- Monthly partitions
|
|
104
|
+
CREATE TABLE events_2024_01 PARTITION OF events
|
|
105
|
+
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
|
|
106
|
+
|
|
107
|
+
CREATE TABLE events_2024_02 PARTITION OF events
|
|
108
|
+
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
|
|
109
|
+
|
|
110
|
+
-- Materialized views for analytics
|
|
111
|
+
CREATE MATERIALIZED VIEW user_stats AS
|
|
112
|
+
SELECT
|
|
113
|
+
u.id,
|
|
114
|
+
u.email,
|
|
115
|
+
u.created_at,
|
|
116
|
+
COUNT(DISTINCT e.id) as event_count,
|
|
117
|
+
MAX(e.created_at) as last_event_at,
|
|
118
|
+
COUNT(DISTINCT CASE WHEN e.event_type = 'login' THEN e.id END) as login_count
|
|
119
|
+
FROM users u
|
|
120
|
+
LEFT JOIN events e ON u.id = e.user_id
|
|
121
|
+
GROUP BY u.id, u.email, u.created_at;
|
|
122
|
+
|
|
123
|
+
-- Refresh materialized view
|
|
124
|
+
CREATE OR REPLACE FUNCTION refresh_user_stats()
|
|
125
|
+
RETURNS void AS $$
|
|
126
|
+
BEGIN
|
|
127
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY user_stats;
|
|
128
|
+
END;
|
|
129
|
+
$$ LANGUAGE plpgsql;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Key Features
|
|
133
|
+
|
|
134
|
+
### 1. Advanced Indexing
|
|
135
|
+
- Partial indexes for filtered data
|
|
136
|
+
- GIN indexes for full-text search and JSONB
|
|
137
|
+
- Expression indexes for computed values
|
|
138
|
+
- Composite indexes for multi-column queries
|
|
139
|
+
|
|
140
|
+
### 2. Query Optimization
|
|
141
|
+
- Cursor-based pagination
|
|
142
|
+
- Window functions for analytics
|
|
143
|
+
- CTE (Common Table Expressions)
|
|
144
|
+
- Materialized views for performance
|
|
145
|
+
|
|
146
|
+
### 3. Data Modeling
|
|
147
|
+
- JSONB for flexible schemas
|
|
148
|
+
- Array types for multi-valued data
|
|
149
|
+
- Range types for temporal data
|
|
150
|
+
- Custom types for domain-specific data
|
|
151
|
+
|
|
152
|
+
### 4. Performance Tuning
|
|
153
|
+
- Table partitioning
|
|
154
|
+
- Connection pooling
|
|
155
|
+
- Query execution plans
|
|
156
|
+
- Vacuum and analyze strategies
|
|
157
|
+
|
|
158
|
+
## Best Practices
|
|
159
|
+
- Use appropriate data types and constraints
|
|
160
|
+
- Implement proper indexing strategies
|
|
161
|
+
- Monitor query performance
|
|
162
|
+
- Use transactions for data consistency
|
|
163
|
+
- Implement backup and recovery procedures
|
|
164
|
+
|
|
165
|
+
## Integration Points
|
|
166
|
+
- ORMs (SQLAlchemy, Django ORM)
|
|
167
|
+
- Connection pools (PgBouncer, connection poolers)
|
|
168
|
+
- Monitoring tools (pg_stat_statements)
|
|
169
|
+
- Migration tools (Alembic, Flyway)
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Redis Advanced Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Advanced Redis patterns covering caching strategies, data structures, real-time analytics, distributed locking, and performance optimization for high-throughput applications.
|
|
5
|
+
|
|
6
|
+
## Quick Implementation
|
|
7
|
+
|
|
8
|
+
### Caching Strategies
|
|
9
|
+
|
|
10
|
+
```javascript
|
|
11
|
+
class CacheManager {
|
|
12
|
+
constructor(redisClient) {
|
|
13
|
+
this.redis = redisClient;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Multi-layer caching with fallback
|
|
17
|
+
async getWithFallback(key, fetchFunction, ttl = 3600) {
|
|
18
|
+
// Try memory cache first
|
|
19
|
+
const memoryCache = this.getMemoryCache(key);
|
|
20
|
+
if (memoryCache) return memoryCache;
|
|
21
|
+
|
|
22
|
+
// Try Redis cache
|
|
23
|
+
const redisCache = await this.redis.get(key);
|
|
24
|
+
if (redisCache) {
|
|
25
|
+
const data = JSON.parse(redisCache);
|
|
26
|
+
this.setMemoryCache(key, data, ttl / 10); // Shorter memory TTL
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Fetch from source
|
|
31
|
+
const data = await fetchFunction();
|
|
32
|
+
|
|
33
|
+
// Set both caches
|
|
34
|
+
await this.redis.setex(key, ttl, JSON.stringify(data));
|
|
35
|
+
this.setMemoryCache(key, data, ttl / 10);
|
|
36
|
+
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Write-through caching
|
|
41
|
+
async setWithWriteThrough(key, data, fetchFunction, ttl = 3600) {
|
|
42
|
+
// Update source first
|
|
43
|
+
await fetchFunction(data);
|
|
44
|
+
|
|
45
|
+
// Update caches
|
|
46
|
+
const pipeline = this.redis.pipeline();
|
|
47
|
+
pipeline.setex(key, ttl, JSON.stringify(data));
|
|
48
|
+
|
|
49
|
+
// Invalidate related cache keys
|
|
50
|
+
const relatedKeys = await this.getRelatedKeys(key);
|
|
51
|
+
relatedKeys.forEach(relatedKey => {
|
|
52
|
+
pipeline.del(relatedKey);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
await pipeline.exec();
|
|
56
|
+
this.setMemoryCache(key, data, ttl / 10);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Rate limiting with sliding window
|
|
60
|
+
async checkRateLimit(key, limit, windowMs) {
|
|
61
|
+
const now = Date.now();
|
|
62
|
+
const pipeline = this.redis.pipeline();
|
|
63
|
+
|
|
64
|
+
// Remove old entries
|
|
65
|
+
pipeline.zremrangebyscore(key, 0, now - windowMs);
|
|
66
|
+
|
|
67
|
+
// Add current request
|
|
68
|
+
pipeline.zadd(key, now, now);
|
|
69
|
+
|
|
70
|
+
// Count current window requests
|
|
71
|
+
pipeline.zcard(key);
|
|
72
|
+
|
|
73
|
+
// Set expiration
|
|
74
|
+
pipeline.expire(key, Math.ceil(windowMs / 1000));
|
|
75
|
+
|
|
76
|
+
const results = await pipeline.exec();
|
|
77
|
+
const currentCount = results[2][1];
|
|
78
|
+
|
|
79
|
+
return {
|
|
80
|
+
allowed: currentCount <= limit,
|
|
81
|
+
count: currentCount,
|
|
82
|
+
remaining: Math.max(0, limit - currentCount),
|
|
83
|
+
resetTime: now + windowMs
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Advanced Data Structures
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
class RedisDataManager {
|
|
93
|
+
constructor(redisClient) {
|
|
94
|
+
this.redis = redisClient;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Leaderboard with time decay
|
|
98
|
+
async addToTimeDecayLeaderboard(key, memberId, score, decayRate = 0.95) {
|
|
99
|
+
const timestamp = Date.now();
|
|
100
|
+
const decayedScore = score * Math.pow(decayRate, (Date.now() - timestamp) / (1000 * 60 * 60));
|
|
101
|
+
|
|
102
|
+
await this.redis.zadd(key, decayedScore, memberId);
|
|
103
|
+
|
|
104
|
+
// Remove old entries
|
|
105
|
+
const weekAgo = Date.now() - (7 * 24 * 60 * 60 * 1000);
|
|
106
|
+
await this.redis.zremrangebyscore(key, 0, weekAgo);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Real-time analytics with HyperLogLog
|
|
110
|
+
async trackUniqueVisitors(pageKey, userId) {
|
|
111
|
+
// Track unique users with HyperLogLog
|
|
112
|
+
await this.redis.pfadd(`${pageKey}:unique`, userId);
|
|
113
|
+
|
|
114
|
+
// Track total visits with regular counter
|
|
115
|
+
await this.redis.incr(`${pageKey}:total`);
|
|
116
|
+
|
|
117
|
+
// Track user activity set for recent activity
|
|
118
|
+
const activityKey = `${pageKey}:activity:${Math.floor(Date.now() / (60 * 1000))}`;
|
|
119
|
+
await this.redis.sadd(activityKey, userId);
|
|
120
|
+
await this.redis.expire(activityKey, 300); // 5 minutes
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async getAnalytics(pageKey) {
|
|
124
|
+
const pipeline = this.redis.pipeline();
|
|
125
|
+
|
|
126
|
+
// Unique visitors estimate
|
|
127
|
+
pipeline.pfcount(`${pageKey}:unique`);
|
|
128
|
+
|
|
129
|
+
// Total page views
|
|
130
|
+
pipeline.get(`${pageKey}:total`);
|
|
131
|
+
|
|
132
|
+
// Recent active users (last 5 minutes)
|
|
133
|
+
const now = Math.floor(Date.now() / (60 * 1000));
|
|
134
|
+
for (let i = 0; i < 5; i++) {
|
|
135
|
+
pipeline.scard(`${pageKey}:activity:${now - i}`);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const results = await pipeline.exec();
|
|
139
|
+
|
|
140
|
+
const uniqueVisitors = results[0][1];
|
|
141
|
+
const totalViews = parseInt(results[1][1]) || 0;
|
|
142
|
+
const recentActivity = results.slice(2).map(r => r[1]).reduce((a, b) => a + b, 0);
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
uniqueVisitors,
|
|
146
|
+
totalViews,
|
|
147
|
+
recentActiveUsers: recentActivity
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Distributed locking with timeout and retry
|
|
152
|
+
async acquireLock(key, ttl = 30000, retryCount = 3, retryDelay = 100) {
|
|
153
|
+
const lockKey = `lock:${key}`;
|
|
154
|
+
const lockValue = `${Date.now()}-${Math.random()}`;
|
|
155
|
+
|
|
156
|
+
for (let attempt = 0; attempt < retryCount; attempt++) {
|
|
157
|
+
const result = await this.redis.set(
|
|
158
|
+
lockKey,
|
|
159
|
+
lockValue,
|
|
160
|
+
'PX', ttl,
|
|
161
|
+
'NX'
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
if (result === 'OK') {
|
|
165
|
+
return {
|
|
166
|
+
acquired: true,
|
|
167
|
+
lockValue,
|
|
168
|
+
release: async () => await this.releaseLock(lockKey, lockValue)
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Wait before retry
|
|
173
|
+
if (attempt < retryCount - 1) {
|
|
174
|
+
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return { acquired: false };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
async releaseLock(lockKey, lockValue) {
|
|
182
|
+
const script = `
|
|
183
|
+
if redis.call("get", KEYS[1]) == ARGV[1] then
|
|
184
|
+
return redis.call("del", KEYS[1])
|
|
185
|
+
else
|
|
186
|
+
return 0
|
|
187
|
+
end
|
|
188
|
+
`;
|
|
189
|
+
|
|
190
|
+
return await this.redis.eval(script, 1, lockKey, lockValue);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Key Features
|
|
196
|
+
|
|
197
|
+
### 1. Caching Patterns
|
|
198
|
+
- Multi-layer caching (memory + Redis)
|
|
199
|
+
- Cache-aside and write-through strategies
|
|
200
|
+
- Cache invalidation and warming
|
|
201
|
+
- Rate limiting and throttling
|
|
202
|
+
|
|
203
|
+
### 2. Data Structures
|
|
204
|
+
- Strings for simple key-value storage
|
|
205
|
+
- Hashes for object storage
|
|
206
|
+
- Lists for queues and stacks
|
|
207
|
+
- Sets for unique collections
|
|
208
|
+
- Sorted sets for leaderboards
|
|
209
|
+
- HyperLogLog for cardinality estimation
|
|
210
|
+
|
|
211
|
+
### 3. Real-time Features
|
|
212
|
+
- Pub/sub messaging
|
|
213
|
+
- Streams for event processing
|
|
214
|
+
- Geospatial indexing
|
|
215
|
+
- Bitmap operations
|
|
216
|
+
|
|
217
|
+
### 4. Performance Optimization
|
|
218
|
+
- Pipeline operations for batch processing
|
|
219
|
+
- Lua scripting for atomic operations
|
|
220
|
+
- Connection pooling strategies
|
|
221
|
+
- Memory optimization techniques
|
|
222
|
+
|
|
223
|
+
## Advanced Patterns
|
|
224
|
+
|
|
225
|
+
### Distributed Locking
|
|
226
|
+
- Redlock algorithm for safety
|
|
227
|
+
- Timeout and retry mechanisms
|
|
228
|
+
- Lock release verification
|
|
229
|
+
- Deadlock prevention
|
|
230
|
+
|
|
231
|
+
### Rate Limiting
|
|
232
|
+
- Sliding window implementation
|
|
233
|
+
- Fixed window counters
|
|
234
|
+
- Token bucket algorithm
|
|
235
|
+
- Distributed rate limiting
|
|
236
|
+
|
|
237
|
+
### Analytics and Counting
|
|
238
|
+
- Real-time metrics collection
|
|
239
|
+
- Time-series data storage
|
|
240
|
+
- Approximate counting with HyperLogLog
|
|
241
|
+
- Bitmap analytics for user behavior
|
|
242
|
+
|
|
243
|
+
### Session Management
|
|
244
|
+
- User session storage
|
|
245
|
+
- Shopping cart management
|
|
246
|
+
- Real-time collaboration
|
|
247
|
+
- Presence detection
|
|
248
|
+
|
|
249
|
+
## Best Practices
|
|
250
|
+
- Use appropriate data structures
|
|
251
|
+
- Implement proper key naming conventions
|
|
252
|
+
- Set appropriate TTLs for cache entries
|
|
253
|
+
- Monitor memory usage and performance
|
|
254
|
+
- Use pipelining for batch operations
|
|
255
|
+
- Implement proper error handling
|
|
256
|
+
|
|
257
|
+
## Integration Points
|
|
258
|
+
- Connection pooling libraries (ioredis, redis-py)
|
|
259
|
+
- Cache middleware for web frameworks
|
|
260
|
+
- Message queue systems
|
|
261
|
+
- Real-time analytics platforms
|
|
262
|
+
- Session management systems
|