@atlashub/smartstack-cli 3.36.0 → 3.38.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/dist/index.js +16 -24
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +201 -256
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +3 -2
- package/scripts/extract-api-endpoints.ts +325 -0
- package/scripts/extract-business-rules.ts +440 -0
- package/scripts/generate-doc-with-mock-ui.ts +804 -0
- package/scripts/health-check.sh +168 -0
- package/scripts/postinstall.js +18 -0
- package/templates/agents/ba-reader.md +9 -9
- package/templates/agents/ba-writer.md +12 -15
- package/templates/agents/code-reviewer.md +1 -1
- package/templates/agents/docs-context-reader.md +1 -1
- package/templates/agents/gitflow/merge.md +0 -4
- package/templates/agents/gitflow/pr.md +0 -4
- package/templates/agents/gitflow/start.md +30 -5
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +20 -20
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +16 -24
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +2 -2
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +3 -3
- package/templates/skills/_shared.md +15 -17
- package/templates/skills/ai-prompt/SKILL.md +1 -1
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -0
- package/templates/skills/apex/SKILL.md +3 -4
- package/templates/skills/apex/_shared.md +10 -20
- package/templates/skills/apex/references/analysis-methods.md +141 -0
- package/templates/skills/apex/references/challenge-questions.md +1 -21
- package/templates/skills/apex/references/core-seed-data.md +35 -57
- package/templates/skills/apex/references/examine-build-validation.md +87 -0
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -0
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -0
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -0
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -0
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -0
- package/templates/skills/apex/references/post-checks.md +145 -40
- package/templates/skills/apex/references/smartstack-api.md +35 -51
- package/templates/skills/apex/references/smartstack-frontend.md +17 -17
- package/templates/skills/apex/references/smartstack-layers.md +38 -62
- package/templates/skills/apex/steps/step-00-init.md +14 -26
- package/templates/skills/apex/steps/step-01-analyze.md +10 -143
- package/templates/skills/apex/steps/step-02-plan.md +10 -92
- package/templates/skills/apex/steps/step-03-execute.md +47 -249
- package/templates/skills/apex/steps/step-04-examine.md +14 -78
- package/templates/skills/apex/steps/step-05-deep-review.md +2 -2
- package/templates/skills/apex/steps/step-08-run-tests.md +2 -0
- package/templates/skills/application/SKILL.md +6 -7
- package/templates/skills/application/references/backend-controller-hierarchy.md +16 -16
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -0
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -0
- package/templates/skills/application/references/backend-verification.md +1 -1
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -0
- package/templates/skills/application/references/frontend-route-naming.md +117 -0
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -0
- package/templates/skills/application/references/frontend-verification.md +12 -12
- package/templates/skills/application/references/init-parameter-detection.md +120 -0
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +100 -0
- package/templates/skills/application/references/nav-fallback-procedure.md +5 -6
- package/templates/skills/application/references/provider-template.md +2 -6
- package/templates/skills/application/references/roles-client-project-handling.md +55 -0
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -0
- package/templates/skills/application/references/test-coverage-requirements.md +213 -0
- package/templates/skills/application/references/test-frontend.md +3 -3
- package/templates/skills/application/steps/step-00-init.md +11 -141
- package/templates/skills/application/steps/step-01-navigation.md +3 -3
- package/templates/skills/application/steps/step-02-permissions.md +4 -4
- package/templates/skills/application/steps/step-03-roles.md +18 -175
- package/templates/skills/application/steps/step-03b-provider.md +1 -2
- package/templates/skills/application/steps/step-04-backend.md +19 -110
- package/templates/skills/application/steps/step-05-frontend.md +17 -143
- package/templates/skills/application/steps/step-06-migration.md +12 -60
- package/templates/skills/application/steps/step-07-tests.md +9 -76
- package/templates/skills/application/templates-backend.md +29 -27
- package/templates/skills/application/templates-frontend.md +48 -48
- package/templates/skills/application/templates-seed.md +57 -131
- package/templates/skills/business-analyse/SKILL.md +27 -30
- package/templates/skills/business-analyse/_architecture.md +6 -6
- package/templates/skills/business-analyse/_shared.md +60 -88
- package/templates/skills/business-analyse/questionnaire/04-data.md +3 -3
- package/templates/skills/business-analyse/questionnaire/06-security.md +1 -1
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +1 -1
- package/templates/skills/business-analyse/react/application-viewer.md +12 -12
- package/templates/skills/business-analyse/react/components.md +8 -12
- package/templates/skills/business-analyse/react/schema.md +11 -11
- package/templates/skills/business-analyse/references/agent-module-prompt.md +2 -3
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -0
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +2 -2
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -0
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -0
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +69 -0
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +1 -1
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -0
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +2 -2
- package/templates/skills/business-analyse/references/deploy-modes.md +5 -5
- package/templates/skills/business-analyse/references/detection-strategies.md +7 -7
- package/templates/skills/business-analyse/references/handoff-file-templates.md +14 -22
- package/templates/skills/business-analyse/references/handoff-mappings.md +4 -4
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -0
- package/templates/skills/business-analyse/references/init-schema-deployment.md +3 -3
- package/templates/skills/business-analyse/references/naming-conventions.md +22 -24
- package/templates/skills/business-analyse/references/prd-generation.md +2 -2
- package/templates/skills/business-analyse/references/review-data-mapping.md +2 -2
- package/templates/skills/business-analyse/references/robustness-checks.md +1 -1
- package/templates/skills/business-analyse/references/spec-auto-inference.md +3 -3
- package/templates/skills/business-analyse/references/team-orchestration.md +49 -6
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
- package/templates/skills/business-analyse/references/ui-resource-cards.md +18 -18
- package/templates/skills/business-analyse/references/validate-incremental-html.md +2 -2
- package/templates/skills/business-analyse/references/validation-checklist.md +2 -2
- package/templates/skills/business-analyse/schemas/application-schema.json +4 -5
- package/templates/skills/business-analyse/schemas/project-schema.json +1 -6
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +2 -3
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +4 -4
- package/templates/skills/business-analyse/steps/step-00-init.md +8 -17
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +35 -198
- package/templates/skills/business-analyse/steps/step-01b-applications.md +16 -20
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +1 -1
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +4 -4
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +1 -1
- package/templates/skills/business-analyse/steps/step-03b-ui.md +4 -4
- package/templates/skills/business-analyse/steps/step-03c-compile.md +66 -140
- package/templates/skills/business-analyse/steps/step-03d-validate.md +2 -2
- package/templates/skills/business-analyse/steps/step-04a-collect.md +2 -2
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +42 -160
- package/templates/skills/business-analyse/steps/step-04c-decide.md +1 -1
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +74 -104
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +13 -11
- package/templates/skills/business-analyse/steps/step-06-review.md +3 -3
- package/templates/skills/business-analyse/templates/tpl-frd.md +13 -13
- package/templates/skills/business-analyse/templates/tpl-handoff.md +12 -12
- package/templates/skills/business-analyse/templates-frd.md +25 -25
- package/templates/skills/business-analyse/templates-react.md +15 -21
- package/templates/skills/controller/SKILL.md +1 -1
- package/templates/skills/controller/postman-templates.md +1 -1
- package/templates/skills/controller/references/controller-code-templates.md +2 -2
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -0
- package/templates/skills/controller/references/permission-sync-templates.md +13 -16
- package/templates/skills/controller/steps/step-00-init.md +11 -11
- package/templates/skills/controller/steps/step-03-generate.md +64 -103
- package/templates/skills/controller/templates.md +67 -71
- package/templates/skills/debug/SKILL.md +13 -218
- package/templates/skills/debug/steps/step-00-init.md +57 -0
- package/templates/skills/debug/steps/step-01-analyze.md +219 -0
- package/templates/skills/debug/steps/step-02-resolve.md +85 -0
- package/templates/skills/documentation/SKILL.md +49 -345
- package/templates/skills/documentation/data-schema.md +11 -8
- package/templates/skills/documentation/steps/step-00-init.md +70 -0
- package/templates/skills/documentation/steps/step-01-scan.md +113 -0
- package/templates/skills/documentation/steps/step-02-generate.md +231 -0
- package/templates/skills/documentation/steps/step-03-validate.md +238 -0
- package/templates/skills/documentation/templates.md +480 -322
- package/templates/skills/efcore/references/both-contexts.md +32 -0
- package/templates/skills/efcore/references/database-operations.md +67 -0
- package/templates/skills/efcore/references/destructive-operations.md +38 -0
- package/templates/skills/efcore/references/reset-operations.md +81 -0
- package/templates/skills/efcore/references/seed-methods.md +86 -0
- package/templates/skills/efcore/references/shared-init-functions.md +250 -0
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -0
- package/templates/skills/efcore/references/troubleshooting.md +81 -0
- package/templates/skills/efcore/steps/db/step-deploy.md +1 -32
- package/templates/skills/efcore/steps/db/step-reset.md +7 -103
- package/templates/skills/efcore/steps/db/step-seed.md +10 -132
- package/templates/skills/efcore/steps/db/step-status.md +5 -44
- package/templates/skills/efcore/steps/migration/step-03-validate.md +8 -62
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +1 -57
- package/templates/skills/efcore/steps/shared/step-00-init.md +11 -254
- package/templates/skills/efcore/steps/squash/step-03-create.md +1 -58
- package/templates/skills/feature-full/SKILL.md +1 -1
- package/templates/skills/feature-full/steps/step-00-init.md +57 -0
- package/templates/skills/feature-full/steps/step-01-implementation.md +1 -1
- package/templates/skills/gitflow/SKILL.md +1 -1
- package/templates/skills/gitflow/_shared.md +23 -0
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -0
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -0
- package/templates/skills/gitflow/references/finish-cleanup.md +51 -0
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -0
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -0
- package/templates/skills/gitflow/references/init-questions.md +185 -0
- package/templates/skills/gitflow/references/init-structure-creation.md +71 -0
- package/templates/skills/gitflow/references/init-version-detection.md +21 -0
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -0
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -0
- package/templates/skills/gitflow/references/merge-execution.md +62 -0
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -0
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -0
- package/templates/skills/gitflow/references/pr-generation.md +58 -0
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -0
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -0
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -0
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -0
- package/templates/skills/gitflow/steps/step-commit.md +12 -91
- package/templates/skills/gitflow/steps/step-finish.md +15 -159
- package/templates/skills/gitflow/steps/step-init.md +24 -326
- package/templates/skills/gitflow/steps/step-merge.md +17 -176
- package/templates/skills/gitflow/steps/step-pr.md +10 -116
- package/templates/skills/gitflow/steps/step-start.md +16 -109
- package/templates/skills/gitflow/steps/step-sync.md +6 -69
- package/templates/skills/ralph-loop/SKILL.md +6 -0
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -0
- package/templates/skills/ralph-loop/references/compact-loop.md +1 -1
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -0
- package/templates/skills/ralph-loop/references/module-transition.md +151 -0
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -0
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -0
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +6 -9
- package/templates/skills/ralph-loop/references/team-orchestration.md +45 -3
- package/templates/skills/ralph-loop/steps/step-00-init.md +36 -109
- package/templates/skills/ralph-loop/steps/step-01-task.md +15 -163
- package/templates/skills/ralph-loop/steps/step-02-execute.md +8 -154
- package/templates/skills/ralph-loop/steps/step-04-check.md +21 -73
- package/templates/skills/review-code/references/owasp-api-top10.md +5 -5
- package/templates/skills/review-code/references/smartstack-conventions.md +11 -11
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -0
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -0
- package/templates/skills/validate-feature/steps/step-01-compile.md +5 -2
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +34 -145
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +74 -260
- package/templates/skills/workflow/SKILL.md +1 -1
- package/templates/skills/workflow/steps/step-00-init.md +57 -0
|
@@ -33,7 +33,7 @@ From previous steps:
|
|
|
33
33
|
|
|
34
34
|
| Variable | Description |
|
|
35
35
|
|----------|-------------|
|
|
36
|
-
| `{level}` |
|
|
36
|
+
| `{level}` | application, module, or section |
|
|
37
37
|
| `{code}` | kebab-case identifier |
|
|
38
38
|
| `{full_path}` | Complete navigation path |
|
|
39
39
|
| `{labels}` | Object with fr, en, it, de |
|
|
@@ -82,7 +82,6 @@ Using the SeedData files as data sources, generate the `{AppPascalName}SeedDataP
|
|
|
82
82
|
Adapt the template:
|
|
83
83
|
- Replace `{AppPascalName}` with the PascalCase application name
|
|
84
84
|
- Replace `{app_code}` with the kebab-case application code
|
|
85
|
-
- Replace `{context_code}` with the parent context code
|
|
86
85
|
- Fill in the actual navigation, permission, and role-permission creation logic
|
|
87
86
|
using the helper methods from the SeedData classes
|
|
88
87
|
|
|
@@ -32,7 +32,7 @@ From previous steps:
|
|
|
32
32
|
|
|
33
33
|
| Variable | Description |
|
|
34
34
|
|----------|-------------|
|
|
35
|
-
| `{level}` |
|
|
35
|
+
| `{level}` | application, module, or section |
|
|
36
36
|
| `{code}` | kebab-case identifier |
|
|
37
37
|
| `{full_path}` | Complete navigation path (navRoute) |
|
|
38
38
|
| `{labels}` | Object with fr, en, it, de |
|
|
@@ -53,32 +53,12 @@ code: "user-profiles" → entityName: "UserProfile"
|
|
|
53
53
|
|
|
54
54
|
### 2. Determine Table Prefix and Controller Folder
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
| Context | Table Prefix | Controller Folder |
|
|
63
|
-
|---------|--------|-------------------|
|
|
64
|
-
| platform.administration | `auth_` or `cfg_` | `Admin` |
|
|
65
|
-
| platform.support | `support_` | `Support` |
|
|
66
|
-
| business.* | `ref_` or domain-specific | `Business` |
|
|
67
|
-
| personal.* | `usr_` | `User` |
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
# Check for feature.json tablePrefix
|
|
71
|
-
Search for feature.json in:
|
|
72
|
-
- docs/business/{application}/business-analyse/*/feature.json
|
|
73
|
-
- Read metadata.tablePrefix if exists
|
|
74
|
-
|
|
75
|
-
IF metadata.tablePrefix exists:
|
|
76
|
-
{prefix} = metadata.tablePrefix # e.g., "rh_"
|
|
77
|
-
ELSE:
|
|
78
|
-
{prefix} = derived from context table above
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Store: `{controller_folder}` = the Controller Folder from the table above.
|
|
56
|
+
See [references/backend-table-prefix-mapping.md](../references/backend-table-prefix-mapping.md) for:
|
|
57
|
+
- Table prefix priority (feature.json vs. fallback)
|
|
58
|
+
- Application-to-prefix mapping table
|
|
59
|
+
- Feature.json detection and extraction
|
|
60
|
+
- Controller folder organization
|
|
61
|
+
- Store `{controller_folder}` from the mapping
|
|
82
62
|
|
|
83
63
|
### 3. Call MCP scaffold_extension
|
|
84
64
|
|
|
@@ -100,93 +80,22 @@ Args:
|
|
|
100
80
|
|
|
101
81
|
### 4. Parse MCP Response
|
|
102
82
|
|
|
103
|
-
The tool generates (paths organized by navRoute hierarchy `{
|
|
104
|
-
- `Domain/{
|
|
105
|
-
- `Infrastructure/Persistence/Configurations/{
|
|
83
|
+
The tool generates (paths organized by navRoute hierarchy `{application}.{module}`):
|
|
84
|
+
- `Domain/{Application}/{Module}/{EntityName}.cs` - Entity with BaseEntity
|
|
85
|
+
- `Infrastructure/Persistence/Configurations/{Application}/{Module}/{EntityName}Configuration.cs` - EF Config
|
|
106
86
|
- `Application/Common/Interfaces/I{EntityName}Service.cs` - Service Interface
|
|
107
|
-
- `Infrastructure/Services/{
|
|
87
|
+
- `Infrastructure/Services/{Application}/{Module}/{EntityName}Service.cs` - Service Implementation
|
|
108
88
|
- `Api/Controllers/{controller_folder}/{Application}/{EntityName}Controller.cs` - REST Controller
|
|
109
|
-
- `Application/{
|
|
110
|
-
- `Application/{
|
|
111
|
-
- `Application/{
|
|
112
|
-
|
|
113
|
-
### 5. Present Output to User
|
|
114
|
-
|
|
115
|
-
```markdown
|
|
116
|
-
## Backend Code Generated
|
|
117
|
-
|
|
118
|
-
### Domain Layer
|
|
119
|
-
- `Domain/{Context}/{Application}/{Module}/{EntityName}.cs`
|
|
120
|
-
|
|
121
|
-
### Infrastructure Layer
|
|
122
|
-
- `Persistence/Configurations/{Context}/{Application}/{Module}/{EntityName}Configuration.cs`
|
|
123
|
-
- `Services/{Context}/{Application}/{Module}/{EntityName}Service.cs`
|
|
124
|
-
|
|
125
|
-
### Application Layer
|
|
126
|
-
- `Common/Interfaces/I{EntityName}Service.cs`
|
|
127
|
-
- `{Context}/{Application}/{Module}/DTOs/{EntityName}ResponseDto.cs`
|
|
128
|
-
- `{Context}/{Application}/{Module}/DTOs/Create{EntityName}Dto.cs`
|
|
129
|
-
- `{Context}/{Application}/{Module}/DTOs/Update{EntityName}Dto.cs`
|
|
130
|
-
|
|
131
|
-
### API Layer
|
|
132
|
-
- `Controllers/{controller_folder}/{Application}/{EntityName}Controller.cs`
|
|
133
|
-
- NavRoute: `{full_path}`
|
|
134
|
-
- Endpoints:
|
|
135
|
-
- GET /api/{code} - List all
|
|
136
|
-
- GET /api/{code}/{id} - Get by ID
|
|
137
|
-
- POST /api/{code} - Create
|
|
138
|
-
- PUT /api/{code}/{id} - Update
|
|
139
|
-
- DELETE /api/{code}/{id} - Delete
|
|
140
|
-
|
|
141
|
-
### Next Steps
|
|
142
|
-
1. Add DbSet to ICoreDbContext: `public DbSet<{EntityName}> {EntityName}s => Set<{EntityName}>();`
|
|
143
|
-
2. Register service in DI: `services.AddScoped<I{EntityName}Service, {EntityName}Service>();`
|
|
144
|
-
3. Run: `dotnet ef migrations add core_vX.X.X_XXX_Add{EntityName}`
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### 6. Entity Seeding (Optional)
|
|
148
|
-
|
|
149
|
-
> Ask the user if they want to seed initial data for the entity.
|
|
150
|
-
> This creates runtime seed data (applied at startup via DevDataSeeder), following the same
|
|
151
|
-
> architecture as core (SeedData provider pattern).
|
|
152
|
-
|
|
153
|
-
```yaml
|
|
154
|
-
questions:
|
|
155
|
-
- header: "Seed Data"
|
|
156
|
-
question: "Would you like to generate initial seed data for {EntityName}?"
|
|
157
|
-
options:
|
|
158
|
-
- label: "Yes - Generate SeedData provider"
|
|
159
|
-
description: "Creates {EntityName}SeedData.cs + registers in DevDataSeeder (same pattern as core)"
|
|
160
|
-
- label: "No - Skip seeding"
|
|
161
|
-
description: "Entity starts empty (can add seed data later)"
|
|
162
|
-
multiSelect: false
|
|
163
|
-
```
|
|
89
|
+
- `Application/{Application}/{Module}/DTOs/{EntityName}ResponseDto.cs` - Response DTO
|
|
90
|
+
- `Application/{Application}/{Module}/DTOs/Create{EntityName}Dto.cs` - Create request
|
|
91
|
+
- `Application/{Application}/{Module}/DTOs/Update{EntityName}Dto.cs` - Update request
|
|
164
92
|
|
|
165
|
-
|
|
93
|
+
### 5-7. Present Output, Entity Seeding & Store Info
|
|
166
94
|
|
|
167
|
-
See [references/backend-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
#### If User Selects NO:
|
|
172
|
-
|
|
173
|
-
Skip this section and proceed to storing entity info.
|
|
174
|
-
|
|
175
|
-
```markdown
|
|
176
|
-
> Skipping entity seed data. You can generate it later using the SeedData provider pattern
|
|
177
|
-
> documented in templates-seed.md.
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### 7. Store Entity Info
|
|
181
|
-
|
|
182
|
-
Store entity information for frontend generation:
|
|
183
|
-
|
|
184
|
-
```
|
|
185
|
-
{entity_name} = "{EntityName}"
|
|
186
|
-
{entity_code} = "{code}"
|
|
187
|
-
{api_route} = "/api/{code}"
|
|
188
|
-
{has_seed_data} = true/false // Whether SeedData provider was generated
|
|
189
|
-
```
|
|
95
|
+
See [references/backend-seeding-and-dto-output.md](../references/backend-seeding-and-dto-output.md) for:
|
|
96
|
+
- Output formatting by layer (Domain, Infrastructure, Application, API)
|
|
97
|
+
- Entity seeding questions and responses
|
|
98
|
+
- Entity info storage for frontend generation
|
|
190
99
|
|
|
191
100
|
---
|
|
192
101
|
|
|
@@ -42,15 +42,11 @@ From previous steps:
|
|
|
42
42
|
|
|
43
43
|
## ROUTE NAMING RULE
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
> - **FORBIDDEN:** `humanresources`, `timemanagement` (concatenated words without hyphens)
|
|
51
|
-
> - **REQUIRED:** `human-resources`, `time-management` (proper kebab-case)
|
|
52
|
-
>
|
|
53
|
-
> Route paths MUST match the navigation seed data routes (which use `ToKebabCase()`).
|
|
45
|
+
See [references/frontend-route-naming.md](../references/frontend-route-naming.md) for:
|
|
46
|
+
- Kebab-case transformation rules
|
|
47
|
+
- Forbidden patterns (concatenated words)
|
|
48
|
+
- Required patterns (hyphens in multi-word segments)
|
|
49
|
+
- Verification against navigation seed data
|
|
54
50
|
|
|
55
51
|
---
|
|
56
52
|
|
|
@@ -65,7 +61,7 @@ Args:
|
|
|
65
61
|
name: "{entity_name}"
|
|
66
62
|
options:
|
|
67
63
|
navRoute: "{full_path}"
|
|
68
|
-
outputPath: "web/src/pages/{
|
|
64
|
+
outputPath: "web/src/pages/{application}/{module}"
|
|
69
65
|
dryRun: false
|
|
70
66
|
```
|
|
71
67
|
|
|
@@ -116,123 +112,19 @@ This generates:
|
|
|
116
112
|
|
|
117
113
|
### 4. Wire Routes to App.tsx (BLOCKING)
|
|
118
114
|
|
|
119
|
-
|
|
115
|
+
See [references/frontend-route-wiring-app-tsx.md](../references/frontend-route-wiring-app-tsx.md) for:
|
|
116
|
+
- Step 4a: Import page components
|
|
117
|
+
- Step 4b: Detect App.tsx routing pattern (Pattern A vs Pattern B)
|
|
118
|
+
- Step 4c: Application-to-Layout mapping table
|
|
119
|
+
- Step 4d: Route wiring verification
|
|
120
|
+
- Forbidden patterns (absolute paths, outside Layout, createBrowserRouter)
|
|
120
121
|
|
|
121
|
-
|
|
122
|
+
### 5-6. Verify i18n & Present Output
|
|
122
123
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
// Or lazy-loaded:
|
|
128
|
-
const {EntityName}Page = lazy(() => import('@/pages/{Context}/{Application}/{Module}/{EntityName}Page'));
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**Step 4b:** Detect the App.tsx routing pattern:
|
|
132
|
-
|
|
133
|
-
Read App.tsx and detect which pattern is used:
|
|
134
|
-
|
|
135
|
-
**Pattern A** — If App.tsx contains `contextRoutes: ContextRouteExtensions`:
|
|
136
|
-
→ Add routes to `contextRoutes.{context}[]` with **RELATIVE** paths (no leading `/`)
|
|
137
|
-
|
|
138
|
-
```tsx
|
|
139
|
-
const contextRoutes: ContextRouteExtensions = {
|
|
140
|
-
business: [
|
|
141
|
-
// existing routes...
|
|
142
|
-
{ path: '{application_kebab}/{module_kebab}', element: <{EntityName}ListPage /> },
|
|
143
|
-
{ path: '{application_kebab}/{module_kebab}/new', element: <Create{EntityName}Page /> },
|
|
144
|
-
{ path: '{application_kebab}/{module_kebab}/:id', element: <{EntityName}DetailPage /> },
|
|
145
|
-
{ path: '{application_kebab}/{module_kebab}/:id/edit', element: <Create{EntityName}Page /> },
|
|
146
|
-
],
|
|
147
|
-
};
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Routes are automatically injected into BOTH standard (`/business/...`) and tenant-prefixed (`/t/:slug/business/...`) route trees by `mergeRoutes()`. No manual duplication needed.
|
|
151
|
-
|
|
152
|
-
**Pattern B** — If App.tsx contains `<Route path="/{context}" element={<{Layout} />}>` (JSX Routes):
|
|
153
|
-
→ Insert `<Route>` children inside the Layout wrapper (see below)
|
|
154
|
-
|
|
155
|
-
```tsx
|
|
156
|
-
<Route path="/business" element={<BusinessLayout />}>
|
|
157
|
-
{/* ... existing routes ... */}
|
|
158
|
-
<Route path="{application_kebab}/{module_kebab}" element={<{EntityName}Page />} />
|
|
159
|
-
</Route>
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
ALSO add the same routes inside the tenant-prefixed block:
|
|
163
|
-
Find `<Route path="/t/:slug">` and add the **same route entries** there.
|
|
164
|
-
|
|
165
|
-
**Step 4c:** Context-to-Layout mapping:
|
|
166
|
-
|
|
167
|
-
| Context | Layout Component | Route path |
|
|
168
|
-
|---------|------------------|------------|
|
|
169
|
-
| `platform.*` | `AdminLayout` | `/platform` |
|
|
170
|
-
| `business.*` | `BusinessLayout` | `/business` |
|
|
171
|
-
| `personal.*` | `UserLayout` | `/personal/myspace` |
|
|
172
|
-
|
|
173
|
-
**Step 4d:** Verify wiring:
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
Tool: mcp__smartstack__validate_frontend_routes
|
|
177
|
-
Args:
|
|
178
|
-
scope: "routes"
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
If `appWiring.issues` is not empty, fix the wiring before proceeding.
|
|
182
|
-
|
|
183
|
-
**FORBIDDEN (both patterns):**
|
|
184
|
-
- Adding business/platform/personal routes to `clientRoutes[]` with absolute paths — `clientRoutes` is ONLY for routes outside SmartStack contexts (e.g., `/about`, `/pricing`)
|
|
185
|
-
- Adding routes OUTSIDE the Layout wrapper (shell will not render)
|
|
186
|
-
- Using `createBrowserRouter` (SmartStack uses `useRoutes()` + `mergeRoutes()`)
|
|
187
|
-
|
|
188
|
-
### 5. Verify i18n Files
|
|
189
|
-
|
|
190
|
-
> **Note:** i18n files are now auto-generated by `type: "page"` scaffold (step 1).
|
|
191
|
-
> Verify the 4 language files were created and customize the `title`/`subtitle` with the proper labels.
|
|
192
|
-
|
|
193
|
-
If the generated translations need customization (e.g., replacing generic title with `{labels.fr}`):
|
|
194
|
-
- `i18n/locales/fr/{entityCode}.json` → set `"title": "{labels.fr}"`
|
|
195
|
-
- `i18n/locales/en/{entityCode}.json` → set `"title": "{labels.en}"`
|
|
196
|
-
- `i18n/locales/it/{entityCode}.json` → set `"title": "{labels.it}"`
|
|
197
|
-
- `i18n/locales/de/{entityCode}.json` → set `"title": "{labels.de}"`
|
|
198
|
-
|
|
199
|
-
### 6. Present Output to User
|
|
200
|
-
|
|
201
|
-
```markdown
|
|
202
|
-
## Frontend Code Generated
|
|
203
|
-
|
|
204
|
-
### Pages
|
|
205
|
-
- `pages/{context}/{application}/{module}/{EntityName}Page.tsx`
|
|
206
|
-
- `pages/{context}/{application}/{module}/{EntityName}ListView.tsx`
|
|
207
|
-
|
|
208
|
-
### Components
|
|
209
|
-
- `components/{context}/{module}/{EntityName}.tsx`
|
|
210
|
-
- `hooks/use{EntityName}.ts`
|
|
211
|
-
|
|
212
|
-
### API Client
|
|
213
|
-
- `services/api/{entityCode}Api.ts`
|
|
214
|
-
- `types/{entityName}.types.ts`
|
|
215
|
-
|
|
216
|
-
### Routes
|
|
217
|
-
- Updated `navRoutes.generated.ts`
|
|
218
|
-
- Generated `clientRoutes.generated.tsx`
|
|
219
|
-
- Wired routes in `App.tsx` (standard + tenant blocks)
|
|
220
|
-
|
|
221
|
-
### i18n
|
|
222
|
-
- `locales/fr/{entityCode}.json`
|
|
223
|
-
- `locales/en/{entityCode}.json`
|
|
224
|
-
- `locales/it/{entityCode}.json`
|
|
225
|
-
- `locales/de/{entityCode}.json`
|
|
226
|
-
|
|
227
|
-
### Route Configuration
|
|
228
|
-
```tsx
|
|
229
|
-
// In routes.tsx - NESTED routes (not flat!)
|
|
230
|
-
<Route path="{application_kebab}">
|
|
231
|
-
<Route index element={<Navigate to="{module_kebab}" replace />} />
|
|
232
|
-
<Route path="{module_kebab}" element={<{EntityName}Page />} />
|
|
233
|
-
</Route>
|
|
234
|
-
```
|
|
235
|
-
```
|
|
124
|
+
See [references/frontend-i18n-and-output.md](../references/frontend-i18n-and-output.md) for:
|
|
125
|
+
- i18n structure (4 language files)
|
|
126
|
+
- Customization of labels from feature context
|
|
127
|
+
- Output formatting by category (Pages, Components, API Client, Routes, i18n)
|
|
236
128
|
|
|
237
129
|
---
|
|
238
130
|
|
|
@@ -244,24 +136,6 @@ See [references/frontend-verification.md](../references/frontend-verification.md
|
|
|
244
136
|
|
|
245
137
|
---
|
|
246
138
|
|
|
247
|
-
## I18N STRUCTURE
|
|
248
|
-
|
|
249
|
-
All i18n files must follow this structure:
|
|
250
|
-
|
|
251
|
-
```
|
|
252
|
-
locales/
|
|
253
|
-
├── fr/
|
|
254
|
-
│ └── {entityCode}.json
|
|
255
|
-
├── en/
|
|
256
|
-
│ └── {entityCode}.json
|
|
257
|
-
├── it/
|
|
258
|
-
│ └── {entityCode}.json
|
|
259
|
-
└── de/
|
|
260
|
-
└── {entityCode}.json
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
---
|
|
264
|
-
|
|
265
139
|
## POST-GENERATION VERIFICATION (MANDATORY)
|
|
266
140
|
|
|
267
141
|
**Before proceeding to step-06, run all 7 checks on generated frontend files.**
|
|
@@ -39,26 +39,11 @@ From previous steps:
|
|
|
39
39
|
|
|
40
40
|
### 0. Pre-Migration Build Verification (BLOCKING)
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
dotnet build {SolutionName}.sln --no-restore
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
IF build fails:
|
|
51
|
-
- Fix all compilation errors before proceeding
|
|
52
|
-
- Common causes at this stage:
|
|
53
|
-
- Missing DbSet registration (should have been caught in step-04 Check 2)
|
|
54
|
-
- Missing DI registration (should have been caught in step-04 Check 3)
|
|
55
|
-
- Circular references between generated services
|
|
56
|
-
- Missing package references (e.g., FluentValidation)
|
|
57
|
-
- Frontend changes that modified shared files
|
|
58
|
-
- Re-run build until successful
|
|
59
|
-
- DO NOT attempt migration creation on a broken build
|
|
60
|
-
|
|
61
|
-
**After build succeeds:** Continue to migration name suggestion.
|
|
42
|
+
See [references/migration-checklist-troubleshooting.md](../references/migration-checklist-troubleshooting.md) for:
|
|
43
|
+
- Build verification command
|
|
44
|
+
- Common compilation causes
|
|
45
|
+
- Fix strategies
|
|
46
|
+
- Quick recovery commands
|
|
62
47
|
|
|
63
48
|
### 1. Get Migration Name Suggestion
|
|
64
49
|
|
|
@@ -103,29 +88,11 @@ dotnet ef migrations add {suggested_migration_name} --context ExtensionsDbContex
|
|
|
103
88
|
|
|
104
89
|
### 2b. Inject SQL Objects (if any exist)
|
|
105
90
|
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
Glob: **/Persistence/SqlObjects/Functions/*.sql
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
If SQL files are found, the migration's `Up()` method should include a call to re-apply all SQL objects:
|
|
112
|
-
```csharp
|
|
113
|
-
// At the end of the Up() method:
|
|
114
|
-
SqlObjectHelper.ApplyAll(migrationBuilder);
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
This ensures SQL functions/views are re-applied with each migration (`CREATE OR ALTER` = idempotent).
|
|
91
|
+
See [references/migration-checklist-troubleshooting.md](../references/migration-checklist-troubleshooting.md) for SQL Objects injection pattern.
|
|
118
92
|
|
|
119
93
|
### 3. Verify Migration Content
|
|
120
94
|
|
|
121
|
-
|
|
122
|
-
- Navigation entity (Context/Application/Module/Section)
|
|
123
|
-
- Navigation translations (4 languages)
|
|
124
|
-
- Permissions (CRUD + wildcard)
|
|
125
|
-
- RolePermissions (role assignments)
|
|
126
|
-
- Domain entity table
|
|
127
|
-
- Indexes and constraints
|
|
128
|
-
- SQL Objects injection (if any .sql files exist)
|
|
95
|
+
See [references/migration-checklist-troubleshooting.md](../references/migration-checklist-troubleshooting.md) for complete migration content verification checklist.
|
|
129
96
|
|
|
130
97
|
### 4. Apply Migration
|
|
131
98
|
|
|
@@ -205,26 +172,11 @@ dotnet ef database update --context ExtensionsDbContext
|
|
|
205
172
|
|
|
206
173
|
## TROUBLESHOOTING
|
|
207
174
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
| Permission 403 errors | Verify Permissions.cs and PermissionConfiguration.cs are in sync |
|
|
214
|
-
| Navigation not visible | Check user role has appropriate permissions |
|
|
215
|
-
| Route not found | Verify nested route structure in routes.tsx |
|
|
216
|
-
| i18n missing | Check locale files exist and are properly loaded |
|
|
217
|
-
|
|
218
|
-
### Quick Fixes
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
# Rebuild and restart
|
|
222
|
-
dotnet build
|
|
223
|
-
dotnet ef database update
|
|
224
|
-
|
|
225
|
-
# Clear frontend cache
|
|
226
|
-
cd web && rm -rf node_modules/.cache && npm run dev
|
|
227
|
-
```
|
|
175
|
+
See [references/migration-checklist-troubleshooting.md](../references/migration-checklist-troubleshooting.md) for:
|
|
176
|
+
- Common issues and solutions
|
|
177
|
+
- Quick fix commands
|
|
178
|
+
- Database reset procedures
|
|
179
|
+
- Final verification checklist
|
|
228
180
|
|
|
229
181
|
---
|
|
230
182
|
|
|
@@ -195,82 +195,15 @@ This generates:
|
|
|
195
195
|
|
|
196
196
|
## POST-GENERATION VERIFICATION (MANDATORY)
|
|
197
197
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
REQUIRED pattern:
|
|
208
|
-
GetAll_WhenCalled_ShouldReturn200WithList
|
|
209
|
-
Create_WhenDuplicateCode_ShouldThrowException
|
|
210
|
-
Delete_WhenNotAuthenticated_ShouldReturn401
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### 2. Test Structure Check (BLOCKING)
|
|
214
|
-
|
|
215
|
-
All tests MUST follow Arrange-Act-Assert:
|
|
216
|
-
|
|
217
|
-
```csharp
|
|
218
|
-
// CORRECT
|
|
219
|
-
[Fact]
|
|
220
|
-
public async Task GetById_WhenExists_ShouldReturn200()
|
|
221
|
-
{
|
|
222
|
-
// Arrange
|
|
223
|
-
var id = Guid.NewGuid();
|
|
224
|
-
// ...
|
|
225
|
-
|
|
226
|
-
// Act
|
|
227
|
-
var response = await _client.GetAsync($"/api/{entityCode}/{id}");
|
|
228
|
-
|
|
229
|
-
// Assert
|
|
230
|
-
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
|
231
|
-
}
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### 3. Dependencies Check (BLOCKING)
|
|
235
|
-
|
|
236
|
-
Verify test project references:
|
|
237
|
-
- `FluentAssertions` (NOT `Assert.Equal`)
|
|
238
|
-
- `Moq` (NOT manual fakes)
|
|
239
|
-
- `xunit` (NOT NUnit or MSTest)
|
|
240
|
-
|
|
241
|
-
### 4. Coverage Check
|
|
242
|
-
|
|
243
|
-
Minimum test coverage per category:
|
|
244
|
-
|
|
245
|
-
| Category | Minimum Tests |
|
|
246
|
-
|----------|---------------|
|
|
247
|
-
| Controller (mock) | 10 (CRUD + auth + tenant) |
|
|
248
|
-
| Controller (real integration) | 8 (CRUD + persistence + tenant isolation) |
|
|
249
|
-
| Service | 8 (CRUD + errors) |
|
|
250
|
-
| Entity | 5 (factory + update + validation) |
|
|
251
|
-
| Validator | 8 (code + name + security) |
|
|
252
|
-
| Repository | 8 (CRUD + tenant + pagination) |
|
|
253
|
-
| Security | 10 (auth + injection + headers) |
|
|
254
|
-
|
|
255
|
-
### 5. Build Check (BLOCKING)
|
|
256
|
-
|
|
257
|
-
```bash
|
|
258
|
-
dotnet build tests/{SolutionName}.Tests/{SolutionName}.Tests.csproj
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
If build fails, fix compilation errors before proceeding.
|
|
262
|
-
|
|
263
|
-
### 6. Test Run (BLOCKING)
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
dotnet test tests/{SolutionName}.Tests/{SolutionName}.Tests.csproj --no-build --verbosity normal
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
**ALL tests MUST pass.** If tests fail:
|
|
270
|
-
1. Read the failure output carefully
|
|
271
|
-
2. Fix the failing tests or the code they test
|
|
272
|
-
3. Re-run until all tests pass
|
|
273
|
-
4. Do NOT proceed to the next step until all tests are green
|
|
198
|
+
See [references/test-coverage-requirements.md](../references/test-coverage-requirements.md) for:
|
|
199
|
+
- **Naming Convention Check** (BLOCKING) — `{Method}_When{Condition}_Should{Result}` pattern
|
|
200
|
+
- **Test Structure Check** (BLOCKING) — Arrange-Act-Assert format
|
|
201
|
+
- **Dependencies Check** (BLOCKING) — FluentAssertions, Moq, xunit
|
|
202
|
+
- **Coverage Check** — Minimum tests per category (CRUD + auth + tenant + persistence + security)
|
|
203
|
+
- **Build Check** (BLOCKING) — `dotnet build` must succeed
|
|
204
|
+
- **Test Run** (BLOCKING) — `dotnet test` must pass 100%
|
|
205
|
+
- **Real Integration Test Coverage** — DB persistence verification
|
|
206
|
+
- **Security Test Categories** — OWASP coverage
|
|
274
207
|
|
|
275
208
|
---
|
|
276
209
|
|
|
@@ -9,35 +9,37 @@
|
|
|
9
9
|
```csharp
|
|
10
10
|
// Add to src/SmartStack.Application/Common/Authorization/Permissions.cs
|
|
11
11
|
|
|
12
|
-
public static class $
|
|
12
|
+
public static class $APPLICATION_PASCAL
|
|
13
13
|
{
|
|
14
|
-
public const string Access = "$
|
|
14
|
+
public const string Access = "$application";
|
|
15
15
|
|
|
16
16
|
public static class $MODULE_PASCAL
|
|
17
17
|
{
|
|
18
|
-
public const string View = "$
|
|
19
|
-
public const string Create = "$
|
|
20
|
-
public const string Update = "$
|
|
21
|
-
public const string Delete = "$
|
|
22
|
-
public const string Assign = "$
|
|
23
|
-
public const string Execute = "$
|
|
18
|
+
public const string View = "$application.$module.read";
|
|
19
|
+
public const string Create = "$application.$module.create";
|
|
20
|
+
public const string Update = "$application.$module.update";
|
|
21
|
+
public const string Delete = "$application.$module.delete";
|
|
22
|
+
public const string Assign = "$application.$module.assign";
|
|
23
|
+
public const string Execute = "$application.$module.execute";
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
### Example for
|
|
28
|
+
### Example for Sales > Products
|
|
29
29
|
|
|
30
30
|
```csharp
|
|
31
|
-
public static class
|
|
31
|
+
public static class Sales
|
|
32
32
|
{
|
|
33
|
-
public const string Access = "
|
|
33
|
+
public const string Access = "sales";
|
|
34
34
|
|
|
35
35
|
public static class Products
|
|
36
36
|
{
|
|
37
|
-
public const string View = "
|
|
38
|
-
public const string Create = "
|
|
39
|
-
public const string Update = "
|
|
40
|
-
public const string Delete = "
|
|
37
|
+
public const string View = "sales.products.read";
|
|
38
|
+
public const string Create = "sales.products.create";
|
|
39
|
+
public const string Update = "sales.products.update";
|
|
40
|
+
public const string Delete = "sales.products.delete";
|
|
41
|
+
public const string Assign = "sales.products.assign";
|
|
42
|
+
public const string Execute = "sales.products.execute";
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
```
|
|
@@ -49,7 +51,7 @@ public static class Erp
|
|
|
49
51
|
```csharp
|
|
50
52
|
// src/SmartStack.Application/Common/Interfaces/I{Module}Service.cs
|
|
51
53
|
|
|
52
|
-
using SmartStack.Application.$
|
|
54
|
+
using SmartStack.Application.$APPLICATION_PASCAL.$MODULE_PASCAL.DTOs;
|
|
53
55
|
|
|
54
56
|
namespace SmartStack.Application.Common.Interfaces;
|
|
55
57
|
|
|
@@ -89,15 +91,15 @@ public interface I$MODULE_PASCALService
|
|
|
89
91
|
> - NEVER use `Guid.Empty` as a placeholder — resolve the actual value from `_currentUser`
|
|
90
92
|
|
|
91
93
|
```csharp
|
|
92
|
-
// src/SmartStack.Infrastructure/Services/$
|
|
94
|
+
// src/SmartStack.Infrastructure/Services/$APPLICATION_PASCAL/$MODULE_PASCAL/$MODULE_PASCALService.cs
|
|
93
95
|
|
|
94
96
|
using Microsoft.EntityFrameworkCore;
|
|
95
97
|
using Microsoft.Extensions.Logging;
|
|
96
98
|
using SmartStack.Application.Common.Interfaces;
|
|
97
|
-
using SmartStack.Application.$
|
|
98
|
-
using SmartStack.Domain.$
|
|
99
|
+
using SmartStack.Application.$APPLICATION_PASCAL.$MODULE_PASCAL.DTOs;
|
|
100
|
+
using SmartStack.Domain.$APPLICATION_PASCAL.$MODULE_PASCAL;
|
|
99
101
|
|
|
100
|
-
namespace SmartStack.Infrastructure.Services.$
|
|
102
|
+
namespace SmartStack.Infrastructure.Services.$APPLICATION_PASCAL.$MODULE_PASCAL;
|
|
101
103
|
|
|
102
104
|
public class $MODULE_PASCALService : I$MODULE_PASCALService
|
|
103
105
|
{
|
|
@@ -280,9 +282,9 @@ public class $MODULE_PASCALService : I$MODULE_PASCALService
|
|
|
280
282
|
## TEMPLATE: DTOs
|
|
281
283
|
|
|
282
284
|
```csharp
|
|
283
|
-
// src/SmartStack.Application/$
|
|
285
|
+
// src/SmartStack.Application/$APPLICATION_PASCAL/$MODULE_PASCAL/DTOs/$ENTITY_PASCALDto.cs
|
|
284
286
|
|
|
285
|
-
namespace SmartStack.Application.$
|
|
287
|
+
namespace SmartStack.Application.$APPLICATION_PASCAL.$MODULE_PASCAL.DTOs;
|
|
286
288
|
|
|
287
289
|
public record $ENTITY_PASCALDto
|
|
288
290
|
{
|
|
@@ -321,11 +323,11 @@ public record $ENTITY_PASCALQueryParameters
|
|
|
321
323
|
## TEMPLATE: DOMAIN ENTITY
|
|
322
324
|
|
|
323
325
|
```csharp
|
|
324
|
-
// src/SmartStack.Domain/$
|
|
326
|
+
// src/SmartStack.Domain/$APPLICATION_PASCAL/$MODULE_PASCAL/$ENTITY_PASCAL.cs
|
|
325
327
|
|
|
326
328
|
using SmartStack.Domain.Common;
|
|
327
329
|
|
|
328
|
-
namespace SmartStack.Domain.$
|
|
330
|
+
namespace SmartStack.Domain.$APPLICATION_PASCAL.$MODULE_PASCAL;
|
|
329
331
|
|
|
330
332
|
public class $ENTITY_PASCAL : BaseEntity
|
|
331
333
|
{
|
|
@@ -370,13 +372,13 @@ public class $ENTITY_PASCAL : BaseEntity
|
|
|
370
372
|
## TEMPLATE: EF CONFIGURATION
|
|
371
373
|
|
|
372
374
|
```csharp
|
|
373
|
-
// src/SmartStack.Infrastructure/Persistence/Configurations/$
|
|
375
|
+
// src/SmartStack.Infrastructure/Persistence/Configurations/$APPLICATION_PASCAL/$MODULE_PASCAL/$ENTITY_PASCALConfiguration.cs
|
|
374
376
|
|
|
375
377
|
using Microsoft.EntityFrameworkCore;
|
|
376
378
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
377
|
-
using SmartStack.Domain.$
|
|
379
|
+
using SmartStack.Domain.$APPLICATION_PASCAL.$MODULE_PASCAL;
|
|
378
380
|
|
|
379
|
-
namespace SmartStack.Infrastructure.Persistence.Configurations.$
|
|
381
|
+
namespace SmartStack.Infrastructure.Persistence.Configurations.$APPLICATION_PASCAL.$MODULE_PASCAL;
|
|
380
382
|
|
|
381
383
|
public class $ENTITY_PASCALConfiguration : IEntityTypeConfiguration<$ENTITY_PASCAL>
|
|
382
384
|
{
|