@atlashub/smartstack-cli 3.39.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.documentation/apex.html +644 -644
- package/.documentation/css/styles.css +2320 -2320
- package/.documentation/init.html +1377 -1377
- package/.documentation/js/app.js +780 -780
- package/.documentation/prd-json-v2.0.0.md +396 -396
- package/.documentation/testing-ba-e2e.md +462 -462
- package/config/default-config.json +95 -95
- package/config/mcp-defaults.json +62 -62
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +6 -4
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +115 -115
- package/scripts/extract-api-endpoints.ts +325 -325
- package/scripts/extract-business-rules.ts +440 -440
- package/scripts/generate-doc-with-mock-ui.ts +804 -804
- package/scripts/health-check.sh +168 -168
- package/scripts/postinstall.js +18 -18
- package/templates/agents/action.md +37 -37
- package/templates/agents/ba-reader.md +378 -378
- package/templates/agents/ba-writer.md +861 -861
- package/templates/agents/code-reviewer.md +163 -163
- package/templates/agents/db-reader.md +149 -149
- package/templates/agents/docs-context-reader.md +143 -143
- package/templates/agents/docs-sync-checker.md +122 -122
- package/templates/agents/efcore/conflicts.md +84 -84
- package/templates/agents/efcore/db-deploy.md +74 -74
- package/templates/agents/efcore/db-reset.md +85 -85
- package/templates/agents/efcore/db-seed.md +61 -61
- package/templates/agents/efcore/db-status.md +86 -86
- package/templates/agents/efcore/migration.md +186 -186
- package/templates/agents/efcore/rebase-snapshot.md +108 -108
- package/templates/agents/efcore/scan.md +92 -92
- package/templates/agents/efcore/squash.md +161 -161
- package/templates/agents/explore-codebase.md +66 -66
- package/templates/agents/explore-docs.md +98 -98
- package/templates/agents/fix-grammar.md +50 -50
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +96 -96
- package/templates/agents/gitflow/commit.md +236 -236
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +146 -146
- package/templates/agents/gitflow/init-clone.md +199 -199
- package/templates/agents/gitflow/init-detect.md +137 -137
- package/templates/agents/gitflow/init-validate.md +225 -225
- package/templates/agents/gitflow/init.md +340 -340
- package/templates/agents/gitflow/merge.md +145 -145
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +191 -191
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +147 -147
- package/templates/agents/gitflow/status.md +95 -95
- package/templates/agents/mcp-healthcheck.md +163 -163
- package/templates/agents/snipper.md +37 -37
- package/templates/agents/websearch.md +46 -46
- package/templates/hooks/appsettings-guard.sh +76 -76
- package/templates/hooks/docs-drift-check.md +96 -96
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +58 -58
- package/templates/hooks/mcp-check.md +64 -64
- package/templates/hooks/ralph-mcp-logger.sh +46 -46
- package/templates/hooks/ralph-session-end.sh +69 -69
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/hooks/wsl-dotnet-cleanup.sh +24 -24
- package/templates/mcp-scaffolding/component.tsx.hbs +318 -318
- package/templates/mcp-scaffolding/controller.cs.hbs +192 -192
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +239 -239
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -116
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -133
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -126
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -261
- package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -53
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +436 -436
- package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -239
- package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -441
- package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -442
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +402 -402
- package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -428
- package/templates/project/DependencyInjection.Application.cs.template +25 -25
- package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -61
- package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -70
- package/templates/project/ExampleEntity.cs.template +116 -116
- package/templates/project/ExampleEntityConfiguration.cs.template +64 -64
- package/templates/project/ExampleService.cs.template +146 -146
- package/templates/project/ExtensionsDbContext.cs.template +41 -41
- package/templates/project/IExtensionsDbContext.cs.template +22 -22
- package/templates/project/Program.cs.template +47 -47
- package/templates/project/README.md +79 -79
- package/templates/project/api.ts.template +12 -12
- package/templates/project/appsettings.json.template +170 -170
- package/templates/project/claude-settings.json.template +5 -5
- package/templates/project/test-frontend/msw/handlers.ts +58 -58
- package/templates/project/test-frontend/msw/server.ts +25 -25
- package/templates/project/test-frontend/setup.ts +16 -16
- package/templates/project/test-frontend/test-utils.tsx +59 -59
- package/templates/project/test-frontend/vitest.config.ts +31 -31
- package/templates/ralph/README.md +93 -93
- package/templates/ralph/ralph.config.yaml +113 -113
- package/templates/scripts/setup-ralph-loop.sh +173 -173
- package/templates/skills/_resources/config-safety.md +61 -61
- package/templates/skills/_resources/context-digest-template.md +53 -53
- package/templates/skills/_resources/doc-context-cache.md +60 -60
- package/templates/skills/_resources/docs-manifest-schema.md +155 -155
- package/templates/skills/_resources/formatting-guide.md +124 -124
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +181 -181
- package/templates/skills/_shared.md +228 -228
- package/templates/skills/admin/SKILL.md +48 -48
- package/templates/skills/ai-prompt/SKILL.md +107 -107
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -47
- package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -122
- package/templates/skills/apex/SKILL.md +168 -168
- package/templates/skills/apex/_shared.md +141 -141
- package/templates/skills/apex/references/agent-teams-protocol.md +164 -164
- package/templates/skills/apex/references/analysis-methods.md +141 -141
- package/templates/skills/apex/references/challenge-questions.md +145 -145
- package/templates/skills/apex/references/code-generation.md +412 -412
- package/templates/skills/apex/references/core-seed-data.md +1437 -1437
- package/templates/skills/apex/references/error-classification.md +144 -144
- package/templates/skills/apex/references/examine-build-validation.md +82 -82
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -177
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -105
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -96
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -110
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -151
- package/templates/skills/apex/references/post-checks.md +1584 -1584
- package/templates/skills/apex/references/smartstack-api.md +1053 -1053
- package/templates/skills/apex/references/smartstack-frontend.md +1571 -1571
- package/templates/skills/apex/references/smartstack-layers.md +402 -402
- package/templates/skills/apex/steps/step-00-init.md +307 -307
- package/templates/skills/apex/steps/step-01-analyze.md +165 -165
- package/templates/skills/apex/steps/step-02-plan.md +144 -144
- package/templates/skills/apex/steps/step-03-execute.md +328 -328
- package/templates/skills/apex/steps/step-04-examine.md +263 -263
- package/templates/skills/apex/steps/step-05-deep-review.md +129 -129
- package/templates/skills/apex/steps/step-06-resolve.md +101 -101
- package/templates/skills/apex/steps/step-07-tests.md +238 -238
- package/templates/skills/apex/steps/step-08-run-tests.md +125 -125
- package/templates/skills/application/SKILL.md +4 -4
- package/templates/skills/application/references/application-roles-template.md +227 -227
- package/templates/skills/application/references/backend-controller-hierarchy.md +58 -58
- package/templates/skills/application/references/backend-entity-seeding.md +72 -72
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -83
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -79
- package/templates/skills/application/references/backend-verification.md +88 -88
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -67
- package/templates/skills/application/references/frontend-route-naming.md +117 -117
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -107
- package/templates/skills/application/references/frontend-verification.md +156 -156
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +1 -1
- package/templates/skills/application/references/provider-template.md +177 -177
- package/templates/skills/application/references/roles-client-project-handling.md +55 -55
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -149
- package/templates/skills/application/references/test-coverage-requirements.md +213 -213
- package/templates/skills/application/references/test-frontend.md +73 -73
- package/templates/skills/application/references/test-prerequisites.md +72 -72
- package/templates/skills/application/steps/step-05-frontend.md +176 -176
- package/templates/skills/application/steps/step-06-migration.md +193 -193
- package/templates/skills/application/steps/step-07-tests.md +356 -356
- package/templates/skills/application/steps/step-08-documentation.md +137 -137
- package/templates/skills/application/templates-backend.md +463 -463
- package/templates/skills/application/templates-frontend.md +685 -685
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +1096 -1096
- package/templates/skills/business-analyse/SKILL.md +327 -327
- package/templates/skills/business-analyse/_architecture.md +123 -123
- package/templates/skills/business-analyse/_elicitation.md +206 -206
- package/templates/skills/business-analyse/_module-loop.md +115 -115
- package/templates/skills/business-analyse/_shared.md +383 -383
- package/templates/skills/business-analyse/_suggestions.md +34 -34
- package/templates/skills/business-analyse/html/ba-interactive.html +4477 -4477
- package/templates/skills/business-analyse/html/build-html.js +77 -77
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +150 -150
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +227 -227
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +199 -199
- package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +205 -205
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +647 -647
- package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +195 -195
- package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +92 -92
- package/templates/skills/business-analyse/html/src/scripts/08-editing.js +135 -135
- package/templates/skills/business-analyse/html/src/scripts/09-export.js +168 -168
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +171 -171
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +166 -166
- package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -38
- package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -101
- package/templates/skills/business-analyse/html/src/styles/03-navigation.css +120 -120
- package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -196
- package/templates/skills/business-analyse/html/src/styles/05-modules.css +454 -454
- package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +272 -272
- package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -184
- package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +241 -241
- package/templates/skills/business-analyse/html/src/template.html +516 -516
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +546 -546
- package/templates/skills/business-analyse/questionnaire/00-application.md +160 -160
- package/templates/skills/business-analyse/questionnaire/00b-project.md +85 -85
- package/templates/skills/business-analyse/questionnaire/01-context.md +185 -185
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +189 -189
- package/templates/skills/business-analyse/questionnaire/03-scope.md +164 -164
- package/templates/skills/business-analyse/questionnaire/04-data.md +88 -88
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +58 -58
- package/templates/skills/business-analyse/questionnaire/06-security.md +68 -68
- package/templates/skills/business-analyse/questionnaire/07-ui.md +76 -76
- package/templates/skills/business-analyse/questionnaire/08-performance.md +42 -42
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +45 -45
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +43 -43
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -59
- package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -58
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -69
- package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +135 -135
- package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +136 -136
- package/templates/skills/business-analyse/questionnaire.md +337 -337
- package/templates/skills/business-analyse/react/application-viewer.md +242 -242
- package/templates/skills/business-analyse/react/components.md +551 -551
- package/templates/skills/business-analyse/react/i18n-template.md +306 -306
- package/templates/skills/business-analyse/references/acceptance-criteria.md +169 -169
- package/templates/skills/business-analyse/references/agent-module-prompt.md +362 -362
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +557 -557
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -190
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +566 -566
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -41
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -74
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +115 -115
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +68 -69
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +85 -85
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -297
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +107 -107
- package/templates/skills/business-analyse/references/deploy-data-build.md +180 -180
- package/templates/skills/business-analyse/references/deploy-modes.md +118 -118
- package/templates/skills/business-analyse/references/detection-strategies.md +424 -424
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -218
- package/templates/skills/business-analyse/references/handoff-file-templates.md +120 -120
- package/templates/skills/business-analyse/references/handoff-mappings.md +81 -81
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -312
- package/templates/skills/business-analyse/references/html-data-mapping.md +299 -299
- package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -65
- package/templates/skills/business-analyse/references/naming-conventions.md +243 -243
- package/templates/skills/business-analyse/references/prd-generation.md +258 -258
- package/templates/skills/business-analyse/references/review-data-mapping.md +363 -363
- package/templates/skills/business-analyse/references/robustness-checks.md +542 -542
- package/templates/skills/business-analyse/references/spec-auto-inference.md +111 -111
- package/templates/skills/business-analyse/references/team-orchestration.md +1022 -1022
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -85
- package/templates/skills/business-analyse/references/ui-resource-cards.md +259 -259
- package/templates/skills/business-analyse/references/validate-incremental-html.md +121 -121
- package/templates/skills/business-analyse/references/validation-checklist.md +347 -347
- package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +335 -335
- package/templates/skills/business-analyse/schemas/application-schema.json +453 -453
- package/templates/skills/business-analyse/schemas/feature-schema.json +53 -53
- package/templates/skills/business-analyse/schemas/project-schema.json +485 -485
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +201 -201
- package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +82 -82
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +80 -80
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +70 -70
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +547 -547
- package/templates/skills/business-analyse/schemas/sections/validation-schema.json +93 -93
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +226 -226
- package/templates/skills/business-analyse/steps/step-00-init.md +575 -576
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +767 -767
- package/templates/skills/business-analyse/steps/step-01b-applications.md +419 -419
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +387 -387
- package/templates/skills/business-analyse/steps/step-03a-data.md +16 -16
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +506 -506
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +252 -252
- package/templates/skills/business-analyse/steps/step-03b-ui.md +425 -425
- package/templates/skills/business-analyse/steps/step-03c-compile.md +611 -611
- package/templates/skills/business-analyse/steps/step-03d-validate.md +783 -783
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +17 -17
- package/templates/skills/business-analyse/steps/step-04a-collect.md +415 -415
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +163 -163
- package/templates/skills/business-analyse/steps/step-04c-decide.md +186 -186
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +840 -840
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +522 -522
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +703 -703
- package/templates/skills/business-analyse/steps/step-06-review.md +278 -278
- package/templates/skills/business-analyse/templates/tpl-frd.md +168 -168
- package/templates/skills/business-analyse/templates/tpl-handoff.md +186 -186
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +59 -59
- package/templates/skills/business-analyse/templates/tpl-progress.md +172 -172
- package/templates/skills/business-analyse/templates-frd.md +476 -476
- package/templates/skills/business-analyse/templates-react.md +574 -574
- package/templates/skills/cc-agent/SKILL.md +129 -129
- package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -95
- package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -213
- package/templates/skills/cc-agent/references/permission-modes.md +102 -102
- package/templates/skills/cc-agent/references/tools-reference.md +144 -144
- package/templates/skills/cc-agent/steps/step-00-init.md +134 -134
- package/templates/skills/cc-agent/steps/step-01-design.md +186 -186
- package/templates/skills/cc-agent/steps/step-02-generate.md +131 -131
- package/templates/skills/cc-agent/steps/step-03-validate.md +130 -130
- package/templates/skills/cc-agent/templates/agent-categorized.md +67 -67
- package/templates/skills/cc-agent/templates/agent-standalone.md +56 -56
- package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -94
- package/templates/skills/cc-audit/SKILL.md +108 -108
- package/templates/skills/cc-audit/references/agent-checklist.md +91 -91
- package/templates/skills/cc-audit/references/hook-checklist.md +110 -110
- package/templates/skills/cc-audit/references/skill-checklist.md +70 -70
- package/templates/skills/cc-audit/steps/step-00-init.md +98 -98
- package/templates/skills/cc-audit/steps/step-01-scan.md +142 -142
- package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -158
- package/templates/skills/cc-audit/steps/step-03-report.md +142 -142
- package/templates/skills/cc-skill/SKILL.md +134 -134
- package/templates/skills/cc-skill/references/best-practices.md +167 -167
- package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -182
- package/templates/skills/cc-skill/references/skill-patterns.md +199 -199
- package/templates/skills/cc-skill/steps/step-00-init.md +119 -119
- package/templates/skills/cc-skill/steps/step-01-design.md +199 -199
- package/templates/skills/cc-skill/steps/step-02-generate.md +145 -145
- package/templates/skills/cc-skill/steps/step-03-steps.md +151 -151
- package/templates/skills/cc-skill/steps/step-04-validate.md +124 -124
- package/templates/skills/cc-skill/templates/skill-forked.md +85 -85
- package/templates/skills/cc-skill/templates/skill-progressive.md +102 -102
- package/templates/skills/cc-skill/templates/skill-simple.md +75 -75
- package/templates/skills/cc-skill/templates/step-template.md +82 -82
- package/templates/skills/check-version/SKILL.md +196 -196
- package/templates/skills/controller/SKILL.md +162 -162
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/references/controller-code-templates.md +159 -159
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -209
- package/templates/skills/controller/references/permission-sync-templates.md +149 -149
- package/templates/skills/controller/steps/step-00-init.md +193 -191
- package/templates/skills/controller/steps/step-01-analyze.md +146 -146
- package/templates/skills/controller/steps/step-02-plan.md +176 -176
- package/templates/skills/controller/steps/step-03-generate.md +189 -189
- package/templates/skills/controller/steps/step-04-perms.md +80 -80
- package/templates/skills/controller/steps/step-05-validate.md +107 -107
- package/templates/skills/controller/templates.md +1555 -1555
- package/templates/skills/debug/SKILL.md +70 -70
- package/templates/skills/debug/references/team-protocol.md +232 -232
- package/templates/skills/debug/steps/step-00-init.md +57 -57
- package/templates/skills/debug/steps/step-01-analyze.md +219 -219
- package/templates/skills/debug/steps/step-02-resolve.md +85 -85
- package/templates/skills/documentation/SKILL.md +132 -132
- package/templates/skills/documentation/data-schema.md +227 -227
- package/templates/skills/documentation/steps/step-00-init.md +70 -70
- package/templates/skills/documentation/steps/step-01-scan.md +113 -113
- package/templates/skills/documentation/steps/step-02-generate.md +231 -231
- package/templates/skills/documentation/steps/step-03-validate.md +251 -238
- package/templates/skills/documentation/templates.md +662 -663
- package/templates/skills/efcore/SKILL.md +167 -167
- package/templates/skills/efcore/references/both-contexts.md +32 -32
- package/templates/skills/efcore/references/database-operations.md +67 -67
- package/templates/skills/efcore/references/destructive-operations.md +38 -38
- package/templates/skills/efcore/references/reset-operations.md +81 -81
- package/templates/skills/efcore/references/seed-methods.md +86 -86
- package/templates/skills/efcore/references/shared-init-functions.md +250 -250
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -61
- package/templates/skills/efcore/references/troubleshooting.md +81 -81
- package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -227
- package/templates/skills/efcore/steps/db/step-deploy.md +217 -217
- package/templates/skills/efcore/steps/db/step-reset.md +186 -186
- package/templates/skills/efcore/steps/db/step-seed.md +166 -166
- package/templates/skills/efcore/steps/db/step-status.md +173 -173
- package/templates/skills/efcore/steps/migration/step-00-init.md +102 -102
- package/templates/skills/efcore/steps/migration/step-01-check.md +164 -164
- package/templates/skills/efcore/steps/migration/step-02-create.md +160 -160
- package/templates/skills/efcore/steps/migration/step-03-validate.md +168 -168
- package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +173 -173
- package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +100 -100
- package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +115 -115
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +112 -112
- package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +157 -157
- package/templates/skills/efcore/steps/shared/step-00-init.md +131 -131
- package/templates/skills/efcore/steps/squash/step-00-init.md +141 -141
- package/templates/skills/efcore/steps/squash/step-01-backup.md +120 -120
- package/templates/skills/efcore/steps/squash/step-02-fetch.md +168 -168
- package/templates/skills/efcore/steps/squash/step-03-create.md +184 -184
- package/templates/skills/efcore/steps/squash/step-04-validate.md +174 -174
- package/templates/skills/explore/SKILL.md +98 -98
- package/templates/skills/feature-full/SKILL.md +111 -111
- package/templates/skills/feature-full/steps/step-00-init.md +57 -57
- package/templates/skills/feature-full/steps/step-01-implementation.md +120 -120
- package/templates/skills/gitflow/SKILL.md +377 -377
- package/templates/skills/gitflow/_shared.md +620 -620
- package/templates/skills/gitflow/phases/abort.md +189 -189
- package/templates/skills/gitflow/phases/cleanup.md +234 -234
- package/templates/skills/gitflow/phases/status.md +192 -192
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -58
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -49
- package/templates/skills/gitflow/references/finish-cleanup.md +55 -55
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -45
- package/templates/skills/gitflow/references/init-config-template.md +135 -135
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -41
- package/templates/skills/gitflow/references/init-name-normalization.md +103 -103
- package/templates/skills/gitflow/references/init-questions.md +185 -185
- package/templates/skills/gitflow/references/init-structure-creation.md +75 -75
- package/templates/skills/gitflow/references/init-version-detection.md +21 -21
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -43
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -36
- package/templates/skills/gitflow/references/merge-execution.md +62 -62
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -76
- package/templates/skills/gitflow/references/plan-template.md +69 -69
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -60
- package/templates/skills/gitflow/references/pr-generation.md +58 -58
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -28
- package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -70
- package/templates/skills/gitflow/references/start-local-config.md +113 -113
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -50
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -44
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -38
- package/templates/skills/gitflow/steps/step-commit.md +199 -199
- package/templates/skills/gitflow/steps/step-finish.md +147 -147
- package/templates/skills/gitflow/steps/step-init.md +190 -190
- package/templates/skills/gitflow/steps/step-merge.md +85 -85
- package/templates/skills/gitflow/steps/step-plan.md +151 -151
- package/templates/skills/gitflow/steps/step-pr.md +199 -199
- package/templates/skills/gitflow/steps/step-start.md +195 -195
- package/templates/skills/gitflow/steps/step-sync.md +161 -161
- package/templates/skills/gitflow/templates/config.json +72 -72
- package/templates/skills/mcp/SKILL.md +62 -62
- package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -108
- package/templates/skills/mcp/steps/step-02-tools.md +73 -73
- package/templates/skills/notification/SKILL.md +173 -173
- package/templates/skills/quick-search/SKILL.md +99 -99
- package/templates/skills/ralph-loop/SKILL.md +234 -234
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -185
- package/templates/skills/ralph-loop/references/category-rules.md +96 -96
- package/templates/skills/ralph-loop/references/compact-loop.md +300 -300
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -127
- package/templates/skills/ralph-loop/references/module-transition.md +151 -151
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -171
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -246
- package/templates/skills/ralph-loop/references/section-splitting.md +439 -439
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +256 -256
- package/templates/skills/ralph-loop/references/team-orchestration.md +547 -547
- package/templates/skills/ralph-loop/steps/step-00-init.md +150 -150
- package/templates/skills/ralph-loop/steps/step-01-task.md +174 -174
- package/templates/skills/ralph-loop/steps/step-02-execute.md +177 -177
- package/templates/skills/ralph-loop/steps/step-03-commit.md +92 -92
- package/templates/skills/ralph-loop/steps/step-04-check.md +207 -207
- package/templates/skills/ralph-loop/steps/step-05-report.md +175 -175
- package/templates/skills/refactor/SKILL.md +56 -56
- package/templates/skills/refactor/steps/step-01-discover.md +60 -60
- package/templates/skills/refactor/steps/step-02-execute.md +67 -67
- package/templates/skills/review-code/SKILL.md +94 -94
- package/templates/skills/review-code/references/clean-code-principles.md +292 -292
- package/templates/skills/review-code/references/code-quality-metrics.md +174 -174
- package/templates/skills/review-code/references/feedback-patterns.md +149 -149
- package/templates/skills/review-code/references/owasp-api-top10.md +243 -243
- package/templates/skills/review-code/references/security-checklist.md +212 -212
- package/templates/skills/review-code/steps/step-01-smartstack.md +96 -96
- package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -80
- package/templates/skills/review-code/steps/step-03-react.md +44 -44
- package/templates/skills/ui-components/SKILL.md +137 -137
- package/templates/skills/ui-components/accessibility.md +170 -170
- package/templates/skills/ui-components/patterns/dashboard-chart.md +327 -327
- package/templates/skills/ui-components/patterns/data-table.md +39 -39
- package/templates/skills/ui-components/patterns/entity-card.md +77 -77
- package/templates/skills/ui-components/patterns/grid-layout.md +91 -91
- package/templates/skills/ui-components/patterns/kanban.md +43 -43
- package/templates/skills/ui-components/responsive-guidelines.md +278 -278
- package/templates/skills/ui-components/style-guide.md +113 -113
- package/templates/skills/utils/SKILL.md +44 -44
- package/templates/skills/utils/subcommands/test-web-config.md +152 -152
- package/templates/skills/utils/subcommands/test-web.md +123 -123
- package/templates/skills/validate/SKILL.md +181 -181
- package/templates/skills/validate-feature/SKILL.md +101 -101
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
- package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
- package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
- package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
- package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
- package/templates/skills/workflow/SKILL.md +127 -127
- package/templates/skills/workflow/steps/step-00-init.md +57 -57
- package/templates/skills/workflow/steps/step-01-implementation.md +84 -84
- package/templates/test-web/api-health.json +38 -38
- package/templates/test-web/minimal.json +19 -19
- package/templates/test-web/npm-package.json +46 -46
- package/templates/test-web/seo-check.json +54 -54
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
using Microsoft.EntityFrameworkCore;
|
|
2
|
-
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
3
|
-
using {{ProjectName}}.Domain.Entities;
|
|
4
|
-
using SmartStack.Infrastructure.Persistence.Configurations;
|
|
5
|
-
|
|
6
|
-
namespace {{ProjectName}}.Infrastructure.Persistence.Configurations;
|
|
7
|
-
|
|
8
|
-
/// <summary>
|
|
9
|
-
/// EF Core configuration for the Order entity.
|
|
10
|
-
///
|
|
11
|
-
/// NOTE: The table is created in the 'extensions' schema as defined by
|
|
12
|
-
/// ExtensionsDbContext.HasDefaultSchema(SchemaConstants.Extensions).
|
|
13
|
-
/// </summary>
|
|
14
|
-
public class OrderConfiguration : IEntityTypeConfiguration<Order>
|
|
15
|
-
{
|
|
16
|
-
public void Configure(EntityTypeBuilder<Order> builder)
|
|
17
|
-
{
|
|
18
|
-
// Table name with domain prefix (following SmartStack conventions)
|
|
19
|
-
// Use a prefix that makes sense for your domain
|
|
20
|
-
builder.ToTable("biz_Orders", SchemaConstants.Extensions);
|
|
21
|
-
|
|
22
|
-
// Primary key
|
|
23
|
-
builder.HasKey(e => e.Id);
|
|
24
|
-
|
|
25
|
-
// Properties
|
|
26
|
-
builder.Property(e => e.OrderNumber)
|
|
27
|
-
.IsRequired()
|
|
28
|
-
.HasMaxLength(50);
|
|
29
|
-
|
|
30
|
-
builder.Property(e => e.Status)
|
|
31
|
-
.IsRequired();
|
|
32
|
-
|
|
33
|
-
builder.Property(e => e.TotalAmount)
|
|
34
|
-
.HasPrecision(18, 2);
|
|
35
|
-
|
|
36
|
-
builder.Property(e => e.OrderDate)
|
|
37
|
-
.IsRequired();
|
|
38
|
-
|
|
39
|
-
builder.Property(e => e.Notes)
|
|
40
|
-
.HasMaxLength(1000);
|
|
41
|
-
|
|
42
|
-
// CustomerId is a GUID FK to Core.auth_Users
|
|
43
|
-
// IMPORTANT: We do NOT create a navigation property or FK constraint
|
|
44
|
-
// because the User table is in a different DbContext (CoreDbContext)
|
|
45
|
-
builder.Property(e => e.CustomerId)
|
|
46
|
-
.IsRequired();
|
|
47
|
-
|
|
48
|
-
// NOTE: No .HasOne() or navigation property to User!
|
|
49
|
-
// Use ICoreDataService.GetUserByIdAsync() to fetch user data
|
|
50
|
-
|
|
51
|
-
// Indexes
|
|
52
|
-
builder.HasIndex(e => e.OrderNumber)
|
|
53
|
-
.IsUnique();
|
|
54
|
-
|
|
55
|
-
builder.HasIndex(e => e.CustomerId);
|
|
56
|
-
|
|
57
|
-
builder.HasIndex(e => e.Status);
|
|
58
|
-
|
|
59
|
-
builder.HasIndex(e => e.OrderDate);
|
|
60
|
-
|
|
61
|
-
// Query filter for soft delete (if using BaseAuditableEntity)
|
|
62
|
-
builder.HasQueryFilter(e => !e.IsDeleted);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
1
|
+
using Microsoft.EntityFrameworkCore;
|
|
2
|
+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
3
|
+
using {{ProjectName}}.Domain.Entities;
|
|
4
|
+
using SmartStack.Infrastructure.Persistence.Configurations;
|
|
5
|
+
|
|
6
|
+
namespace {{ProjectName}}.Infrastructure.Persistence.Configurations;
|
|
7
|
+
|
|
8
|
+
/// <summary>
|
|
9
|
+
/// EF Core configuration for the Order entity.
|
|
10
|
+
///
|
|
11
|
+
/// NOTE: The table is created in the 'extensions' schema as defined by
|
|
12
|
+
/// ExtensionsDbContext.HasDefaultSchema(SchemaConstants.Extensions).
|
|
13
|
+
/// </summary>
|
|
14
|
+
public class OrderConfiguration : IEntityTypeConfiguration<Order>
|
|
15
|
+
{
|
|
16
|
+
public void Configure(EntityTypeBuilder<Order> builder)
|
|
17
|
+
{
|
|
18
|
+
// Table name with domain prefix (following SmartStack conventions)
|
|
19
|
+
// Use a prefix that makes sense for your domain
|
|
20
|
+
builder.ToTable("biz_Orders", SchemaConstants.Extensions);
|
|
21
|
+
|
|
22
|
+
// Primary key
|
|
23
|
+
builder.HasKey(e => e.Id);
|
|
24
|
+
|
|
25
|
+
// Properties
|
|
26
|
+
builder.Property(e => e.OrderNumber)
|
|
27
|
+
.IsRequired()
|
|
28
|
+
.HasMaxLength(50);
|
|
29
|
+
|
|
30
|
+
builder.Property(e => e.Status)
|
|
31
|
+
.IsRequired();
|
|
32
|
+
|
|
33
|
+
builder.Property(e => e.TotalAmount)
|
|
34
|
+
.HasPrecision(18, 2);
|
|
35
|
+
|
|
36
|
+
builder.Property(e => e.OrderDate)
|
|
37
|
+
.IsRequired();
|
|
38
|
+
|
|
39
|
+
builder.Property(e => e.Notes)
|
|
40
|
+
.HasMaxLength(1000);
|
|
41
|
+
|
|
42
|
+
// CustomerId is a GUID FK to Core.auth_Users
|
|
43
|
+
// IMPORTANT: We do NOT create a navigation property or FK constraint
|
|
44
|
+
// because the User table is in a different DbContext (CoreDbContext)
|
|
45
|
+
builder.Property(e => e.CustomerId)
|
|
46
|
+
.IsRequired();
|
|
47
|
+
|
|
48
|
+
// NOTE: No .HasOne() or navigation property to User!
|
|
49
|
+
// Use ICoreDataService.GetUserByIdAsync() to fetch user data
|
|
50
|
+
|
|
51
|
+
// Indexes
|
|
52
|
+
builder.HasIndex(e => e.OrderNumber)
|
|
53
|
+
.IsUnique();
|
|
54
|
+
|
|
55
|
+
builder.HasIndex(e => e.CustomerId);
|
|
56
|
+
|
|
57
|
+
builder.HasIndex(e => e.Status);
|
|
58
|
+
|
|
59
|
+
builder.HasIndex(e => e.OrderDate);
|
|
60
|
+
|
|
61
|
+
// Query filter for soft delete (if using BaseAuditableEntity)
|
|
62
|
+
builder.HasQueryFilter(e => !e.IsDeleted);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
using Microsoft.EntityFrameworkCore;
|
|
2
|
-
using SmartStack.Application.Common.Interfaces;
|
|
3
|
-
using {{ProjectName}}.Application.Common.Interfaces;
|
|
4
|
-
using {{ProjectName}}.Domain.Entities;
|
|
5
|
-
|
|
6
|
-
namespace {{ProjectName}}.Infrastructure.Services;
|
|
7
|
-
|
|
8
|
-
/// <summary>
|
|
9
|
-
/// Example service demonstrating how to use ICoreDataService
|
|
10
|
-
/// to fetch Core entity data (User, Role, etc.) from Extensions context.
|
|
11
|
-
/// </summary>
|
|
12
|
-
public class OrderService : IOrderService
|
|
13
|
-
{
|
|
14
|
-
private readonly IExtensionsDbContext _context;
|
|
15
|
-
private readonly ICoreDataService _coreDataService;
|
|
16
|
-
|
|
17
|
-
public OrderService(
|
|
18
|
-
IExtensionsDbContext context,
|
|
19
|
-
ICoreDataService coreDataService)
|
|
20
|
-
{
|
|
21
|
-
_context = context;
|
|
22
|
-
_coreDataService = coreDataService;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/// <summary>
|
|
26
|
-
/// Gets an order by ID, including customer information from Core.
|
|
27
|
-
/// </summary>
|
|
28
|
-
public async Task<OrderWithCustomerDto?> GetOrderWithCustomerAsync(
|
|
29
|
-
Guid orderId,
|
|
30
|
-
CancellationToken cancellationToken = default)
|
|
31
|
-
{
|
|
32
|
-
// 1. Get the order from Extensions context
|
|
33
|
-
var order = await _context.Orders
|
|
34
|
-
.AsNoTracking()
|
|
35
|
-
.FirstOrDefaultAsync(o => o.Id == orderId, cancellationToken);
|
|
36
|
-
|
|
37
|
-
if (order == null)
|
|
38
|
-
return null;
|
|
39
|
-
|
|
40
|
-
// 2. Use ICoreDataService to fetch customer info from Core context
|
|
41
|
-
// This is the correct way to access Core entities from Extensions!
|
|
42
|
-
var customer = await _coreDataService.GetUserBasicInfoAsync(
|
|
43
|
-
order.CustomerId,
|
|
44
|
-
cancellationToken);
|
|
45
|
-
|
|
46
|
-
// 3. Combine the data
|
|
47
|
-
return new OrderWithCustomerDto
|
|
48
|
-
{
|
|
49
|
-
Id = order.Id,
|
|
50
|
-
OrderNumber = order.OrderNumber,
|
|
51
|
-
Status = order.Status.ToString(),
|
|
52
|
-
TotalAmount = order.TotalAmount,
|
|
53
|
-
OrderDate = order.OrderDate,
|
|
54
|
-
CustomerId = order.CustomerId,
|
|
55
|
-
CustomerEmail = customer?.Email ?? "Unknown",
|
|
56
|
-
CustomerName = customer?.DisplayName ?? "Unknown"
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/// <summary>
|
|
61
|
-
/// Gets all orders for a customer.
|
|
62
|
-
/// </summary>
|
|
63
|
-
public async Task<IReadOnlyList<OrderDto>> GetOrdersByCustomerAsync(
|
|
64
|
-
Guid customerId,
|
|
65
|
-
CancellationToken cancellationToken = default)
|
|
66
|
-
{
|
|
67
|
-
// First verify the customer exists in Core
|
|
68
|
-
var customer = await _coreDataService.GetUserBasicInfoAsync(
|
|
69
|
-
customerId,
|
|
70
|
-
cancellationToken);
|
|
71
|
-
|
|
72
|
-
if (customer == null)
|
|
73
|
-
throw new InvalidOperationException($"Customer {customerId} not found.");
|
|
74
|
-
|
|
75
|
-
// Get orders from Extensions context
|
|
76
|
-
return await _context.Orders
|
|
77
|
-
.AsNoTracking()
|
|
78
|
-
.Where(o => o.CustomerId == customerId)
|
|
79
|
-
.OrderByDescending(o => o.OrderDate)
|
|
80
|
-
.Select(o => new OrderDto
|
|
81
|
-
{
|
|
82
|
-
Id = o.Id,
|
|
83
|
-
OrderNumber = o.OrderNumber,
|
|
84
|
-
Status = o.Status.ToString(),
|
|
85
|
-
TotalAmount = o.TotalAmount,
|
|
86
|
-
OrderDate = o.OrderDate
|
|
87
|
-
})
|
|
88
|
-
.ToListAsync(cancellationToken);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/// <summary>
|
|
92
|
-
/// Creates a new order.
|
|
93
|
-
/// </summary>
|
|
94
|
-
public async Task<Guid> CreateOrderAsync(
|
|
95
|
-
string orderNumber,
|
|
96
|
-
Guid customerId,
|
|
97
|
-
decimal totalAmount,
|
|
98
|
-
CancellationToken cancellationToken = default)
|
|
99
|
-
{
|
|
100
|
-
// Validate that the customer exists in Core before creating order
|
|
101
|
-
var customer = await _coreDataService.GetUserByIdAsync(
|
|
102
|
-
customerId,
|
|
103
|
-
cancellationToken);
|
|
104
|
-
|
|
105
|
-
if (customer == null)
|
|
106
|
-
throw new InvalidOperationException($"Customer {customerId} not found.");
|
|
107
|
-
|
|
108
|
-
if (!customer.IsActive)
|
|
109
|
-
throw new InvalidOperationException("Cannot create order for inactive customer.");
|
|
110
|
-
|
|
111
|
-
// Create the order in Extensions context
|
|
112
|
-
var order = Order.Create(orderNumber, customerId, totalAmount);
|
|
113
|
-
|
|
114
|
-
_context.Orders.Add(order);
|
|
115
|
-
await _context.SaveChangesAsync(cancellationToken);
|
|
116
|
-
|
|
117
|
-
return order.Id;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// === DTOs ===
|
|
122
|
-
|
|
123
|
-
public record OrderDto
|
|
124
|
-
{
|
|
125
|
-
public Guid Id { get; init; }
|
|
126
|
-
public string OrderNumber { get; init; } = null!;
|
|
127
|
-
public string Status { get; init; } = null!;
|
|
128
|
-
public decimal TotalAmount { get; init; }
|
|
129
|
-
public DateTime OrderDate { get; init; }
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
public record OrderWithCustomerDto : OrderDto
|
|
133
|
-
{
|
|
134
|
-
public Guid CustomerId { get; init; }
|
|
135
|
-
public string CustomerEmail { get; init; } = null!;
|
|
136
|
-
public string CustomerName { get; init; } = null!;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// === Interface ===
|
|
140
|
-
|
|
141
|
-
public interface IOrderService
|
|
142
|
-
{
|
|
143
|
-
Task<OrderWithCustomerDto?> GetOrderWithCustomerAsync(Guid orderId, CancellationToken cancellationToken = default);
|
|
144
|
-
Task<IReadOnlyList<OrderDto>> GetOrdersByCustomerAsync(Guid customerId, CancellationToken cancellationToken = default);
|
|
145
|
-
Task<Guid> CreateOrderAsync(string orderNumber, Guid customerId, decimal totalAmount, CancellationToken cancellationToken = default);
|
|
146
|
-
}
|
|
1
|
+
using Microsoft.EntityFrameworkCore;
|
|
2
|
+
using SmartStack.Application.Common.Interfaces;
|
|
3
|
+
using {{ProjectName}}.Application.Common.Interfaces;
|
|
4
|
+
using {{ProjectName}}.Domain.Entities;
|
|
5
|
+
|
|
6
|
+
namespace {{ProjectName}}.Infrastructure.Services;
|
|
7
|
+
|
|
8
|
+
/// <summary>
|
|
9
|
+
/// Example service demonstrating how to use ICoreDataService
|
|
10
|
+
/// to fetch Core entity data (User, Role, etc.) from Extensions context.
|
|
11
|
+
/// </summary>
|
|
12
|
+
public class OrderService : IOrderService
|
|
13
|
+
{
|
|
14
|
+
private readonly IExtensionsDbContext _context;
|
|
15
|
+
private readonly ICoreDataService _coreDataService;
|
|
16
|
+
|
|
17
|
+
public OrderService(
|
|
18
|
+
IExtensionsDbContext context,
|
|
19
|
+
ICoreDataService coreDataService)
|
|
20
|
+
{
|
|
21
|
+
_context = context;
|
|
22
|
+
_coreDataService = coreDataService;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/// <summary>
|
|
26
|
+
/// Gets an order by ID, including customer information from Core.
|
|
27
|
+
/// </summary>
|
|
28
|
+
public async Task<OrderWithCustomerDto?> GetOrderWithCustomerAsync(
|
|
29
|
+
Guid orderId,
|
|
30
|
+
CancellationToken cancellationToken = default)
|
|
31
|
+
{
|
|
32
|
+
// 1. Get the order from Extensions context
|
|
33
|
+
var order = await _context.Orders
|
|
34
|
+
.AsNoTracking()
|
|
35
|
+
.FirstOrDefaultAsync(o => o.Id == orderId, cancellationToken);
|
|
36
|
+
|
|
37
|
+
if (order == null)
|
|
38
|
+
return null;
|
|
39
|
+
|
|
40
|
+
// 2. Use ICoreDataService to fetch customer info from Core context
|
|
41
|
+
// This is the correct way to access Core entities from Extensions!
|
|
42
|
+
var customer = await _coreDataService.GetUserBasicInfoAsync(
|
|
43
|
+
order.CustomerId,
|
|
44
|
+
cancellationToken);
|
|
45
|
+
|
|
46
|
+
// 3. Combine the data
|
|
47
|
+
return new OrderWithCustomerDto
|
|
48
|
+
{
|
|
49
|
+
Id = order.Id,
|
|
50
|
+
OrderNumber = order.OrderNumber,
|
|
51
|
+
Status = order.Status.ToString(),
|
|
52
|
+
TotalAmount = order.TotalAmount,
|
|
53
|
+
OrderDate = order.OrderDate,
|
|
54
|
+
CustomerId = order.CustomerId,
|
|
55
|
+
CustomerEmail = customer?.Email ?? "Unknown",
|
|
56
|
+
CustomerName = customer?.DisplayName ?? "Unknown"
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// <summary>
|
|
61
|
+
/// Gets all orders for a customer.
|
|
62
|
+
/// </summary>
|
|
63
|
+
public async Task<IReadOnlyList<OrderDto>> GetOrdersByCustomerAsync(
|
|
64
|
+
Guid customerId,
|
|
65
|
+
CancellationToken cancellationToken = default)
|
|
66
|
+
{
|
|
67
|
+
// First verify the customer exists in Core
|
|
68
|
+
var customer = await _coreDataService.GetUserBasicInfoAsync(
|
|
69
|
+
customerId,
|
|
70
|
+
cancellationToken);
|
|
71
|
+
|
|
72
|
+
if (customer == null)
|
|
73
|
+
throw new InvalidOperationException($"Customer {customerId} not found.");
|
|
74
|
+
|
|
75
|
+
// Get orders from Extensions context
|
|
76
|
+
return await _context.Orders
|
|
77
|
+
.AsNoTracking()
|
|
78
|
+
.Where(o => o.CustomerId == customerId)
|
|
79
|
+
.OrderByDescending(o => o.OrderDate)
|
|
80
|
+
.Select(o => new OrderDto
|
|
81
|
+
{
|
|
82
|
+
Id = o.Id,
|
|
83
|
+
OrderNumber = o.OrderNumber,
|
|
84
|
+
Status = o.Status.ToString(),
|
|
85
|
+
TotalAmount = o.TotalAmount,
|
|
86
|
+
OrderDate = o.OrderDate
|
|
87
|
+
})
|
|
88
|
+
.ToListAsync(cancellationToken);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/// <summary>
|
|
92
|
+
/// Creates a new order.
|
|
93
|
+
/// </summary>
|
|
94
|
+
public async Task<Guid> CreateOrderAsync(
|
|
95
|
+
string orderNumber,
|
|
96
|
+
Guid customerId,
|
|
97
|
+
decimal totalAmount,
|
|
98
|
+
CancellationToken cancellationToken = default)
|
|
99
|
+
{
|
|
100
|
+
// Validate that the customer exists in Core before creating order
|
|
101
|
+
var customer = await _coreDataService.GetUserByIdAsync(
|
|
102
|
+
customerId,
|
|
103
|
+
cancellationToken);
|
|
104
|
+
|
|
105
|
+
if (customer == null)
|
|
106
|
+
throw new InvalidOperationException($"Customer {customerId} not found.");
|
|
107
|
+
|
|
108
|
+
if (!customer.IsActive)
|
|
109
|
+
throw new InvalidOperationException("Cannot create order for inactive customer.");
|
|
110
|
+
|
|
111
|
+
// Create the order in Extensions context
|
|
112
|
+
var order = Order.Create(orderNumber, customerId, totalAmount);
|
|
113
|
+
|
|
114
|
+
_context.Orders.Add(order);
|
|
115
|
+
await _context.SaveChangesAsync(cancellationToken);
|
|
116
|
+
|
|
117
|
+
return order.Id;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// === DTOs ===
|
|
122
|
+
|
|
123
|
+
public record OrderDto
|
|
124
|
+
{
|
|
125
|
+
public Guid Id { get; init; }
|
|
126
|
+
public string OrderNumber { get; init; } = null!;
|
|
127
|
+
public string Status { get; init; } = null!;
|
|
128
|
+
public decimal TotalAmount { get; init; }
|
|
129
|
+
public DateTime OrderDate { get; init; }
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
public record OrderWithCustomerDto : OrderDto
|
|
133
|
+
{
|
|
134
|
+
public Guid CustomerId { get; init; }
|
|
135
|
+
public string CustomerEmail { get; init; } = null!;
|
|
136
|
+
public string CustomerName { get; init; } = null!;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// === Interface ===
|
|
140
|
+
|
|
141
|
+
public interface IOrderService
|
|
142
|
+
{
|
|
143
|
+
Task<OrderWithCustomerDto?> GetOrderWithCustomerAsync(Guid orderId, CancellationToken cancellationToken = default);
|
|
144
|
+
Task<IReadOnlyList<OrderDto>> GetOrdersByCustomerAsync(Guid customerId, CancellationToken cancellationToken = default);
|
|
145
|
+
Task<Guid> CreateOrderAsync(string orderNumber, Guid customerId, decimal totalAmount, CancellationToken cancellationToken = default);
|
|
146
|
+
}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
using Microsoft.EntityFrameworkCore;
|
|
2
|
-
using {{ProjectName}}.Application.Common.Interfaces;
|
|
3
|
-
using SmartStack.Infrastructure.Persistence.Configurations;
|
|
4
|
-
|
|
5
|
-
namespace {{ProjectName}}.Infrastructure.Persistence;
|
|
6
|
-
|
|
7
|
-
/// <summary>
|
|
8
|
-
/// DbContext for client-specific entities (schema: extensions).
|
|
9
|
-
///
|
|
10
|
-
/// This context manages all entities specific to your project.
|
|
11
|
-
/// SmartStack Core entities (User, Role, etc.) are managed separately
|
|
12
|
-
/// by CoreDbContext from the SmartStack NuGet package.
|
|
13
|
-
///
|
|
14
|
-
/// IMPORTANT: To reference Core entities (User, Role, etc.):
|
|
15
|
-
/// - Store only the GUID foreign key (e.g., CreatedByUserId)
|
|
16
|
-
/// - Use ICoreDataService to fetch the related entity data
|
|
17
|
-
/// - Do NOT create navigation properties to Core entities
|
|
18
|
-
/// </summary>
|
|
19
|
-
public class ExtensionsDbContext : DbContext, IExtensionsDbContext
|
|
20
|
-
{
|
|
21
|
-
public ExtensionsDbContext(DbContextOptions<ExtensionsDbContext> options)
|
|
22
|
-
: base(options)
|
|
23
|
-
{
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// === YOUR ENTITIES ===
|
|
27
|
-
// Add your DbSet properties here. Example:
|
|
28
|
-
// public DbSet<Order> Orders => Set<Order>();
|
|
29
|
-
// public DbSet<Product> Products => Set<Product>();
|
|
30
|
-
|
|
31
|
-
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
32
|
-
{
|
|
33
|
-
base.OnModelCreating(modelBuilder);
|
|
34
|
-
|
|
35
|
-
// All client entities go into the 'extensions' schema
|
|
36
|
-
modelBuilder.HasDefaultSchema(SchemaConstants.Extensions);
|
|
37
|
-
|
|
38
|
-
// Load entity configurations from this assembly
|
|
39
|
-
modelBuilder.ApplyConfigurationsFromAssembly(typeof(ExtensionsDbContext).Assembly);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
1
|
+
using Microsoft.EntityFrameworkCore;
|
|
2
|
+
using {{ProjectName}}.Application.Common.Interfaces;
|
|
3
|
+
using SmartStack.Infrastructure.Persistence.Configurations;
|
|
4
|
+
|
|
5
|
+
namespace {{ProjectName}}.Infrastructure.Persistence;
|
|
6
|
+
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// DbContext for client-specific entities (schema: extensions).
|
|
9
|
+
///
|
|
10
|
+
/// This context manages all entities specific to your project.
|
|
11
|
+
/// SmartStack Core entities (User, Role, etc.) are managed separately
|
|
12
|
+
/// by CoreDbContext from the SmartStack NuGet package.
|
|
13
|
+
///
|
|
14
|
+
/// IMPORTANT: To reference Core entities (User, Role, etc.):
|
|
15
|
+
/// - Store only the GUID foreign key (e.g., CreatedByUserId)
|
|
16
|
+
/// - Use ICoreDataService to fetch the related entity data
|
|
17
|
+
/// - Do NOT create navigation properties to Core entities
|
|
18
|
+
/// </summary>
|
|
19
|
+
public class ExtensionsDbContext : DbContext, IExtensionsDbContext
|
|
20
|
+
{
|
|
21
|
+
public ExtensionsDbContext(DbContextOptions<ExtensionsDbContext> options)
|
|
22
|
+
: base(options)
|
|
23
|
+
{
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// === YOUR ENTITIES ===
|
|
27
|
+
// Add your DbSet properties here. Example:
|
|
28
|
+
// public DbSet<Order> Orders => Set<Order>();
|
|
29
|
+
// public DbSet<Product> Products => Set<Product>();
|
|
30
|
+
|
|
31
|
+
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
32
|
+
{
|
|
33
|
+
base.OnModelCreating(modelBuilder);
|
|
34
|
+
|
|
35
|
+
// All client entities go into the 'extensions' schema
|
|
36
|
+
modelBuilder.HasDefaultSchema(SchemaConstants.Extensions);
|
|
37
|
+
|
|
38
|
+
// Load entity configurations from this assembly
|
|
39
|
+
modelBuilder.ApplyConfigurationsFromAssembly(typeof(ExtensionsDbContext).Assembly);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
using Microsoft.EntityFrameworkCore;
|
|
2
|
-
|
|
3
|
-
namespace {{ProjectName}}.Application.Common.Interfaces;
|
|
4
|
-
|
|
5
|
-
/// <summary>
|
|
6
|
-
/// Interface for Extensions DbContext (client-specific entities).
|
|
7
|
-
///
|
|
8
|
-
/// This interface provides access to all entities specific to your project.
|
|
9
|
-
/// For Core entities (User, Role, Permission, etc.), use ICoreDataService.
|
|
10
|
-
/// </summary>
|
|
11
|
-
public interface IExtensionsDbContext
|
|
12
|
-
{
|
|
13
|
-
// === YOUR ENTITIES ===
|
|
14
|
-
// Add DbSet properties for your entities here. Example:
|
|
15
|
-
// DbSet<Order> Orders { get; }
|
|
16
|
-
// DbSet<Product> Products { get; }
|
|
17
|
-
|
|
18
|
-
/// <summary>
|
|
19
|
-
/// Saves all changes made in this context to the database.
|
|
20
|
-
/// </summary>
|
|
21
|
-
Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);
|
|
22
|
-
}
|
|
1
|
+
using Microsoft.EntityFrameworkCore;
|
|
2
|
+
|
|
3
|
+
namespace {{ProjectName}}.Application.Common.Interfaces;
|
|
4
|
+
|
|
5
|
+
/// <summary>
|
|
6
|
+
/// Interface for Extensions DbContext (client-specific entities).
|
|
7
|
+
///
|
|
8
|
+
/// This interface provides access to all entities specific to your project.
|
|
9
|
+
/// For Core entities (User, Role, Permission, etc.), use ICoreDataService.
|
|
10
|
+
/// </summary>
|
|
11
|
+
public interface IExtensionsDbContext
|
|
12
|
+
{
|
|
13
|
+
// === YOUR ENTITIES ===
|
|
14
|
+
// Add DbSet properties for your entities here. Example:
|
|
15
|
+
// DbSet<Order> Orders { get; }
|
|
16
|
+
// DbSet<Product> Products { get; }
|
|
17
|
+
|
|
18
|
+
/// <summary>
|
|
19
|
+
/// Saves all changes made in this context to the database.
|
|
20
|
+
/// </summary>
|
|
21
|
+
Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);
|
|
22
|
+
}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
using Microsoft.EntityFrameworkCore;
|
|
2
|
-
using SmartStack.Api.Extensions;
|
|
3
|
-
using {{ProjectName}}.Infrastructure;
|
|
4
|
-
using {{ProjectName}}.Infrastructure.Persistence;
|
|
5
|
-
using {{ProjectName}}.Application;
|
|
6
|
-
|
|
7
|
-
var builder = WebApplication.CreateBuilder(args);
|
|
8
|
-
|
|
9
|
-
// ===================================================================
|
|
10
|
-
// 1. Add SmartStack Core services (from NuGet package)
|
|
11
|
-
// ===================================================================
|
|
12
|
-
builder.Services.AddSmartStack(builder.Configuration, options =>
|
|
13
|
-
{
|
|
14
|
-
options.EnableDevSeeding = builder.Environment.IsDevelopment();
|
|
15
|
-
options.EnableSwagger = builder.Environment.IsDevelopment();
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
// ===================================================================
|
|
19
|
-
// 2. Add client-specific services (Dual-DbContext pattern)
|
|
20
|
-
// ===================================================================
|
|
21
|
-
builder.Services.Add{{ProjectName}}Infrastructure(builder.Configuration);
|
|
22
|
-
builder.Services.Add{{ProjectName}}Application();
|
|
23
|
-
|
|
24
|
-
var app = builder.Build();
|
|
25
|
-
|
|
26
|
-
// ===================================================================
|
|
27
|
-
// 3. Initialize SmartStack + apply migrations (in correct order!)
|
|
28
|
-
// ===================================================================
|
|
29
|
-
// This initializes SmartStack and applies Core migrations automatically
|
|
30
|
-
await app.InitializeSmartStackAsync();
|
|
31
|
-
|
|
32
|
-
// Apply Extensions migrations AFTER Core migrations
|
|
33
|
-
// Your client-specific tables may have FK references to Core tables
|
|
34
|
-
if (app.Environment.IsDevelopment())
|
|
35
|
-
{
|
|
36
|
-
using var scope = app.Services.CreateScope();
|
|
37
|
-
var extDb = scope.ServiceProvider.GetRequiredService<ExtensionsDbContext>();
|
|
38
|
-
await extDb.Database.MigrateAsync();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// ===================================================================
|
|
42
|
-
// 4. SmartStack middleware & endpoints
|
|
43
|
-
// ===================================================================
|
|
44
|
-
app.UseSmartStack();
|
|
45
|
-
app.MapSmartStack();
|
|
46
|
-
|
|
47
|
-
app.Run();
|
|
1
|
+
using Microsoft.EntityFrameworkCore;
|
|
2
|
+
using SmartStack.Api.Extensions;
|
|
3
|
+
using {{ProjectName}}.Infrastructure;
|
|
4
|
+
using {{ProjectName}}.Infrastructure.Persistence;
|
|
5
|
+
using {{ProjectName}}.Application;
|
|
6
|
+
|
|
7
|
+
var builder = WebApplication.CreateBuilder(args);
|
|
8
|
+
|
|
9
|
+
// ===================================================================
|
|
10
|
+
// 1. Add SmartStack Core services (from NuGet package)
|
|
11
|
+
// ===================================================================
|
|
12
|
+
builder.Services.AddSmartStack(builder.Configuration, options =>
|
|
13
|
+
{
|
|
14
|
+
options.EnableDevSeeding = builder.Environment.IsDevelopment();
|
|
15
|
+
options.EnableSwagger = builder.Environment.IsDevelopment();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// ===================================================================
|
|
19
|
+
// 2. Add client-specific services (Dual-DbContext pattern)
|
|
20
|
+
// ===================================================================
|
|
21
|
+
builder.Services.Add{{ProjectName}}Infrastructure(builder.Configuration);
|
|
22
|
+
builder.Services.Add{{ProjectName}}Application();
|
|
23
|
+
|
|
24
|
+
var app = builder.Build();
|
|
25
|
+
|
|
26
|
+
// ===================================================================
|
|
27
|
+
// 3. Initialize SmartStack + apply migrations (in correct order!)
|
|
28
|
+
// ===================================================================
|
|
29
|
+
// This initializes SmartStack and applies Core migrations automatically
|
|
30
|
+
await app.InitializeSmartStackAsync();
|
|
31
|
+
|
|
32
|
+
// Apply Extensions migrations AFTER Core migrations
|
|
33
|
+
// Your client-specific tables may have FK references to Core tables
|
|
34
|
+
if (app.Environment.IsDevelopment())
|
|
35
|
+
{
|
|
36
|
+
using var scope = app.Services.CreateScope();
|
|
37
|
+
var extDb = scope.ServiceProvider.GetRequiredService<ExtensionsDbContext>();
|
|
38
|
+
await extDb.Database.MigrateAsync();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ===================================================================
|
|
42
|
+
// 4. SmartStack middleware & endpoints
|
|
43
|
+
// ===================================================================
|
|
44
|
+
app.UseSmartStack();
|
|
45
|
+
app.MapSmartStack();
|
|
46
|
+
|
|
47
|
+
app.Run();
|