aigroup-workflow 2.2.1 → 2.2.3
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/.claude/commands/fix-build.md +10 -5
- package/.claude/commands/init-project.md +13 -8
- package/.claude/commands/plan.md +15 -8
- package/.claude/commands/review.md +12 -6
- package/.claude/commands/tdd.md +11 -5
- package/.claude/commands/workflow-start.md +20 -11
- package/.claude/settings.json +28 -0
- package/.codex/agents/architect.toml +207 -0
- package/.codex/agents/build-error-resolver.toml +110 -0
- package/.codex/agents/code-reviewer.toml +233 -0
- package/.codex/agents/doc-updater.toml +103 -0
- package/.codex/agents/e2e-runner.toml +103 -0
- package/.codex/agents/get-current-datetime.toml +23 -0
- package/.codex/agents/init-architect.toml +181 -0
- package/.codex/agents/planner.toml +208 -0
- package/.codex/agents/refactor-cleaner.toml +81 -0
- package/.codex/agents/rust-reviewer.toml +90 -0
- package/.codex/agents/security-reviewer.toml +104 -0
- package/.codex/agents/tdd-guide.toml +87 -0
- package/.codex/config.toml +22 -39
- package/AGENTS.md +2 -2
- package/CLAUDE.md +23 -1
- package/LICENSE +20 -20
- package/README.md +333 -333
- package/agents/a11y-architect.md +141 -141
- package/agents/architect.md +211 -211
- package/agents/build-error-resolver.md +114 -114
- package/agents/chief-of-staff.md +151 -151
- package/agents/code-architect.md +71 -71
- package/agents/code-explorer.md +69 -69
- package/agents/code-reviewer.md +237 -237
- package/agents/code-simplifier.md +47 -47
- package/agents/comment-analyzer.md +45 -45
- package/agents/conversation-analyzer.md +52 -52
- package/agents/cpp-build-resolver.md +90 -90
- package/agents/cpp-reviewer.md +72 -72
- package/agents/csharp-reviewer.md +101 -101
- package/agents/dart-build-resolver.md +201 -201
- package/agents/database-reviewer.md +91 -91
- package/agents/doc-updater.md +107 -107
- package/agents/docs-lookup.md +68 -68
- package/agents/e2e-runner.md +107 -107
- package/agents/flutter-reviewer.md +243 -243
- package/agents/gan-evaluator.md +209 -209
- package/agents/gan-generator.md +131 -131
- package/agents/gan-planner.md +99 -99
- package/agents/get-current-datetime.md +26 -26
- package/agents/go-build-resolver.md +94 -94
- package/agents/go-reviewer.md +76 -76
- package/agents/harness-optimizer.md +35 -35
- package/agents/healthcare-reviewer.md +83 -83
- package/agents/java-build-resolver.md +153 -153
- package/agents/java-reviewer.md +92 -92
- package/agents/kotlin-build-resolver.md +118 -118
- package/agents/kotlin-reviewer.md +159 -159
- package/agents/loop-operator.md +36 -36
- package/agents/opensource-forker.md +198 -198
- package/agents/opensource-packager.md +249 -249
- package/agents/opensource-sanitizer.md +188 -188
- package/agents/performance-optimizer.md +446 -446
- package/agents/planner.md +212 -212
- package/agents/pr-test-analyzer.md +45 -45
- package/agents/python-reviewer.md +98 -98
- package/agents/pytorch-build-resolver.md +120 -120
- package/agents/refactor-cleaner.md +85 -85
- package/agents/rust-build-resolver.md +148 -148
- package/agents/rust-reviewer.md +94 -94
- package/agents/security-reviewer.md +108 -108
- package/agents/seo-specialist.md +59 -59
- package/agents/silent-failure-hunter.md +50 -50
- package/agents/tdd-guide.md +91 -91
- package/agents/type-design-analyzer.md +41 -41
- package/agents/typescript-reviewer.md +112 -112
- package/cli/commands/update.mjs +1 -1
- package/cli/utils/scaffold.mjs +53 -0
- package/docs/rules/agents.md +166 -50
- package/docs/rules/cpp/coding-style.md +44 -44
- package/docs/rules/cpp/hooks.md +39 -39
- package/docs/rules/cpp/patterns.md +51 -51
- package/docs/rules/cpp/security.md +51 -51
- package/docs/rules/cpp/testing.md +44 -44
- package/docs/rules/csharp/coding-style.md +72 -72
- package/docs/rules/csharp/hooks.md +25 -25
- package/docs/rules/csharp/patterns.md +50 -50
- package/docs/rules/csharp/security.md +58 -58
- package/docs/rules/csharp/testing.md +46 -46
- package/docs/rules/dart/coding-style.md +159 -159
- package/docs/rules/dart/hooks.md +66 -66
- package/docs/rules/dart/patterns.md +261 -261
- package/docs/rules/dart/security.md +135 -135
- package/docs/rules/dart/testing.md +215 -215
- package/docs/rules/golang/coding-style.md +32 -32
- package/docs/rules/golang/hooks.md +17 -17
- package/docs/rules/golang/patterns.md +45 -45
- package/docs/rules/golang/security.md +34 -34
- package/docs/rules/golang/testing.md +31 -31
- package/docs/rules/java/coding-style.md +114 -114
- package/docs/rules/java/hooks.md +18 -18
- package/docs/rules/java/patterns.md +146 -146
- package/docs/rules/java/security.md +100 -100
- package/docs/rules/java/testing.md +131 -131
- package/docs/rules/java_zn/coding-style.md +169 -0
- package/docs/rules/java_zn/mybatis.md +102 -0
- package/docs/rules/kotlin/coding-style.md +86 -86
- package/docs/rules/kotlin/hooks.md +17 -17
- package/docs/rules/kotlin/patterns.md +146 -146
- package/docs/rules/kotlin/security.md +82 -82
- package/docs/rules/kotlin/testing.md +128 -128
- package/docs/rules/perl/coding-style.md +46 -46
- package/docs/rules/perl/hooks.md +22 -22
- package/docs/rules/perl/patterns.md +76 -76
- package/docs/rules/perl/security.md +69 -69
- package/docs/rules/perl/testing.md +54 -54
- package/docs/rules/php/coding-style.md +40 -40
- package/docs/rules/php/hooks.md +24 -24
- package/docs/rules/php/patterns.md +33 -33
- package/docs/rules/php/security.md +37 -37
- package/docs/rules/php/testing.md +39 -39
- package/docs/rules/python/coding-style.md +42 -42
- package/docs/rules/python/hooks.md +19 -19
- package/docs/rules/python/patterns.md +39 -39
- package/docs/rules/python/security.md +30 -30
- package/docs/rules/python/testing.md +38 -38
- package/docs/rules/rust/coding-style.md +151 -151
- package/docs/rules/rust/hooks.md +16 -16
- package/docs/rules/rust/patterns.md +168 -168
- package/docs/rules/rust/security.md +141 -141
- package/docs/rules/rust/testing.md +154 -154
- package/docs/rules/swift/coding-style.md +47 -47
- package/docs/rules/swift/hooks.md +20 -20
- package/docs/rules/swift/patterns.md +66 -66
- package/docs/rules/swift/security.md +33 -33
- package/docs/rules/swift/testing.md +45 -45
- package/docs/rules/typescript/coding-style.md +199 -199
- package/docs/rules/typescript/hooks.md +22 -22
- package/docs/rules/typescript/patterns.md +52 -52
- package/docs/rules/typescript/security.md +28 -28
- package/docs/rules/typescript/testing.md +18 -18
- package/docs/rules/web/coding-style.md +96 -96
- package/docs/rules/web/design-quality.md +62 -62
- package/docs/rules/web/hooks.md +120 -120
- package/docs/rules/web/patterns.md +79 -79
- package/docs/rules/web/performance.md +64 -64
- package/docs/rules/web/security.md +57 -57
- package/docs/rules/web/testing.md +55 -55
- package/docs/templates/README.md +36 -36
- package/docs/templates/ai-project-final.md +124 -124
- package/docs/templates/ai-project.md +105 -105
- package/docs/templates/api.md +157 -157
- package/docs/templates/bug.md +62 -62
- package/docs/templates/code-review.md +87 -87
- package/docs/templates/generic.md +116 -116
- package/docs/templates/implementation-plan.md +1 -1
- package/docs/templates/meeting.md +68 -68
- package/docs/templates/prd.md +98 -98
- package/docs/templates/ui.md +134 -134
- package/docs/workflow-pipeline.md +5 -5
- package/package.json +40 -39
- package/skills/SUPERPOWERS-LICENSE +21 -21
- package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -162
- package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -540
- package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -673
- package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -597
- package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -565
- package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -347
- package/skills/ai-ml/ml-pipeline/SKILL.md +159 -159
- package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -833
- package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -631
- package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -978
- package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -907
- package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -782
- package/skills/ai-ml/rag-architect/SKILL.md +194 -194
- package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -878
- package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -561
- package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -833
- package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -795
- package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -589
- package/skills/ai-ml/spark-engineer/SKILL.md +148 -148
- package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -543
- package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -544
- package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -599
- package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -474
- package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -786
- package/skills/backend/api-designer/SKILL.md +217 -217
- package/skills/backend/api-designer/references/error-handling.md +541 -541
- package/skills/backend/api-designer/references/openapi.md +824 -824
- package/skills/backend/api-designer/references/pagination.md +494 -494
- package/skills/backend/api-designer/references/rest-patterns.md +335 -335
- package/skills/backend/api-designer/references/versioning.md +391 -391
- package/skills/backend/architecture-designer/SKILL.md +117 -117
- package/skills/backend/architecture-designer/references/adr-template.md +116 -116
- package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -111
- package/skills/backend/architecture-designer/references/database-selection.md +102 -102
- package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -112
- package/skills/backend/architecture-designer/references/system-design.md +100 -100
- package/skills/backend/code-documenter/SKILL.md +147 -147
- package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -166
- package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -220
- package/skills/backend/code-documenter/references/coverage-reports.md +125 -125
- package/skills/backend/code-documenter/references/documentation-systems.md +333 -333
- package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -531
- package/skills/backend/code-documenter/references/python-docstrings.md +121 -121
- package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -145
- package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -530
- package/skills/backend/debugging-wizard/SKILL.md +105 -105
- package/skills/backend/debugging-wizard/references/common-patterns.md +132 -132
- package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -140
- package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -177
- package/skills/backend/debugging-wizard/references/strategies.md +142 -142
- package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -367
- package/skills/backend/feature-forge/SKILL.md +98 -98
- package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -104
- package/skills/backend/feature-forge/references/ears-syntax.md +99 -99
- package/skills/backend/feature-forge/references/interview-questions.md +150 -150
- package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -54
- package/skills/backend/feature-forge/references/specification-template.md +103 -103
- package/skills/backend/fullstack-guardian/SKILL.md +105 -105
- package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -307
- package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -350
- package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -237
- package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -134
- package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -354
- package/skills/backend/fullstack-guardian/references/design-template.md +91 -91
- package/skills/backend/fullstack-guardian/references/error-handling.md +135 -135
- package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -340
- package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -333
- package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -106
- package/skills/backend/graphql-architect/SKILL.md +146 -146
- package/skills/backend/graphql-architect/references/federation.md +418 -418
- package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -1141
- package/skills/backend/graphql-architect/references/resolvers.md +425 -425
- package/skills/backend/graphql-architect/references/schema-design.md +393 -393
- package/skills/backend/graphql-architect/references/security.md +569 -569
- package/skills/backend/graphql-architect/references/subscriptions.md +510 -510
- package/skills/backend/legacy-modernizer/SKILL.md +137 -137
- package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -381
- package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -423
- package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -395
- package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -281
- package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -487
- package/skills/backend/microservices-architect/SKILL.md +164 -164
- package/skills/backend/microservices-architect/references/communication.md +499 -499
- package/skills/backend/microservices-architect/references/data.md +721 -721
- package/skills/backend/microservices-architect/references/decomposition.md +344 -344
- package/skills/backend/microservices-architect/references/observability.md +805 -805
- package/skills/backend/microservices-architect/references/patterns.md +603 -603
- package/skills/database/database-optimizer/SKILL.md +147 -147
- package/skills/database/database-optimizer/references/index-strategies.md +331 -331
- package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -501
- package/skills/database/database-optimizer/references/mysql-tuning.md +452 -452
- package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -413
- package/skills/database/database-optimizer/references/query-optimization.md +251 -251
- package/skills/database/postgres-pro/SKILL.md +152 -152
- package/skills/database/postgres-pro/references/extensions.md +404 -404
- package/skills/database/postgres-pro/references/jsonb.md +321 -321
- package/skills/database/postgres-pro/references/maintenance.md +481 -481
- package/skills/database/postgres-pro/references/performance.md +265 -265
- package/skills/database/postgres-pro/references/replication.md +446 -446
- package/skills/database/sql-pro/SKILL.md +129 -129
- package/skills/database/sql-pro/references/database-design.md +402 -402
- package/skills/database/sql-pro/references/dialect-differences.md +419 -419
- package/skills/database/sql-pro/references/optimization.md +384 -384
- package/skills/database/sql-pro/references/query-patterns.md +285 -285
- package/skills/database/sql-pro/references/window-functions.md +328 -328
- package/skills/dotnet/csharp-developer/SKILL.md +125 -125
- package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -394
- package/skills/dotnet/csharp-developer/references/blazor.md +553 -553
- package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -409
- package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -248
- package/skills/dotnet/csharp-developer/references/performance.md +498 -498
- package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -138
- package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -546
- package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -455
- package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -548
- package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -440
- package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -319
- package/skills/frontend/angular-architect/SKILL.md +152 -152
- package/skills/frontend/angular-architect/references/components.md +297 -297
- package/skills/frontend/angular-architect/references/ngrx.md +401 -401
- package/skills/frontend/angular-architect/references/routing.md +361 -361
- package/skills/frontend/angular-architect/references/rxjs.md +319 -319
- package/skills/frontend/angular-architect/references/testing.md +405 -405
- package/skills/frontend/design-commands/design.md +91 -91
- package/skills/frontend/design-commands/handoff.md +97 -97
- package/skills/frontend/design-commands/prototype.md +120 -120
- package/skills/frontend/design-commands/spec.md +160 -160
- package/skills/frontend/design-commands/style.md +78 -78
- package/skills/frontend/flutter-expert/SKILL.md +138 -138
- package/skills/frontend/flutter-expert/references/bloc-state.md +259 -259
- package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -119
- package/skills/frontend/flutter-expert/references/performance.md +99 -99
- package/skills/frontend/flutter-expert/references/project-structure.md +118 -118
- package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -130
- package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -123
- package/skills/frontend/nextjs-developer/SKILL.md +143 -143
- package/skills/frontend/nextjs-developer/references/app-router.md +311 -311
- package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -482
- package/skills/frontend/nextjs-developer/references/deployment.md +545 -545
- package/skills/frontend/nextjs-developer/references/server-actions.md +462 -462
- package/skills/frontend/nextjs-developer/references/server-components.md +384 -384
- package/skills/frontend/react-expert/SKILL.md +149 -149
- package/skills/frontend/react-expert/references/hooks-patterns.md +162 -162
- package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -1119
- package/skills/frontend/react-expert/references/performance.md +168 -168
- package/skills/frontend/react-expert/references/react-19-features.md +174 -174
- package/skills/frontend/react-expert/references/server-components.md +143 -143
- package/skills/frontend/react-expert/references/state-management.md +171 -171
- package/skills/frontend/react-expert/references/testing-react.md +174 -174
- package/skills/frontend/react-native-expert/SKILL.md +185 -185
- package/skills/frontend/react-native-expert/references/expo-router.md +187 -187
- package/skills/frontend/react-native-expert/references/list-optimization.md +204 -204
- package/skills/frontend/react-native-expert/references/platform-handling.md +188 -188
- package/skills/frontend/react-native-expert/references/project-structure.md +171 -171
- package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -173
- package/skills/frontend/senior-frontend/SKILL.md +477 -477
- package/skills/frontend/senior-frontend/references/frontend_best_practices.md +806 -806
- package/skills/frontend/senior-frontend/references/nextjs_optimization_guide.md +724 -724
- package/skills/frontend/senior-frontend/references/react_patterns.md +746 -746
- package/skills/frontend/senior-frontend/scripts/bundle_analyzer.py +407 -407
- package/skills/frontend/senior-frontend/scripts/component_generator.py +329 -329
- package/skills/frontend/senior-frontend/scripts/frontend_scaffolder.py +1005 -1005
- package/skills/frontend/ui-ux-pro-max/SKILL.md +386 -386
- package/skills/frontend/ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/frontend/ui-ux-pro-max/data/colors.csv +97 -97
- package/skills/frontend/ui-ux-pro-max/data/icons.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/landing.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/data/products.csv +96 -96
- package/skills/frontend/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/frontend/ui-ux-pro-max/data/styles.csv +68 -68
- package/skills/frontend/ui-ux-pro-max/data/typography.csv +57 -57
- package/skills/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/frontend/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/scripts/core.py +253 -253
- package/skills/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/skills/frontend/ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/frontend/vue-expert/SKILL.md +98 -98
- package/skills/frontend/vue-expert/references/build-tooling.md +480 -480
- package/skills/frontend/vue-expert/references/components.md +448 -448
- package/skills/frontend/vue-expert/references/composition-api.md +299 -299
- package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -636
- package/skills/frontend/vue-expert/references/nuxt.md +669 -669
- package/skills/frontend/vue-expert/references/state-management.md +449 -449
- package/skills/frontend/vue-expert/references/typescript.md +584 -584
- package/skills/frontend/vue-expert-js/SKILL.md +167 -167
- package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -219
- package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -183
- package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -535
- package/skills/frontend/vue-expert-js/references/state-management.md +249 -249
- package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -237
- package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -115
- package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -440
- package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -437
- package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -397
- package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -304
- package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -357
- package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -122
- package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -329
- package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -442
- package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -432
- package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -477
- package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -451
- package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -167
- package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -458
- package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -334
- package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -278
- package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -470
- package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -413
- package/skills/infra/cli-developer/SKILL.md +113 -113
- package/skills/infra/cli-developer/references/design-patterns.md +221 -221
- package/skills/infra/cli-developer/references/go-cli.md +540 -540
- package/skills/infra/cli-developer/references/node-cli.md +383 -383
- package/skills/infra/cli-developer/references/python-cli.md +422 -422
- package/skills/infra/cli-developer/references/ux-patterns.md +448 -448
- package/skills/infra/cloud-architect/SKILL.md +216 -216
- package/skills/infra/cloud-architect/references/aws.md +394 -394
- package/skills/infra/cloud-architect/references/azure.md +562 -562
- package/skills/infra/cloud-architect/references/cost.md +582 -582
- package/skills/infra/cloud-architect/references/gcp.md +633 -633
- package/skills/infra/cloud-architect/references/multi-cloud.md +483 -483
- package/skills/infra/devops-engineer/SKILL.md +144 -144
- package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -241
- package/skills/infra/devops-engineer/references/docker-patterns.md +113 -113
- package/skills/infra/devops-engineer/references/github-actions.md +139 -139
- package/skills/infra/devops-engineer/references/incident-response.md +331 -331
- package/skills/infra/devops-engineer/references/kubernetes.md +154 -154
- package/skills/infra/devops-engineer/references/platform-engineering.md +417 -417
- package/skills/infra/devops-engineer/references/release-automation.md +527 -527
- package/skills/infra/devops-engineer/references/terraform-iac.md +141 -141
- package/skills/infra/kubernetes-specialist/SKILL.md +241 -241
- package/skills/infra/kubernetes-specialist/references/configuration.md +452 -452
- package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -458
- package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -563
- package/skills/infra/kubernetes-specialist/references/gitops.md +530 -530
- package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -912
- package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -507
- package/skills/infra/kubernetes-specialist/references/networking.md +447 -447
- package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -459
- package/skills/infra/kubernetes-specialist/references/storage.md +535 -535
- package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -414
- package/skills/infra/kubernetes-specialist/references/workloads.md +377 -377
- package/skills/infra/mcp-developer/SKILL.md +143 -143
- package/skills/infra/mcp-developer/references/protocol.md +244 -244
- package/skills/infra/mcp-developer/references/python-sdk.md +367 -367
- package/skills/infra/mcp-developer/references/resources.md +554 -554
- package/skills/infra/mcp-developer/references/tools.md +480 -480
- package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -350
- package/skills/infra/monitoring-expert/SKILL.md +176 -176
- package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -141
- package/skills/infra/monitoring-expert/references/application-profiling.md +331 -331
- package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -344
- package/skills/infra/monitoring-expert/references/dashboards.md +126 -126
- package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -123
- package/skills/infra/monitoring-expert/references/performance-testing.md +269 -269
- package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -136
- package/skills/infra/monitoring-expert/references/structured-logging.md +142 -142
- package/skills/infra/sre-engineer/SKILL.md +181 -181
- package/skills/infra/sre-engineer/references/automation-toil.md +492 -492
- package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -334
- package/skills/infra/sre-engineer/references/incident-chaos.md +576 -576
- package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -424
- package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -238
- package/skills/infra/terraform-engineer/SKILL.md +143 -143
- package/skills/infra/terraform-engineer/references/best-practices.md +583 -583
- package/skills/infra/terraform-engineer/references/module-patterns.md +297 -297
- package/skills/infra/terraform-engineer/references/providers.md +452 -452
- package/skills/infra/terraform-engineer/references/state-management.md +371 -371
- package/skills/infra/terraform-engineer/references/testing.md +486 -486
- package/skills/infra/websocket-engineer/SKILL.md +168 -168
- package/skills/infra/websocket-engineer/references/alternatives.md +391 -391
- package/skills/infra/websocket-engineer/references/patterns.md +400 -400
- package/skills/infra/websocket-engineer/references/protocol.md +195 -195
- package/skills/infra/websocket-engineer/references/scaling.md +333 -333
- package/skills/infra/websocket-engineer/references/security.md +474 -474
- package/skills/java/java-architect/SKILL.md +132 -132
- package/skills/java/java-architect/references/jpa-optimization.md +393 -393
- package/skills/java/java-architect/references/reactive-webflux.md +356 -356
- package/skills/java/java-architect/references/spring-boot-setup.md +269 -269
- package/skills/java/java-architect/references/spring-security.md +445 -445
- package/skills/java/java-architect/references/testing-patterns.md +500 -500
- package/skills/java/kotlin-specialist/SKILL.md +147 -147
- package/skills/java/kotlin-specialist/references/android-compose.md +419 -419
- package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -276
- package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -421
- package/skills/java/kotlin-specialist/references/ktor-server.md +426 -426
- package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -380
- package/skills/java/spring-boot-engineer/SKILL.md +196 -195
- package/skills/java/spring-boot-engineer/references/cloud.md +498 -498
- package/skills/java/spring-boot-engineer/references/data.md +381 -381
- package/skills/java/spring-boot-engineer/references/mybatis-plus.md +592 -0
- package/skills/java/spring-boot-engineer/references/security.md +459 -459
- package/skills/java/spring-boot-engineer/references/testing.md +545 -545
- package/skills/java/spring-boot-engineer/references/web.md +295 -295
- package/skills/java/spring-boot-engineer_zn/SKILL.md +129 -0
- package/skills/java/spring-boot-engineer_zn/references/architecture.md +23 -0
- package/skills/java/spring-boot-engineer_zn/references/concurrency.md +9 -0
- package/skills/java/spring-boot-engineer_zn/references/exception-logging.md +31 -0
- package/skills/java/spring-boot-engineer_zn/references/persistence.md +13 -0
- package/skills/java/spring-boot-engineer_zn/references/pojo-lombok.md +48 -0
- package/skills/java/spring-boot-engineer_zn/references/security.md +9 -0
- package/skills/java/spring-boot-engineer_zn/references/testing.md +7 -0
- package/skills/java/spring-boot-engineer_zn/references/validation.md +80 -0
- package/skills/javascript/javascript-pro/SKILL.md +132 -132
- package/skills/javascript/javascript-pro/references/async-patterns.md +334 -334
- package/skills/javascript/javascript-pro/references/browser-apis.md +398 -398
- package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -272
- package/skills/javascript/javascript-pro/references/modules.md +357 -357
- package/skills/javascript/javascript-pro/references/node-essentials.md +471 -471
- package/skills/javascript/nestjs-expert/SKILL.md +206 -206
- package/skills/javascript/nestjs-expert/references/authentication.md +166 -166
- package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -111
- package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -153
- package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -1237
- package/skills/javascript/nestjs-expert/references/services-di.md +140 -140
- package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -186
- package/skills/javascript/typescript-pro/SKILL.md +145 -145
- package/skills/javascript/typescript-pro/references/advanced-types.md +259 -259
- package/skills/javascript/typescript-pro/references/configuration.md +445 -445
- package/skills/javascript/typescript-pro/references/patterns.md +484 -484
- package/skills/javascript/typescript-pro/references/type-guards.md +352 -352
- package/skills/javascript/typescript-pro/references/utility-types.md +329 -329
- package/skills/php/laravel-specialist/SKILL.md +262 -262
- package/skills/php/laravel-specialist/references/eloquent.md +351 -351
- package/skills/php/laravel-specialist/references/livewire.md +512 -512
- package/skills/php/laravel-specialist/references/queues.md +423 -423
- package/skills/php/laravel-specialist/references/routing.md +362 -362
- package/skills/php/laravel-specialist/references/testing.md +522 -522
- package/skills/php/php-pro/SKILL.md +206 -206
- package/skills/php/php-pro/references/async-patterns.md +412 -412
- package/skills/php/php-pro/references/laravel-patterns.md +377 -377
- package/skills/php/php-pro/references/modern-php-features.md +323 -323
- package/skills/php/php-pro/references/symfony-patterns.md +466 -466
- package/skills/php/php-pro/references/testing-quality.md +466 -466
- package/skills/product/competitive-analysis/SKILL.md +257 -257
- package/skills/product/meeting-notes/SKILL.md +266 -266
- package/skills/product/prd-template/SKILL.md +150 -150
- package/skills/product/stakeholder-update/SKILL.md +225 -225
- package/skills/product/user-research-synthesis/SKILL.md +235 -235
- package/skills/python/django-expert/SKILL.md +162 -162
- package/skills/python/django-expert/references/authentication.md +145 -145
- package/skills/python/django-expert/references/drf-serializers.md +148 -148
- package/skills/python/django-expert/references/models-orm.md +151 -151
- package/skills/python/django-expert/references/testing-django.md +204 -204
- package/skills/python/django-expert/references/viewsets-views.md +153 -153
- package/skills/python/fastapi-expert/SKILL.md +185 -185
- package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -146
- package/skills/python/fastapi-expert/references/authentication.md +159 -159
- package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -142
- package/skills/python/fastapi-expert/references/migration-from-django.md +996 -996
- package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -135
- package/skills/python/fastapi-expert/references/testing-async.md +159 -159
- package/skills/python/pandas-pro/SKILL.md +178 -178
- package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -545
- package/skills/python/pandas-pro/references/data-cleaning.md +500 -500
- package/skills/python/pandas-pro/references/dataframe-operations.md +420 -420
- package/skills/python/pandas-pro/references/merging-joining.md +596 -596
- package/skills/python/pandas-pro/references/performance-optimization.md +597 -597
- package/skills/python/python-pro/SKILL.md +177 -177
- package/skills/python/python-pro/references/async-patterns.md +356 -356
- package/skills/python/python-pro/references/packaging.md +460 -460
- package/skills/python/python-pro/references/standard-library.md +378 -378
- package/skills/python/python-pro/references/testing.md +404 -404
- package/skills/python/python-pro/references/type-system.md +290 -290
- package/skills/quality/chaos-engineer/SKILL.md +182 -182
- package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -511
- package/skills/quality/chaos-engineer/references/experiment-design.md +229 -229
- package/skills/quality/chaos-engineer/references/game-days.md +434 -434
- package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -348
- package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -432
- package/skills/quality/code-reviewer/SKILL.md +119 -119
- package/skills/quality/code-reviewer/references/common-issues.md +142 -142
- package/skills/quality/code-reviewer/references/feedback-examples.md +144 -144
- package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -238
- package/skills/quality/code-reviewer/references/report-template.md +109 -109
- package/skills/quality/code-reviewer/references/review-checklist.md +88 -88
- package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -258
- package/skills/quality/playwright-expert/SKILL.md +169 -169
- package/skills/quality/playwright-expert/references/api-mocking.md +140 -140
- package/skills/quality/playwright-expert/references/configuration.md +155 -155
- package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -150
- package/skills/quality/playwright-expert/references/page-object-model.md +152 -152
- package/skills/quality/playwright-expert/references/selectors-locators.md +119 -119
- package/skills/quality/secure-code-guardian/SKILL.md +191 -191
- package/skills/quality/secure-code-guardian/references/authentication.md +136 -136
- package/skills/quality/secure-code-guardian/references/input-validation.md +146 -146
- package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -135
- package/skills/quality/secure-code-guardian/references/security-headers.md +133 -133
- package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -157
- package/skills/quality/security-reviewer/SKILL.md +103 -103
- package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -268
- package/skills/quality/security-reviewer/references/penetration-testing.md +268 -268
- package/skills/quality/security-reviewer/references/report-template.md +170 -170
- package/skills/quality/security-reviewer/references/sast-tools.md +117 -117
- package/skills/quality/security-reviewer/references/secret-scanning.md +125 -125
- package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -152
- package/skills/quality/senior-qa/README.md +196 -196
- package/skills/quality/senior-qa/SKILL.md +399 -399
- package/skills/quality/senior-qa/references/qa_best_practices.md +964 -964
- package/skills/quality/senior-qa/references/test_automation_patterns.md +1009 -1009
- package/skills/quality/senior-qa/references/testing_strategies.md +649 -649
- package/skills/quality/senior-qa/scripts/coverage_analyzer.py +836 -836
- package/skills/quality/senior-qa/scripts/e2e_test_scaffolder.py +820 -820
- package/skills/quality/senior-qa/scripts/test_suite_generator.py +605 -605
- package/skills/quality/tdd-guide/HOW_TO_USE.md +313 -313
- package/skills/quality/tdd-guide/README.md +680 -680
- package/skills/quality/tdd-guide/SKILL.md +122 -122
- package/skills/quality/tdd-guide/assets/expected_output.json +77 -77
- package/skills/quality/tdd-guide/assets/sample_input_python.json +39 -39
- package/skills/quality/tdd-guide/assets/sample_input_typescript.json +36 -36
- package/skills/quality/tdd-guide/references/ci-integration.md +195 -195
- package/skills/quality/tdd-guide/references/framework-guide.md +206 -206
- package/skills/quality/tdd-guide/references/tdd-best-practices.md +128 -128
- package/skills/quality/tdd-guide/scripts/coverage_analyzer.py +434 -434
- package/skills/quality/tdd-guide/scripts/fixture_generator.py +440 -440
- package/skills/quality/tdd-guide/scripts/format_detector.py +384 -384
- package/skills/quality/tdd-guide/scripts/framework_adapter.py +428 -428
- package/skills/quality/tdd-guide/scripts/metrics_calculator.py +456 -456
- package/skills/quality/tdd-guide/scripts/output_formatter.py +354 -354
- package/skills/quality/tdd-guide/scripts/tdd_workflow.py +474 -474
- package/skills/quality/tdd-guide/scripts/test_generator.py +438 -438
- package/skills/quality/test-master/SKILL.md +94 -94
- package/skills/quality/test-master/references/automation-frameworks.md +294 -294
- package/skills/quality/test-master/references/e2e-testing.md +128 -128
- package/skills/quality/test-master/references/integration-testing.md +120 -120
- package/skills/quality/test-master/references/performance-testing.md +118 -118
- package/skills/quality/test-master/references/qa-methodology.md +247 -247
- package/skills/quality/test-master/references/security-testing.md +127 -127
- package/skills/quality/test-master/references/tdd-iron-laws.md +174 -174
- package/skills/quality/test-master/references/test-reports.md +104 -104
- package/skills/quality/test-master/references/testing-anti-patterns.md +231 -231
- package/skills/quality/test-master/references/unit-testing.md +113 -113
- package/skills/ruby/rails-expert/SKILL.md +154 -154
- package/skills/ruby/rails-expert/references/active-record.md +244 -244
- package/skills/ruby/rails-expert/references/api-development.md +401 -401
- package/skills/ruby/rails-expert/references/background-jobs.md +272 -272
- package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -228
- package/skills/ruby/rails-expert/references/rspec-testing.md +367 -367
- package/skills/swift/swift-expert/SKILL.md +163 -163
- package/skills/swift/swift-expert/references/async-concurrency.md +360 -360
- package/skills/swift/swift-expert/references/memory-performance.md +377 -377
- package/skills/swift/swift-expert/references/protocol-oriented.md +354 -354
- package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -291
- package/skills/swift/swift-expert/references/testing-patterns.md +399 -399
- package/skills/workflow/brainstorming/SKILL.md +164 -164
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -214
- package/skills/workflow/brainstorming/scripts/helper.js +88 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -56
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/skills/workflow/brainstorming/visual-companion.md +287 -287
- package/skills/workflow/documentation/SKILL.md +45 -45
- package/skills/workflow/entropy-management/SKILL.md +115 -115
- package/skills/workflow/executing-plans/SKILL.md +70 -70
- package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -200
- package/skills/workflow/receiving-code-review/SKILL.md +213 -213
- package/skills/workflow/requesting-code-review/SKILL.md +105 -105
- package/skills/workflow/requesting-code-review/code-reviewer.md +146 -146
- package/skills/workflow/requirement-engineering/SKILL.md +111 -111
- package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/workflow/systematic-debugging/SKILL.md +296 -296
- package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/workflow/systematic-debugging/find-polluter.sh +63 -63
- package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/workflow/systematic-debugging/test-academic.md +14 -14
- package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/workflow/using-git-worktrees/SKILL.md +218 -218
- package/skills/workflow/verification-before-completion/SKILL.md +139 -139
- package/skills/workflow/writing-plans/SKILL.md +151 -151
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/skills/workflow/writing-skills/SKILL.md +655 -655
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -187
- package/skills/workflow/writing-skills/render-graphs.js +168 -168
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -384
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.java"
|
|
4
|
-
---
|
|
5
|
-
# Java Testing
|
|
6
|
-
|
|
7
|
-
> This file extends [common/testing.md](../common/testing.md) with Java-specific content.
|
|
8
|
-
|
|
9
|
-
## Test Framework
|
|
10
|
-
|
|
11
|
-
- **JUnit 5** (`@Test`, `@ParameterizedTest`, `@Nested`, `@DisplayName`)
|
|
12
|
-
- **AssertJ** for fluent assertions (`assertThat(result).isEqualTo(expected)`)
|
|
13
|
-
- **Mockito** for mocking dependencies
|
|
14
|
-
- **Testcontainers** for integration tests requiring databases or services
|
|
15
|
-
|
|
16
|
-
## Test Organization
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
src/test/java/com/example/app/
|
|
20
|
-
service/ # Unit tests for service layer
|
|
21
|
-
controller/ # Web layer / API tests
|
|
22
|
-
repository/ # Data access tests
|
|
23
|
-
integration/ # Cross-layer integration tests
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Mirror the `src/main/java` package structure in `src/test/java`.
|
|
27
|
-
|
|
28
|
-
## Unit Test Pattern
|
|
29
|
-
|
|
30
|
-
```java
|
|
31
|
-
@ExtendWith(MockitoExtension.class)
|
|
32
|
-
class OrderServiceTest {
|
|
33
|
-
|
|
34
|
-
@Mock
|
|
35
|
-
private OrderRepository orderRepository;
|
|
36
|
-
|
|
37
|
-
private OrderService orderService;
|
|
38
|
-
|
|
39
|
-
@BeforeEach
|
|
40
|
-
void setUp() {
|
|
41
|
-
orderService = new OrderService(orderRepository);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@Test
|
|
45
|
-
@DisplayName("findById returns order when exists")
|
|
46
|
-
void findById_existingOrder_returnsOrder() {
|
|
47
|
-
var order = new Order(1L, "Alice", BigDecimal.TEN);
|
|
48
|
-
when(orderRepository.findById(1L)).thenReturn(Optional.of(order));
|
|
49
|
-
|
|
50
|
-
var result = orderService.findById(1L);
|
|
51
|
-
|
|
52
|
-
assertThat(result.customerName()).isEqualTo("Alice");
|
|
53
|
-
verify(orderRepository).findById(1L);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@Test
|
|
57
|
-
@DisplayName("findById throws when order not found")
|
|
58
|
-
void findById_missingOrder_throws() {
|
|
59
|
-
when(orderRepository.findById(99L)).thenReturn(Optional.empty());
|
|
60
|
-
|
|
61
|
-
assertThatThrownBy(() -> orderService.findById(99L))
|
|
62
|
-
.isInstanceOf(OrderNotFoundException.class)
|
|
63
|
-
.hasMessageContaining("99");
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Parameterized Tests
|
|
69
|
-
|
|
70
|
-
```java
|
|
71
|
-
@ParameterizedTest
|
|
72
|
-
@CsvSource({
|
|
73
|
-
"100.00, 10, 90.00",
|
|
74
|
-
"50.00, 0, 50.00",
|
|
75
|
-
"200.00, 25, 150.00"
|
|
76
|
-
})
|
|
77
|
-
@DisplayName("discount applied correctly")
|
|
78
|
-
void applyDiscount(BigDecimal price, int pct, BigDecimal expected) {
|
|
79
|
-
assertThat(PricingUtils.discount(price, pct)).isEqualByComparingTo(expected);
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Integration Tests
|
|
84
|
-
|
|
85
|
-
Use Testcontainers for real database integration:
|
|
86
|
-
|
|
87
|
-
```java
|
|
88
|
-
@Testcontainers
|
|
89
|
-
class OrderRepositoryIT {
|
|
90
|
-
|
|
91
|
-
@Container
|
|
92
|
-
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16");
|
|
93
|
-
|
|
94
|
-
private OrderRepository repository;
|
|
95
|
-
|
|
96
|
-
@BeforeEach
|
|
97
|
-
void setUp() {
|
|
98
|
-
var dataSource = new PGSimpleDataSource();
|
|
99
|
-
dataSource.setUrl(postgres.getJdbcUrl());
|
|
100
|
-
dataSource.setUser(postgres.getUsername());
|
|
101
|
-
dataSource.setPassword(postgres.getPassword());
|
|
102
|
-
repository = new JdbcOrderRepository(dataSource);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
@Test
|
|
106
|
-
void save_and_findById() {
|
|
107
|
-
var saved = repository.save(new Order(null, "Bob", BigDecimal.ONE));
|
|
108
|
-
var found = repository.findById(saved.getId());
|
|
109
|
-
assertThat(found).isPresent();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
For Spring Boot integration tests, see skill: `springboot-tdd`.
|
|
115
|
-
|
|
116
|
-
## Test Naming
|
|
117
|
-
|
|
118
|
-
Use descriptive names with `@DisplayName`:
|
|
119
|
-
- `methodName_scenario_expectedBehavior()` for method names
|
|
120
|
-
- `@DisplayName("human-readable description")` for reports
|
|
121
|
-
|
|
122
|
-
## Coverage
|
|
123
|
-
|
|
124
|
-
- Target 80%+ line coverage
|
|
125
|
-
- Use JaCoCo for coverage reporting
|
|
126
|
-
- Focus on service and domain logic — skip trivial getters/config classes
|
|
127
|
-
|
|
128
|
-
## References
|
|
129
|
-
|
|
130
|
-
See skill: `springboot-tdd` for Spring Boot TDD patterns with MockMvc and Testcontainers.
|
|
131
|
-
See skill: `java-coding-standards` for testing expectations.
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
# Java Testing
|
|
6
|
+
|
|
7
|
+
> This file extends [common/testing.md](../common/testing.md) with Java-specific content.
|
|
8
|
+
|
|
9
|
+
## Test Framework
|
|
10
|
+
|
|
11
|
+
- **JUnit 5** (`@Test`, `@ParameterizedTest`, `@Nested`, `@DisplayName`)
|
|
12
|
+
- **AssertJ** for fluent assertions (`assertThat(result).isEqualTo(expected)`)
|
|
13
|
+
- **Mockito** for mocking dependencies
|
|
14
|
+
- **Testcontainers** for integration tests requiring databases or services
|
|
15
|
+
|
|
16
|
+
## Test Organization
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
src/test/java/com/example/app/
|
|
20
|
+
service/ # Unit tests for service layer
|
|
21
|
+
controller/ # Web layer / API tests
|
|
22
|
+
repository/ # Data access tests
|
|
23
|
+
integration/ # Cross-layer integration tests
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Mirror the `src/main/java` package structure in `src/test/java`.
|
|
27
|
+
|
|
28
|
+
## Unit Test Pattern
|
|
29
|
+
|
|
30
|
+
```java
|
|
31
|
+
@ExtendWith(MockitoExtension.class)
|
|
32
|
+
class OrderServiceTest {
|
|
33
|
+
|
|
34
|
+
@Mock
|
|
35
|
+
private OrderRepository orderRepository;
|
|
36
|
+
|
|
37
|
+
private OrderService orderService;
|
|
38
|
+
|
|
39
|
+
@BeforeEach
|
|
40
|
+
void setUp() {
|
|
41
|
+
orderService = new OrderService(orderRepository);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Test
|
|
45
|
+
@DisplayName("findById returns order when exists")
|
|
46
|
+
void findById_existingOrder_returnsOrder() {
|
|
47
|
+
var order = new Order(1L, "Alice", BigDecimal.TEN);
|
|
48
|
+
when(orderRepository.findById(1L)).thenReturn(Optional.of(order));
|
|
49
|
+
|
|
50
|
+
var result = orderService.findById(1L);
|
|
51
|
+
|
|
52
|
+
assertThat(result.customerName()).isEqualTo("Alice");
|
|
53
|
+
verify(orderRepository).findById(1L);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Test
|
|
57
|
+
@DisplayName("findById throws when order not found")
|
|
58
|
+
void findById_missingOrder_throws() {
|
|
59
|
+
when(orderRepository.findById(99L)).thenReturn(Optional.empty());
|
|
60
|
+
|
|
61
|
+
assertThatThrownBy(() -> orderService.findById(99L))
|
|
62
|
+
.isInstanceOf(OrderNotFoundException.class)
|
|
63
|
+
.hasMessageContaining("99");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Parameterized Tests
|
|
69
|
+
|
|
70
|
+
```java
|
|
71
|
+
@ParameterizedTest
|
|
72
|
+
@CsvSource({
|
|
73
|
+
"100.00, 10, 90.00",
|
|
74
|
+
"50.00, 0, 50.00",
|
|
75
|
+
"200.00, 25, 150.00"
|
|
76
|
+
})
|
|
77
|
+
@DisplayName("discount applied correctly")
|
|
78
|
+
void applyDiscount(BigDecimal price, int pct, BigDecimal expected) {
|
|
79
|
+
assertThat(PricingUtils.discount(price, pct)).isEqualByComparingTo(expected);
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Integration Tests
|
|
84
|
+
|
|
85
|
+
Use Testcontainers for real database integration:
|
|
86
|
+
|
|
87
|
+
```java
|
|
88
|
+
@Testcontainers
|
|
89
|
+
class OrderRepositoryIT {
|
|
90
|
+
|
|
91
|
+
@Container
|
|
92
|
+
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16");
|
|
93
|
+
|
|
94
|
+
private OrderRepository repository;
|
|
95
|
+
|
|
96
|
+
@BeforeEach
|
|
97
|
+
void setUp() {
|
|
98
|
+
var dataSource = new PGSimpleDataSource();
|
|
99
|
+
dataSource.setUrl(postgres.getJdbcUrl());
|
|
100
|
+
dataSource.setUser(postgres.getUsername());
|
|
101
|
+
dataSource.setPassword(postgres.getPassword());
|
|
102
|
+
repository = new JdbcOrderRepository(dataSource);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@Test
|
|
106
|
+
void save_and_findById() {
|
|
107
|
+
var saved = repository.save(new Order(null, "Bob", BigDecimal.ONE));
|
|
108
|
+
var found = repository.findById(saved.getId());
|
|
109
|
+
assertThat(found).isPresent();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
For Spring Boot integration tests, see skill: `springboot-tdd`.
|
|
115
|
+
|
|
116
|
+
## Test Naming
|
|
117
|
+
|
|
118
|
+
Use descriptive names with `@DisplayName`:
|
|
119
|
+
- `methodName_scenario_expectedBehavior()` for method names
|
|
120
|
+
- `@DisplayName("human-readable description")` for reports
|
|
121
|
+
|
|
122
|
+
## Coverage
|
|
123
|
+
|
|
124
|
+
- Target 80%+ line coverage
|
|
125
|
+
- Use JaCoCo for coverage reporting
|
|
126
|
+
- Focus on service and domain logic — skip trivial getters/config classes
|
|
127
|
+
|
|
128
|
+
## References
|
|
129
|
+
|
|
130
|
+
See skill: `springboot-tdd` for Spring Boot TDD patterns with MockMvc and Testcontainers.
|
|
131
|
+
See skill: `java-coding-standards` for testing expectations.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Java 代码风格 Rule
|
|
7
|
+
|
|
8
|
+
本规则以《Java 开发手册》为基准,覆盖 Java / Spring / Spring Boot 项目的**纯编码风格**。生成代码时优先遵守项目现有约定;项目无明确约定时按本规则执行。
|
|
9
|
+
|
|
10
|
+
完整工程规约(DTO 校验、Lombok、异常与日志、安全、MySQL/ORM、并发、单元测试、工程分层、Review 清单)见结尾「参考」节。
|
|
11
|
+
|
|
12
|
+
## 1. 总体原则
|
|
13
|
+
|
|
14
|
+
- 代码应清晰、稳定、可维护,命名表达完整业务含义,不为追求简短牺牲可读性。
|
|
15
|
+
- 强制遵守命名、格式、不可变性、错误处理等编码规约。
|
|
16
|
+
- 不引入无必要的新依赖;项目已使用 Spring Utils、Apache Commons Lang3、Jakarta Validation 时优先复用。
|
|
17
|
+
- 修改代码时同步补充或调整必要的单元测试。
|
|
18
|
+
|
|
19
|
+
## 2. 命名规则
|
|
20
|
+
|
|
21
|
+
- 类名使用 `UpperCamelCase`。
|
|
22
|
+
- 方法名、参数名、成员变量、局部变量使用 `lowerCamelCase`。
|
|
23
|
+
- 常量使用全大写,下划线分隔,如 `MAX_STOCK_COUNT`。
|
|
24
|
+
- 包名全小写,使用单数语义,避免拼音、中文、随意缩写。
|
|
25
|
+
- 抽象类以 `Abstract` 或 `Base` 开头;异常类以 `Exception` 结尾;测试类以被测类名开头并以 `Test` 结尾。
|
|
26
|
+
- 领域模型命名遵守:
|
|
27
|
+
- 数据对象:`xxxDO`
|
|
28
|
+
- 数据传输对象:`xxxDTO`
|
|
29
|
+
- 展示对象:`xxxVO`
|
|
30
|
+
- 业务对象:`xxxBO`
|
|
31
|
+
- 禁止命名为 `xxxPOJO`
|
|
32
|
+
- Service / DAO 暴露接口,实现类使用 `Impl` 后缀。
|
|
33
|
+
- 获取单个对象用 `get` 前缀,获取集合用 `list` 前缀,统计用 `count` 前缀,新增用 `save` / `insert`,删除用 `remove` / `delete`,修改用 `update`。
|
|
34
|
+
|
|
35
|
+
## 3. 格式规则
|
|
36
|
+
|
|
37
|
+
- 使用 4 个空格缩进,禁止 tab。
|
|
38
|
+
- 单行代码建议不超过 120 字符,超出需按语义换行。
|
|
39
|
+
- `if` / `for` / `while` / `switch` / `do` 与左括号之间必须有空格。
|
|
40
|
+
- 二目、三目运算符两侧必须有空格。
|
|
41
|
+
- 非空代码块左大括号不换行,右大括号独占一行;`else` 等连续结构紧跟右大括号。
|
|
42
|
+
- 所有 `if` / `else` / `for` / `while` / `do` 语句必须使用大括号。
|
|
43
|
+
- 单个方法建议不超过 80 行。超过时优先拆分为语义明确的私有方法或独立组件。
|
|
44
|
+
- 不同逻辑、不同语义、不同业务代码之间用空行分隔。
|
|
45
|
+
- 每个文件只放一个 public 顶层类型;成员顺序建议:常量、字段、构造器、public 方法、protected 方法、private 方法。
|
|
46
|
+
|
|
47
|
+
## 4. 不可变性
|
|
48
|
+
|
|
49
|
+
- 值类型优先使用 `record`(Java 16+)。
|
|
50
|
+
- 字段默认声明为 `final`,仅在确有需要时才使用可变状态。
|
|
51
|
+
- 公共 API 返回防御性拷贝:`List.copyOf()`、`Map.copyOf()`、`Set.copyOf()`。
|
|
52
|
+
- Copy-on-write:返回新实例而不是就地修改已有对象。
|
|
53
|
+
|
|
54
|
+
```java
|
|
55
|
+
// 推荐 —— 不可变值类型
|
|
56
|
+
public record OrderSummary(Long id, String customerName, BigDecimal total) {}
|
|
57
|
+
|
|
58
|
+
// 推荐 —— final 字段,无 setter
|
|
59
|
+
public class Order {
|
|
60
|
+
private final Long id;
|
|
61
|
+
private final List<LineItem> items;
|
|
62
|
+
|
|
63
|
+
public List<LineItem> getItems() {
|
|
64
|
+
return List.copyOf(items);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 5. 现代 Java 特性
|
|
70
|
+
|
|
71
|
+
在能提升清晰度的场景使用现代语言特性:
|
|
72
|
+
|
|
73
|
+
- **Record** 用于 DTO 和值类型(Java 16+)。
|
|
74
|
+
- **Sealed 类**用于封闭类型层次(Java 17+)。
|
|
75
|
+
- **`instanceof` 模式匹配** —— 无需显式强转(Java 16+)。
|
|
76
|
+
- **文本块**用于多行字符串 —— SQL、JSON 模板(Java 15+)。
|
|
77
|
+
- **Switch 表达式**使用箭头语法(Java 14+)。
|
|
78
|
+
- **Switch 模式匹配** —— 对 sealed 类型做穷尽处理(Java 21+)。
|
|
79
|
+
|
|
80
|
+
```java
|
|
81
|
+
// instanceof 模式匹配
|
|
82
|
+
if (shape instanceof Circle c) {
|
|
83
|
+
return Math.PI * c.radius() * c.radius();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// sealed 类型层次
|
|
87
|
+
public sealed interface PaymentMethod permits CreditCard, BankTransfer, Wallet {}
|
|
88
|
+
|
|
89
|
+
// switch 表达式
|
|
90
|
+
String label = switch (status) {
|
|
91
|
+
case ACTIVE -> "Active";
|
|
92
|
+
case SUSPENDED -> "Suspended";
|
|
93
|
+
case CLOSED -> "Closed";
|
|
94
|
+
};
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 6. Optional 使用
|
|
98
|
+
|
|
99
|
+
- finder 方法可能无结果时返回 `Optional<T>`。
|
|
100
|
+
- 使用 `map()`、`flatMap()`、`orElseThrow()`;不要在未 `isPresent()` 判断时裸调 `get()`。
|
|
101
|
+
- 不要把 `Optional` 作为字段类型或方法参数类型。
|
|
102
|
+
|
|
103
|
+
```java
|
|
104
|
+
// 推荐
|
|
105
|
+
return repository.findById(id)
|
|
106
|
+
.map(ResponseDto::from)
|
|
107
|
+
.orElseThrow(() -> new OrderNotFoundException(id));
|
|
108
|
+
|
|
109
|
+
// 禁止 —— Optional 作参数
|
|
110
|
+
public void process(Optional<String> name) {}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 7. 错误处理(核心)
|
|
114
|
+
|
|
115
|
+
- 领域错误优先使用非受检异常。
|
|
116
|
+
- 自定义领域异常继承 `RuntimeException`。
|
|
117
|
+
- 避免宽泛的 `catch (Exception e)`,仅顶层处理器例外。
|
|
118
|
+
- 异常消息必须带上下文信息。
|
|
119
|
+
- 流和资源使用 `try-with-resources`。
|
|
120
|
+
- 禁止空 catch;`finally` 中禁止 `return`。
|
|
121
|
+
|
|
122
|
+
```java
|
|
123
|
+
public class OrderNotFoundException extends RuntimeException {
|
|
124
|
+
public OrderNotFoundException(Long id) {
|
|
125
|
+
super("Order not found: id=" + id);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
> 完整异常处理与日志规则见 skill:`spring-boot-engineer_zn` 的 `references/exception-logging.md`。
|
|
131
|
+
|
|
132
|
+
## 8. 集合与 Streams
|
|
133
|
+
|
|
134
|
+
集合处理:
|
|
135
|
+
|
|
136
|
+
- `Set` 中对象必须正确实现 `equals` 和 `hashCode`。
|
|
137
|
+
- 不要在 `foreach` 中对集合执行 `add` / `remove`,删除时使用 `Iterator`。
|
|
138
|
+
- 集合转数组必须使用 `toArray(T[] array)`。
|
|
139
|
+
- `Arrays.asList` 返回的集合不可直接增删。
|
|
140
|
+
- `subList` 结果不可强转为 `ArrayList`,且要注意原集合修改带来的影响。
|
|
141
|
+
- `Map` 遍历优先使用 `entrySet`。
|
|
142
|
+
- 集合初始化时尽量指定容量。
|
|
143
|
+
- 调用 `addAll` 前应对入参集合做空判断。
|
|
144
|
+
|
|
145
|
+
Streams:
|
|
146
|
+
|
|
147
|
+
- 使用 stream 做转换,管道保持简短(最多 3–4 个操作)。
|
|
148
|
+
- 可读时优先使用方法引用:`.map(Order::getTotal)`。
|
|
149
|
+
- 避免在 stream 操作中产生副作用。
|
|
150
|
+
- 逻辑复杂时优先使用循环,而不是写出晦涩的 stream 管道。
|
|
151
|
+
|
|
152
|
+
## 9. 控制语句
|
|
153
|
+
|
|
154
|
+
- 表达异常分支时优先使用卫语句,减少嵌套。
|
|
155
|
+
- `if ... else if ... else` 嵌套不要超过 3 层;超过时应拆分方法、使用策略模式、状态模式或表驱动。
|
|
156
|
+
- 条件表达式中不要执行复杂逻辑,先赋值给语义明确的变量。
|
|
157
|
+
- 不要在条件表达式中插入赋值语句。
|
|
158
|
+
- 循环体内尽量避免重复创建对象、重复查询数据库、重复执行正则编译等高成本操作。
|
|
159
|
+
|
|
160
|
+
## 10. 注释规则
|
|
161
|
+
|
|
162
|
+
- 类、类属性、类方法按项目要求使用 Javadoc,接口和抽象方法必须说明参数、返回值、异常和语义。
|
|
163
|
+
- 注释应解释业务语义、边界条件、设计意图,不要复述代码。
|
|
164
|
+
- 修改代码时同步更新注释。
|
|
165
|
+
- 不要长期保留无用的注释代码;确需保留时说明原因、负责人和时间。
|
|
166
|
+
|
|
167
|
+
## 参考
|
|
168
|
+
|
|
169
|
+
完整 Java / Spring Boot 工程规约(DTO 校验、Lombok、异常与日志、安全、MySQL/ORM、并发、单元测试、工程分层、Review 清单)见 skill:`spring-boot-engineer_zn`。
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
- "**/*Mapper.xml"
|
|
5
|
+
- "**/mapper/**/*.xml"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# MyBatis 数据访问与分层 Rule
|
|
9
|
+
|
|
10
|
+
本规则约定 MyBatis(-Plus) 项目的数据访问方式与 Service / Mapper 分层依赖方向。生成或修改数据访问相关代码时遵守本规则;完整 MySQL/ORM 与工程分层规约见结尾「参考」节。
|
|
11
|
+
|
|
12
|
+
## 1. 分层与依赖方向
|
|
13
|
+
|
|
14
|
+
- **Mapper 在底层**:只负责持久化与数据查询,不写业务逻辑。
|
|
15
|
+
- **Service 在上层**:承载业务编排、结果组装与事务边界。
|
|
16
|
+
- **依赖只能自上而下**:`Service → Mapper`;Mapper 不得反向依赖 Service。
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
上层 Service ──依赖──▶ 底层 Mapper(接口 + XML)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 2. 简单查询用 IService,复杂联查走 Mapper XML 原生 SQL
|
|
23
|
+
|
|
24
|
+
- **简单**(单表 CRUD、简单条件查询、分页):Service 接口继承 MyBatis-Plus `IService<T>`、实现类继承 `ServiceImpl<Mapper, T>`,**直接使用继承得到的现成接口**(`getById`、`getOne`、`list`、`listByIds`、`save`、`saveBatch`、`updateById`、`removeById`、`page`、`lambdaQuery()` / `lambdaUpdate()` 等),不写 XML、不重复封装。
|
|
25
|
+
- **复杂多表联查**(多表 JOIN、聚合、分组、子查询等)用 `IService` / Wrapper 表达不便或可读性差时:在 **Mapper 接口声明方法**,在 **XML 中写原生 SQL** 完成查询,由 Service 调用该 Mapper 方法(`ServiceImpl` 中通过 `baseMapper` 访问)。
|
|
26
|
+
- XML 原生 SQL 要求:参数一律用 `#{}` 绑定(禁止 `${}` 拼接用户输入)、显式列出字段(禁止 `select *`)、结果用 `resultMap` 或 DTO 映射、命中必要索引;分页 `count` 为 0 时直接返回。
|
|
27
|
+
|
|
28
|
+
示例:
|
|
29
|
+
|
|
30
|
+
```java
|
|
31
|
+
// Mapper 接口:仅声明复杂联查方法;简单 CRUD 由 BaseMapper 提供,无需声明
|
|
32
|
+
public interface OrderMapper extends BaseMapper<OrderDO> {
|
|
33
|
+
|
|
34
|
+
List<OrderDetailDTO> listOrderDetail(@Param("query") OrderQuery query);
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```xml
|
|
39
|
+
<!-- OrderMapper.xml:原生 SQL 写复杂联查 -->
|
|
40
|
+
<select id="listOrderDetail" resultType="com.example.order.dto.OrderDetailDTO">
|
|
41
|
+
SELECT o.id, o.order_no, u.user_name, p.product_name, oi.quantity
|
|
42
|
+
FROM t_order o
|
|
43
|
+
JOIN t_user u ON u.id = o.user_id
|
|
44
|
+
JOIN t_order_item oi ON oi.order_id = o.id
|
|
45
|
+
JOIN t_product p ON p.id = oi.product_id
|
|
46
|
+
WHERE o.org_id = #{query.orgId}
|
|
47
|
+
<if test="query.status != null">
|
|
48
|
+
AND o.status = #{query.status}
|
|
49
|
+
</if>
|
|
50
|
+
</select>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```java
|
|
54
|
+
// Service 接口:继承 IService,获得现成 CRUD / 简单查询能力
|
|
55
|
+
public interface OrderService extends IService<OrderDO> {
|
|
56
|
+
|
|
57
|
+
List<OrderDetailDTO> listDetail(OrderQuery query); // 复杂联查单独声明
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// 实现类:继承 ServiceImpl 并绑定对应 Mapper
|
|
61
|
+
@Service
|
|
62
|
+
public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderDO> implements OrderService {
|
|
63
|
+
|
|
64
|
+
// 简单查询直接用继承自 IService 的方法,无需另写:
|
|
65
|
+
// getById(id) / list(wrapper) / save(entity) / page(page, wrapper) / lambdaQuery()...
|
|
66
|
+
|
|
67
|
+
// 复杂联查:调用 Mapper 的原生 SQL 方法(baseMapper 即 OrderMapper)
|
|
68
|
+
@Override
|
|
69
|
+
@Transactional(readOnly = true)
|
|
70
|
+
public List<OrderDetailDTO> listDetail(OrderQuery query) {
|
|
71
|
+
return baseMapper.listOrderDetail(query);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 3. 跨 Service 复用:依赖 Service,不要越层调 Mapper
|
|
77
|
+
|
|
78
|
+
- 其他 Service 需要这块数据或能力时,**依赖这个 Service**(`Service → Service`),由它对外暴露方法。
|
|
79
|
+
- **禁止**跨模块直接调用别人的 Mapper 越过其 Service 层——绕过 Service 会丢失业务规则、事务与权限控制。
|
|
80
|
+
- Service 之间避免循环依赖;出现循环依赖时,把公共逻辑下沉到更底层的 Service / Manager 或独立组件。
|
|
81
|
+
|
|
82
|
+
```java
|
|
83
|
+
// 其他 Service 依赖 OrderService,而不是直接用 OrderMapper
|
|
84
|
+
@Service
|
|
85
|
+
public class FulfillmentService {
|
|
86
|
+
|
|
87
|
+
private final OrderService orderService; // 依赖上层暴露的 Service
|
|
88
|
+
|
|
89
|
+
public FulfillmentService(OrderService orderService) {
|
|
90
|
+
this.orderService = orderService;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public void fulfill(OrderQuery query) {
|
|
94
|
+
List<OrderDetailDTO> details = orderService.listDetail(query);
|
|
95
|
+
// ... 履约业务编排,不直接接触 OrderMapper
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 参考
|
|
101
|
+
|
|
102
|
+
完整数据访问规约(MySQL/ORM、`#{}` 参数绑定、索引、分页、事务)与工程分层、依赖方向见 skill:`spring-boot-engineer_zn`(`references/persistence.md`、`references/architecture.md`)。
|