@atlashub/smartstack-cli 1.13.2 → 1.14.1
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/agents.html +1 -1
- package/.documentation/apex.html +1 -1
- package/.documentation/business-analyse.html +1 -1
- package/.documentation/cli-commands.html +3 -3
- package/.documentation/commands.html +1 -1
- package/.documentation/efcore.html +1 -1
- package/.documentation/gitflow.html +231 -236
- package/.documentation/hooks.html +1 -1
- package/.documentation/index.html +1 -1
- package/.documentation/init.html +3 -3
- package/.documentation/installation.html +1075 -351
- package/.documentation/ralph-loop.html +1 -1
- package/.documentation/test-web.html +1 -1
- package/README.md +88 -20
- package/config/default-config.json +10 -1
- package/dist/index.js +276 -85
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/code-reviewer.md +163 -0
- package/templates/agents/efcore/db-deploy.md +25 -7
- package/templates/agents/efcore/db-reset.md +31 -10
- package/templates/agents/efcore/db-status.md +22 -5
- package/templates/agents/efcore/migration.md +70 -20
- package/templates/agents/gitflow/cleanup.md +8 -1
- package/templates/agents/gitflow/commit.md +7 -5
- package/templates/agents/gitflow/finish.md +6 -4
- package/templates/agents/gitflow/pr.md +8 -1
- package/templates/agents/gitflow/start.md +1 -1
- package/templates/commands/check-version.md +267 -0
- package/templates/commands/efcore/_shared.md +31 -2
- package/templates/commands/efcore/db-reset.md +18 -6
- package/templates/commands/efcore/migration.md +1 -1
- package/templates/commands/efcore/rebase-snapshot.md +1 -1
- package/templates/commands/efcore/squash.md +1 -0
- package/templates/commands/refactor.md +164 -0
- package/templates/project/DependencyInjection.Application.cs.template +25 -0
- package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -0
- package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -0
- package/templates/project/ExampleEntity.cs.template +116 -0
- package/templates/project/ExampleEntityConfiguration.cs.template +64 -0
- package/templates/project/ExampleService.cs.template +146 -0
- package/templates/project/ExtensionsDbContext.cs.template +41 -0
- package/templates/project/IExtensionsDbContext.cs.template +22 -0
- package/templates/project/Program.cs.template +47 -0
- package/templates/project/README.md +79 -0
- package/templates/ralph/README.md +10 -8
- package/templates/ralph/ralph.config.yaml +2 -2
- package/templates/skills/_shared.md +44 -44
- package/templates/skills/ai-prompt/SKILL.md +55 -55
- package/templates/skills/apex/SKILL.md +235 -0
- package/templates/skills/apex/steps/step-00-init.md +203 -0
- package/templates/skills/apex/steps/step-01-analyze.md +210 -0
- package/templates/skills/apex/steps/step-02-plan.md +217 -0
- package/templates/skills/apex/steps/step-03-execute.md +178 -0
- package/templates/skills/apex/steps/step-04-validate.md +217 -0
- package/templates/skills/apex/steps/step-05-examine.md +207 -0
- package/templates/skills/apex/steps/step-06-resolve.md +181 -0
- package/templates/skills/apex/steps/step-07-tests.md +206 -0
- package/templates/skills/apex/steps/step-08-run-tests.md +207 -0
- package/templates/skills/apex/templates/00-context.md +46 -0
- package/templates/skills/apex/templates/01-analyze.md +63 -0
- package/templates/skills/apex/templates/02-plan.md +63 -0
- package/templates/skills/apex/templates/03-execute.md +34 -0
- package/templates/skills/apex/templates/04-validate.md +61 -0
- package/templates/skills/apex/templates/05-examine.md +58 -0
- package/templates/skills/apex/templates/06-resolve.md +39 -0
- package/templates/skills/apex/templates/07-tests.md +56 -0
- package/templates/skills/apex/templates/08-run-tests.md +41 -0
- package/templates/skills/apex/templates/README.md +69 -0
- package/templates/skills/application/SKILL.md +50 -50
- package/templates/skills/application/templates-backend.md +25 -25
- package/templates/skills/application/templates-frontend.md +43 -43
- package/templates/skills/application/templates-i18n.md +29 -29
- package/templates/skills/application/templates-seed.md +77 -77
- package/templates/skills/business-analyse/SKILL.md +223 -0
- package/templates/skills/business-analyse/_shared.md +258 -0
- package/templates/skills/business-analyse/questionnaire/01-context.md +33 -0
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +35 -0
- package/templates/skills/business-analyse/questionnaire/03-scope.md +35 -0
- package/templates/skills/business-analyse/questionnaire/04-data.md +36 -0
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +36 -0
- package/templates/skills/business-analyse/questionnaire/06-security.md +40 -0
- package/templates/skills/business-analyse/questionnaire/07-ui.md +36 -0
- package/templates/skills/business-analyse/questionnaire/08-performance.md +35 -0
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +35 -0
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +35 -0
- package/templates/skills/business-analyse/questionnaire.md +177 -177
- package/templates/skills/business-analyse/react/components.md +340 -0
- package/templates/skills/business-analyse/react/i18n-template.md +245 -0
- package/templates/skills/business-analyse/react/schema.md +151 -0
- package/templates/skills/business-analyse/steps/step-00-init.md +293 -0
- package/templates/skills/business-analyse/steps/step-01-discover.md +267 -0
- package/templates/skills/business-analyse/steps/step-02-analyse.md +243 -0
- package/templates/skills/business-analyse/steps/step-03-specify.md +317 -0
- package/templates/skills/business-analyse/steps/step-04-validate.md +239 -0
- package/templates/skills/business-analyse/steps/step-05-handoff.md +336 -0
- package/templates/skills/business-analyse/steps/step-06-doc-html.md +261 -0
- package/templates/skills/business-analyse/templates/00-context.md +105 -0
- package/templates/skills/business-analyse/templates/frd-brd.md +97 -0
- package/templates/skills/business-analyse/templates/frd-discovery.md +78 -0
- package/templates/skills/business-analyse/templates/frd-handoff.md +118 -0
- package/templates/skills/business-analyse/templates/frd-spec.md +168 -0
- package/templates/skills/business-analyse/templates-frd.md +217 -217
- package/templates/skills/business-analyse/templates-react.md +26 -26
- package/templates/skills/controller/SKILL.md +141 -92
- package/templates/skills/controller/postman-templates.md +15 -15
- package/templates/skills/controller/steps/step-00-init.md +191 -0
- package/templates/skills/controller/steps/step-01-analyze.md +146 -0
- package/templates/skills/controller/steps/step-02-plan.md +176 -0
- package/templates/skills/controller/steps/step-03-generate.md +219 -0
- package/templates/skills/controller/steps/step-04-perms.md +219 -0
- package/templates/skills/controller/steps/step-05-validate.md +107 -0
- package/templates/skills/controller/templates.md +77 -77
- package/templates/skills/documentation/SKILL.md +79 -79
- package/templates/skills/feature-full/SKILL.md +38 -38
- package/templates/skills/gitflow/SKILL.md +277 -0
- package/templates/{commands → skills}/gitflow/_shared.md +20 -20
- package/templates/skills/gitflow/phases/abort.md +173 -0
- package/templates/skills/gitflow/phases/cleanup.md +226 -0
- package/templates/skills/gitflow/phases/status.md +178 -0
- package/templates/skills/gitflow/steps/step-commit.md +255 -0
- package/templates/skills/gitflow/steps/step-finish.md +255 -0
- package/templates/skills/gitflow/steps/step-init.md +209 -0
- package/templates/skills/gitflow/steps/step-merge.md +225 -0
- package/templates/skills/gitflow/steps/step-plan.md +208 -0
- package/templates/skills/gitflow/steps/step-pr.md +235 -0
- package/templates/skills/gitflow/steps/step-start.md +334 -0
- package/templates/skills/gitflow/steps/step-sync.md +200 -0
- package/templates/skills/gitflow/templates/config.json +53 -0
- package/templates/skills/notification/SKILL.md +51 -51
- package/templates/skills/ralph-loop/SKILL.md +228 -0
- package/templates/skills/ralph-loop/steps/step-00-init.md +201 -0
- package/templates/skills/ralph-loop/steps/step-01-task.md +169 -0
- package/templates/skills/ralph-loop/steps/step-02-execute.md +173 -0
- package/templates/skills/ralph-loop/steps/step-03-commit.md +170 -0
- package/templates/skills/ralph-loop/steps/step-04-check.md +162 -0
- package/templates/skills/ralph-loop/steps/step-05-report.md +181 -0
- package/templates/skills/review-code/SKILL.md +219 -0
- package/templates/skills/review-code/references/clean-code-principles.md +140 -0
- package/templates/skills/review-code/references/code-quality-metrics.md +174 -0
- package/templates/skills/review-code/references/feedback-patterns.md +149 -0
- package/templates/skills/review-code/references/security-checklist.md +127 -0
- package/templates/skills/ui-components/SKILL.md +54 -54
- package/templates/skills/workflow/SKILL.md +46 -46
- package/templates/commands/ai-prompt.md +0 -315
- package/templates/commands/apex/1-analyze.md +0 -100
- package/templates/commands/apex/2-plan.md +0 -145
- package/templates/commands/apex/3-execute.md +0 -171
- package/templates/commands/apex/4-examine.md +0 -116
- package/templates/commands/apex/5-tasks.md +0 -209
- package/templates/commands/apex.md +0 -76
- package/templates/commands/application/create.md +0 -362
- package/templates/commands/application/templates-backend.md +0 -463
- package/templates/commands/application/templates-frontend.md +0 -517
- package/templates/commands/application/templates-i18n.md +0 -478
- package/templates/commands/application/templates-seed.md +0 -362
- package/templates/commands/application.md +0 -303
- package/templates/commands/business-analyse/0-orchestrate.md +0 -156
- package/templates/commands/business-analyse/1-init.md +0 -99
- package/templates/commands/business-analyse/2-discover.md +0 -143
- package/templates/commands/business-analyse/3-analyse.md +0 -106
- package/templates/commands/business-analyse/4-specify.md +0 -133
- package/templates/commands/business-analyse/5-validate.md +0 -132
- package/templates/commands/business-analyse/6-handoff.md +0 -157
- package/templates/commands/business-analyse/7-doc-html.md +0 -103
- package/templates/commands/business-analyse/_shared.md +0 -176
- package/templates/commands/business-analyse/bug.md +0 -118
- package/templates/commands/business-analyse/change-request.md +0 -144
- package/templates/commands/business-analyse/hotfix.md +0 -116
- package/templates/commands/business-analyse.md +0 -121
- package/templates/commands/controller/create.md +0 -216
- package/templates/commands/controller/postman-templates.md +0 -528
- package/templates/commands/controller/templates.md +0 -600
- package/templates/commands/controller.md +0 -337
- package/templates/commands/create/agent.md +0 -138
- package/templates/commands/create/command.md +0 -166
- package/templates/commands/create/hook.md +0 -234
- package/templates/commands/create/plugin.md +0 -329
- package/templates/commands/create/project.md +0 -508
- package/templates/commands/create/skill.md +0 -199
- package/templates/commands/create.md +0 -220
- package/templates/commands/documentation/module.md +0 -202
- package/templates/commands/documentation/templates.md +0 -432
- package/templates/commands/documentation.md +0 -190
- package/templates/commands/epct.md +0 -69
- package/templates/commands/explain.md +0 -186
- package/templates/commands/feature-full.md +0 -267
- package/templates/commands/gitflow/1-init.md +0 -188
- package/templates/commands/gitflow/10-start.md +0 -190
- package/templates/commands/gitflow/11-finish.md +0 -382
- package/templates/commands/gitflow/12-cleanup.md +0 -103
- package/templates/commands/gitflow/13-sync.md +0 -216
- package/templates/commands/gitflow/14-rebase.md +0 -251
- package/templates/commands/gitflow/2-status.md +0 -122
- package/templates/commands/gitflow/3-commit.md +0 -209
- package/templates/commands/gitflow/4-plan.md +0 -174
- package/templates/commands/gitflow/5-exec.md +0 -202
- package/templates/commands/gitflow/6-abort.md +0 -121
- package/templates/commands/gitflow/7-pull-request.md +0 -176
- package/templates/commands/gitflow/8-review.md +0 -113
- package/templates/commands/gitflow/9-merge.md +0 -157
- package/templates/commands/gitflow.md +0 -128
- package/templates/commands/implement.md +0 -663
- package/templates/commands/init.md +0 -567
- package/templates/commands/mcp-integration.md +0 -330
- package/templates/commands/notification.md +0 -129
- package/templates/commands/oneshot.md +0 -57
- package/templates/commands/quickstart.md +0 -154
- package/templates/commands/ralph-loop/cancel-ralph.md +0 -18
- package/templates/commands/ralph-loop/help.md +0 -126
- package/templates/commands/ralph-loop/ralph-loop.md +0 -120
- package/templates/commands/review.md +0 -106
- package/templates/commands/workflow.md +0 -193
- package/templates/gitflow/config.json +0 -138
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
# Templates Frontend - Application Skill
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> These templates generate React/TypeScript code for new applications/modules.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## ARCHITECTURE
|
|
7
|
+
## FRONTEND ARCHITECTURE
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
web/smartstack-web/src/
|
|
11
11
|
├── pages/$CONTEXT/$MODULE/
|
|
12
|
-
│ ├── $MODULE_PASCALPage.tsx #
|
|
13
|
-
│ ├── $MODULE_PASCALDetailPage.tsx #
|
|
14
|
-
│ └── Create$MODULE_PASCALPage.tsx #
|
|
12
|
+
│ ├── $MODULE_PASCALPage.tsx # Main page (list)
|
|
13
|
+
│ ├── $MODULE_PASCALDetailPage.tsx # Detail page
|
|
14
|
+
│ └── Create$MODULE_PASCALPage.tsx # Create page
|
|
15
15
|
├── components/$MODULE/
|
|
16
|
-
│ ├── $MODULE_PASCALListView.tsx #
|
|
17
|
-
│ ├── $MODULE_PASCALForm.tsx #
|
|
18
|
-
│ └── $MODULE_PASCALFilters.tsx #
|
|
16
|
+
│ ├── $MODULE_PASCALListView.tsx # Reusable list component
|
|
17
|
+
│ ├── $MODULE_PASCALForm.tsx # CRUD form
|
|
18
|
+
│ └── $MODULE_PASCALFilters.tsx # Filters
|
|
19
19
|
├── components/common/
|
|
20
|
-
│ └── (
|
|
20
|
+
│ └── (shared components)
|
|
21
21
|
├── hooks/
|
|
22
|
-
│ ├── use$MODULE_PASCALPreferences.ts #
|
|
23
|
-
│ └── use$MODULE_PASCAL.ts #
|
|
22
|
+
│ ├── use$MODULE_PASCALPreferences.ts # Preferences hook
|
|
23
|
+
│ └── use$MODULE_PASCAL.ts # API hook
|
|
24
24
|
├── services/api/
|
|
25
|
-
│ └── $moduleApi.ts #
|
|
25
|
+
│ └── $moduleApi.ts # API service
|
|
26
26
|
└── i18n/locales/
|
|
27
27
|
├── fr/$module.json
|
|
28
28
|
├── en/$module.json
|
|
@@ -32,7 +32,7 @@ web/smartstack-web/src/
|
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
-
## TEMPLATE: PAGE
|
|
35
|
+
## TEMPLATE: MAIN PAGE
|
|
36
36
|
|
|
37
37
|
```tsx
|
|
38
38
|
// pages/$CONTEXT/$MODULE/$MODULE_PASCALPage.tsx
|
|
@@ -56,7 +56,7 @@ export function $MODULE_PASCALPage() {
|
|
|
56
56
|
|
|
57
57
|
---
|
|
58
58
|
|
|
59
|
-
## TEMPLATE:
|
|
59
|
+
## TEMPLATE: LIST VIEW (Reusable component)
|
|
60
60
|
|
|
61
61
|
```tsx
|
|
62
62
|
// components/$MODULE/$MODULE_PASCALListView.tsx
|
|
@@ -70,7 +70,7 @@ import { use$MODULE_PASCALPreferences } from '@/hooks/use$MODULE_PASCALPreferenc
|
|
|
70
70
|
import { Pagination } from '@/components/common/Pagination';
|
|
71
71
|
import { ColumnSelector } from '@/components/common/ColumnSelector';
|
|
72
72
|
import { ViewModeToggle } from '@/components/common/ViewModeToggle';
|
|
73
|
-
import { EntityCard } from '@/components/ui/EntityCard'; // ⚠️
|
|
73
|
+
import { EntityCard } from '@/components/ui/EntityCard'; // ⚠️ MANDATORY for Grid view
|
|
74
74
|
|
|
75
75
|
interface $ENTITY_PASCALDto {
|
|
76
76
|
id: string;
|
|
@@ -320,7 +320,7 @@ export function $MODULE_PASCALListView({
|
|
|
320
320
|
</table>
|
|
321
321
|
</div>
|
|
322
322
|
) : (
|
|
323
|
-
/* Grid view - ⚠️
|
|
323
|
+
/* Grid view - ⚠️ MANDATORY: use EntityCard */
|
|
324
324
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
|
|
325
325
|
{data?.items.map((item) => (
|
|
326
326
|
<EntityCard
|
|
@@ -361,7 +361,7 @@ export function $MODULE_PASCALListView({
|
|
|
361
361
|
|
|
362
362
|
---
|
|
363
363
|
|
|
364
|
-
## TEMPLATE: HOOK
|
|
364
|
+
## TEMPLATE: PREFERENCES HOOK
|
|
365
365
|
|
|
366
366
|
```tsx
|
|
367
367
|
// hooks/use$MODULE_PASCALPreferences.ts
|
|
@@ -477,25 +477,25 @@ export const $moduleApi = {
|
|
|
477
477
|
|
|
478
478
|
## TEMPLATE: ROUTES (App.tsx)
|
|
479
479
|
|
|
480
|
-
### ⚠️
|
|
480
|
+
### ⚠️ CRITICAL RULE: NESTED ROUTES MANDATORY
|
|
481
481
|
|
|
482
|
-
React Router v7 **
|
|
482
|
+
React Router v7 **requires** nested routes for multi-module applications.
|
|
483
483
|
|
|
484
|
-
**❌
|
|
484
|
+
**❌ FORBIDDEN - Flat routes (cause redirects to Home)**
|
|
485
485
|
```tsx
|
|
486
486
|
<Route path="$APPLICATION" element={<Navigate to="/$CONTEXT/$APPLICATION/$DEFAULT_MODULE" replace />} />
|
|
487
487
|
<Route path="$APPLICATION/$MODULE" element={<$MODULE_PASCALPage />} />
|
|
488
488
|
```
|
|
489
489
|
|
|
490
|
-
**✅
|
|
490
|
+
**✅ MANDATORY - Nested routes with index**
|
|
491
491
|
```tsx
|
|
492
|
-
//
|
|
492
|
+
// Add to App.tsx
|
|
493
493
|
|
|
494
494
|
import { $MODULE_PASCALPage } from '@/pages/$CONTEXT/$MODULE/$MODULE_PASCALPage';
|
|
495
495
|
import { $MODULE_PASCALDetailPage } from '@/pages/$CONTEXT/$MODULE/$MODULE_PASCALDetailPage';
|
|
496
496
|
import { Create$MODULE_PASCALPage } from '@/pages/$CONTEXT/$MODULE/Create$MODULE_PASCALPage';
|
|
497
497
|
|
|
498
|
-
//
|
|
498
|
+
// In routes - NESTED STRUCTURE
|
|
499
499
|
<Route path="$APPLICATION">
|
|
500
500
|
<Route index element={<Navigate to="$DEFAULT_MODULE" replace />} />
|
|
501
501
|
<Route path="$MODULE" element={<$MODULE_PASCALPage />} />
|
|
@@ -505,27 +505,27 @@ import { Create$MODULE_PASCALPage } from '@/pages/$CONTEXT/$MODULE/Create$MODULE
|
|
|
505
505
|
</Route>
|
|
506
506
|
```
|
|
507
507
|
|
|
508
|
-
###
|
|
508
|
+
### Why this structure?
|
|
509
509
|
|
|
510
|
-
| Aspect |
|
|
511
|
-
|
|
512
|
-
| Matching |
|
|
513
|
-
| Navigate |
|
|
514
|
-
| Outlet |
|
|
515
|
-
| Redirect |
|
|
510
|
+
| Aspect | Flat routes | Nested routes |
|
|
511
|
+
|--------|------------|----------------|
|
|
512
|
+
| Matching | Ambiguous between siblings | Hierarchical clear |
|
|
513
|
+
| Navigate | Must be absolute | Can be relative |
|
|
514
|
+
| Outlet | Not supported | Supported |
|
|
515
|
+
| Redirect | Can fail | Always works |
|
|
516
516
|
|
|
517
517
|
---
|
|
518
518
|
|
|
519
|
-
## CHECKLIST
|
|
520
|
-
|
|
521
|
-
|
|
|
522
|
-
|
|
523
|
-
| ☐
|
|
524
|
-
| ☐
|
|
525
|
-
| ☐
|
|
526
|
-
| ☐
|
|
527
|
-
| ☐ Routes
|
|
528
|
-
| ☐
|
|
529
|
-
| ☐
|
|
530
|
-
| ☐ npm run build
|
|
531
|
-
| ☐ npm run lint
|
|
519
|
+
## FRONTEND CHECKLIST
|
|
520
|
+
|
|
521
|
+
| Check | Status |
|
|
522
|
+
|-------|--------|
|
|
523
|
+
| ☐ Main page created | |
|
|
524
|
+
| ☐ ListView component created | |
|
|
525
|
+
| ☐ Preferences hook created | |
|
|
526
|
+
| ☐ API service created | |
|
|
527
|
+
| ☐ Routes added to App.tsx | |
|
|
528
|
+
| ☐ Uses apiClient (no direct calls) | |
|
|
529
|
+
| ☐ No Infrastructure imports | |
|
|
530
|
+
| ☐ npm run build successful | |
|
|
531
|
+
| ☐ npm run lint successful | |
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Templates i18n - Application Skill
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> These templates generate translation files for the 4 mandatory languages.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## STRUCTURE
|
|
7
|
+
## FILE STRUCTURE
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
web/smartstack-web/src/i18n/locales/
|
|
11
|
-
├── fr/$module.json #
|
|
11
|
+
├── fr/$module.json # French (main language)
|
|
12
12
|
├── en/$module.json # English
|
|
13
13
|
├── it/$module.json # Italiano
|
|
14
14
|
└── de/$module.json # Deutsch
|
|
@@ -16,7 +16,7 @@ web/smartstack-web/src/i18n/locales/
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
-
## TEMPLATE:
|
|
19
|
+
## TEMPLATE: FRENCH (fr/$module.json)
|
|
20
20
|
|
|
21
21
|
```json
|
|
22
22
|
{
|
|
@@ -194,7 +194,7 @@ web/smartstack-web/src/i18n/locales/
|
|
|
194
194
|
|
|
195
195
|
---
|
|
196
196
|
|
|
197
|
-
## TEMPLATE:
|
|
197
|
+
## TEMPLATE: ITALIAN (it/$module.json)
|
|
198
198
|
|
|
199
199
|
```json
|
|
200
200
|
{
|
|
@@ -283,7 +283,7 @@ web/smartstack-web/src/i18n/locales/
|
|
|
283
283
|
|
|
284
284
|
---
|
|
285
285
|
|
|
286
|
-
## TEMPLATE:
|
|
286
|
+
## TEMPLATE: GERMAN (de/$module.json)
|
|
287
287
|
|
|
288
288
|
```json
|
|
289
289
|
{
|
|
@@ -372,9 +372,9 @@ web/smartstack-web/src/i18n/locales/
|
|
|
372
372
|
|
|
373
373
|
---
|
|
374
374
|
|
|
375
|
-
##
|
|
375
|
+
## UPDATE NAVIGATION.JSON
|
|
376
376
|
|
|
377
|
-
|
|
377
|
+
For each navigation entity created, update the `navigation.json` files:
|
|
378
378
|
|
|
379
379
|
### fr/navigation.json
|
|
380
380
|
|
|
@@ -430,18 +430,18 @@ Pour chaque entité de navigation créée, mettre à jour les fichiers `navigati
|
|
|
430
430
|
|
|
431
431
|
---
|
|
432
432
|
|
|
433
|
-
##
|
|
433
|
+
## i18n REGISTRATION
|
|
434
434
|
|
|
435
|
-
|
|
435
|
+
Add the namespace to `i18n/index.ts`:
|
|
436
436
|
|
|
437
437
|
```typescript
|
|
438
|
-
//
|
|
438
|
+
// Add the import
|
|
439
439
|
import $module_fr from './locales/fr/$module.json';
|
|
440
440
|
import $module_en from './locales/en/$module.json';
|
|
441
441
|
import $module_it from './locales/it/$module.json';
|
|
442
442
|
import $module_de from './locales/de/$module.json';
|
|
443
443
|
|
|
444
|
-
//
|
|
444
|
+
// Add to resources
|
|
445
445
|
resources: {
|
|
446
446
|
fr: {
|
|
447
447
|
// ... existing
|
|
@@ -464,7 +464,7 @@ resources: {
|
|
|
464
464
|
|
|
465
465
|
---
|
|
466
466
|
|
|
467
|
-
##
|
|
467
|
+
## COMPLETE EXAMPLE: "Products" Module
|
|
468
468
|
|
|
469
469
|
### Variables
|
|
470
470
|
|
|
@@ -488,31 +488,31 @@ $SUBTITLE_DE = Verwalten Sie Ihren Produktkatalog
|
|
|
488
488
|
|
|
489
489
|
---
|
|
490
490
|
|
|
491
|
-
## CHECKLIST
|
|
491
|
+
## i18n CHECKLIST
|
|
492
492
|
|
|
493
|
-
|
|
|
494
|
-
|
|
495
|
-
| ☐ fr/$module.json
|
|
496
|
-
| ☐ en/$module.json
|
|
497
|
-
| ☐ it/$module.json
|
|
498
|
-
| ☐ de/$module.json
|
|
499
|
-
| ☐ navigation.json
|
|
500
|
-
| ☐ Namespace
|
|
501
|
-
| ☐
|
|
502
|
-
| ☐
|
|
493
|
+
| Check | Status |
|
|
494
|
+
|-------|--------|
|
|
495
|
+
| ☐ fr/$module.json created | |
|
|
496
|
+
| ☐ en/$module.json created | |
|
|
497
|
+
| ☐ it/$module.json created | |
|
|
498
|
+
| ☐ de/$module.json created | |
|
|
499
|
+
| ☐ navigation.json updated (4 languages) | |
|
|
500
|
+
| ☐ Namespace registered in i18n/index.ts | |
|
|
501
|
+
| ☐ All keys present in 4 files | |
|
|
502
|
+
| ☐ No missing keys | |
|
|
503
503
|
|
|
504
504
|
---
|
|
505
505
|
|
|
506
|
-
##
|
|
506
|
+
## VALIDATION TOOLS
|
|
507
507
|
|
|
508
508
|
```bash
|
|
509
|
-
#
|
|
510
|
-
# Script
|
|
509
|
+
# Verify that all keys are present in 4 languages
|
|
510
|
+
# Script to run from web/smartstack-web
|
|
511
511
|
|
|
512
|
-
#
|
|
512
|
+
# List keys from French file (reference)
|
|
513
513
|
jq -r 'paths(scalars) | join(".")' src/i18n/locales/fr/$module.json > /tmp/fr_keys.txt
|
|
514
514
|
|
|
515
|
-
# Compare
|
|
515
|
+
# Compare with other languages
|
|
516
516
|
for lang in en it de; do
|
|
517
517
|
jq -r 'paths(scalars) | join(".")' src/i18n/locales/$lang/$module.json > /tmp/${lang}_keys.txt
|
|
518
518
|
diff /tmp/fr_keys.txt /tmp/${lang}_keys.txt
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Templates DB Seed - Application Skill
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> These templates generate EF Core seeds for navigation entities and their translations.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## GUID GENERATION RULES
|
|
8
8
|
|
|
9
9
|
```csharp
|
|
10
|
-
//
|
|
11
|
-
//
|
|
10
|
+
// NEVER generate sequential GUIDs with NewGuid()
|
|
11
|
+
// ALWAYS use the deterministic method
|
|
12
12
|
|
|
13
13
|
private static Guid GenerateGuid(int index)
|
|
14
14
|
{
|
|
@@ -16,8 +16,8 @@ private static Guid GenerateGuid(int index)
|
|
|
16
16
|
return Guid.Parse($"11111111-1111-1111-1111-{index:D12}");
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
//
|
|
20
|
-
//
|
|
19
|
+
// For existing seeds, continue the sequence
|
|
20
|
+
// Check the last index used in NavigationTranslationConfiguration.cs
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
---
|
|
@@ -27,25 +27,25 @@ private static Guid GenerateGuid(int index)
|
|
|
27
27
|
### Navigation Entity
|
|
28
28
|
|
|
29
29
|
```csharp
|
|
30
|
-
//
|
|
30
|
+
// In NavigationContextConfiguration.cs - HasData()
|
|
31
31
|
new {
|
|
32
32
|
Id = Guid.Parse("$CONTEXT_GUID"),
|
|
33
|
-
Code = "$CODE", //
|
|
34
|
-
Label = "$
|
|
35
|
-
Description = "$
|
|
36
|
-
Icon = "$ICON", //
|
|
33
|
+
Code = "$CODE", // e.g.: "erp"
|
|
34
|
+
Label = "$LABEL_EN", // e.g.: "ERP"
|
|
35
|
+
Description = "$DESC_EN", // e.g.: "Enterprise management"
|
|
36
|
+
Icon = "$ICON", // e.g.: "Building2"
|
|
37
37
|
IconType = IconType.Lucide,
|
|
38
|
-
Route = "/$CODE", //
|
|
39
|
-
DisplayOrder = $ORDER, //
|
|
38
|
+
Route = "/$CODE", // e.g.: "/erp"
|
|
39
|
+
DisplayOrder = $ORDER, // e.g.: 4
|
|
40
40
|
IsActive = true,
|
|
41
41
|
CreatedAt = seedDate
|
|
42
42
|
}
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
### Translations (4
|
|
45
|
+
### Translations (4 languages)
|
|
46
46
|
|
|
47
47
|
```csharp
|
|
48
|
-
//
|
|
48
|
+
// In NavigationTranslationConfiguration.cs - GetSeedData()
|
|
49
49
|
// Context translations
|
|
50
50
|
translations.Add(new {
|
|
51
51
|
Id = GenerateGuid(index++),
|
|
@@ -92,23 +92,23 @@ translations.Add(new {
|
|
|
92
92
|
### Navigation Entity
|
|
93
93
|
|
|
94
94
|
```csharp
|
|
95
|
-
//
|
|
95
|
+
// In NavigationApplicationConfiguration.cs - HasData()
|
|
96
96
|
new {
|
|
97
97
|
Id = Guid.Parse("$APP_GUID"),
|
|
98
98
|
ContextId = Guid.Parse("$CONTEXT_GUID"),
|
|
99
|
-
Code = "$CODE", //
|
|
100
|
-
Label = "$
|
|
101
|
-
Description = "$
|
|
102
|
-
Icon = "$ICON", //
|
|
99
|
+
Code = "$CODE", // e.g.: "sales"
|
|
100
|
+
Label = "$LABEL_EN", // e.g.: "Sales"
|
|
101
|
+
Description = "$DESC_EN", // e.g.: "Sales management"
|
|
102
|
+
Icon = "$ICON", // e.g.: "TrendingUp"
|
|
103
103
|
IconType = IconType.Lucide,
|
|
104
|
-
Route = "/$CONTEXT/$CODE", //
|
|
104
|
+
Route = "/$CONTEXT/$CODE", // e.g.: "/erp/sales"
|
|
105
105
|
DisplayOrder = $ORDER,
|
|
106
106
|
IsActive = true,
|
|
107
107
|
CreatedAt = seedDate
|
|
108
108
|
}
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
### Translations (4
|
|
111
|
+
### Translations (4 languages)
|
|
112
112
|
|
|
113
113
|
```csharp
|
|
114
114
|
// Application translations
|
|
@@ -157,23 +157,23 @@ translations.Add(new {
|
|
|
157
157
|
### Navigation Entity
|
|
158
158
|
|
|
159
159
|
```csharp
|
|
160
|
-
//
|
|
160
|
+
// In NavigationModuleConfiguration.cs - HasData()
|
|
161
161
|
new {
|
|
162
162
|
Id = Guid.Parse("$MODULE_GUID"),
|
|
163
163
|
ApplicationId = Guid.Parse("$APP_GUID"),
|
|
164
|
-
Code = "$CODE", //
|
|
165
|
-
Label = "$
|
|
166
|
-
Description = "$
|
|
167
|
-
Icon = "$ICON", //
|
|
164
|
+
Code = "$CODE", // e.g.: "products"
|
|
165
|
+
Label = "$LABEL_EN", // e.g.: "Products"
|
|
166
|
+
Description = "$DESC_EN", // e.g.: "Product management"
|
|
167
|
+
Icon = "$ICON", // e.g.: "Package"
|
|
168
168
|
IconType = IconType.Lucide,
|
|
169
|
-
Route = "/$CONTEXT/$APP/$CODE", //
|
|
169
|
+
Route = "/$CONTEXT/$APP/$CODE", // e.g.: "/erp/sales/products"
|
|
170
170
|
DisplayOrder = $ORDER,
|
|
171
171
|
IsActive = true,
|
|
172
172
|
CreatedAt = seedDate
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
### Translations (4
|
|
176
|
+
### Translations (4 languages)
|
|
177
177
|
|
|
178
178
|
```csharp
|
|
179
179
|
// Module translations
|
|
@@ -222,23 +222,23 @@ translations.Add(new {
|
|
|
222
222
|
### Navigation Entity
|
|
223
223
|
|
|
224
224
|
```csharp
|
|
225
|
-
//
|
|
225
|
+
// In NavigationSectionConfiguration.cs - HasData()
|
|
226
226
|
new {
|
|
227
227
|
Id = Guid.Parse("$SECTION_GUID"),
|
|
228
228
|
ModuleId = Guid.Parse("$MODULE_GUID"),
|
|
229
|
-
Code = "$CODE", //
|
|
230
|
-
Label = "$
|
|
231
|
-
Description = "$
|
|
232
|
-
Icon = "$ICON", //
|
|
229
|
+
Code = "$CODE", // e.g.: "inventory"
|
|
230
|
+
Label = "$LABEL_EN", // e.g.: "Inventory"
|
|
231
|
+
Description = "$DESC_EN", // e.g.: "Inventory management"
|
|
232
|
+
Icon = "$ICON", // e.g.: "Warehouse"
|
|
233
233
|
IconType = IconType.Lucide,
|
|
234
|
-
Route = "/$CONTEXT/$APP/$MODULE/$CODE", //
|
|
234
|
+
Route = "/$CONTEXT/$APP/$MODULE/$CODE", // e.g.: "/erp/sales/products/inventory"
|
|
235
235
|
DisplayOrder = $ORDER,
|
|
236
236
|
IsActive = true,
|
|
237
237
|
CreatedAt = seedDate
|
|
238
238
|
}
|
|
239
239
|
```
|
|
240
240
|
|
|
241
|
-
### Translations (4
|
|
241
|
+
### Translations (4 languages)
|
|
242
242
|
|
|
243
243
|
```csharp
|
|
244
244
|
// Section translations
|
|
@@ -287,8 +287,8 @@ translations.Add(new {
|
|
|
287
287
|
### Permission Entity
|
|
288
288
|
|
|
289
289
|
```csharp
|
|
290
|
-
//
|
|
291
|
-
//
|
|
290
|
+
// In PermissionConfiguration.cs - HasData()
|
|
291
|
+
// For each CRUD action + assign + execute
|
|
292
292
|
|
|
293
293
|
// Read
|
|
294
294
|
new {
|
|
@@ -331,7 +331,7 @@ new {
|
|
|
331
331
|
### RolePermission Seed (Default Roles)
|
|
332
332
|
|
|
333
333
|
```csharp
|
|
334
|
-
//
|
|
334
|
+
// In RolePermissionConfiguration.cs - HasData()
|
|
335
335
|
// SuperAdmin gets all permissions automatically (wildcard)
|
|
336
336
|
|
|
337
337
|
// PlatformAdmin - if platform context
|
|
@@ -348,15 +348,15 @@ new { RoleId = Guid.Parse("...StandardUserRoleId..."), PermissionId = $PERM_READ
|
|
|
348
348
|
|
|
349
349
|
## TEMPLATE: SECTION PERMISSIONS SEED (Level 4)
|
|
350
350
|
|
|
351
|
-
> **Usage:**
|
|
351
|
+
> **Usage:** When a Module has sub-pages with different permissions
|
|
352
352
|
|
|
353
353
|
### Permission Entity - Section Level
|
|
354
354
|
|
|
355
355
|
```csharp
|
|
356
|
-
//
|
|
356
|
+
// In PermissionConfiguration.cs - HasData()
|
|
357
357
|
// Pattern: {context}.{application}.{module}.{section}.{action}
|
|
358
358
|
|
|
359
|
-
//
|
|
359
|
+
// Declare SectionId (must match NavigationSectionConfiguration.cs)
|
|
360
360
|
var {section}SectionId = Guid.Parse("$SECTION_GUID");
|
|
361
361
|
|
|
362
362
|
// Wildcard Section
|
|
@@ -413,7 +413,7 @@ new {
|
|
|
413
413
|
Description = "Delete in $SECTION_LABEL",
|
|
414
414
|
CreatedAt = seedDate
|
|
415
415
|
},
|
|
416
|
-
// Execute (
|
|
416
|
+
// Execute (optional)
|
|
417
417
|
new {
|
|
418
418
|
Id = Guid.Parse("$PERM_SECTION_EXECUTE_GUID"),
|
|
419
419
|
Path = "$CONTEXT.$APP.$MODULE.$SECTION.execute",
|
|
@@ -430,15 +430,15 @@ new {
|
|
|
430
430
|
|
|
431
431
|
## TEMPLATE: RESOURCE PERMISSIONS SEED (Level 5)
|
|
432
432
|
|
|
433
|
-
> **Usage:**
|
|
433
|
+
> **Usage:** Finest level - sub-resources with distinct permissions (e.g.: Prompts → Blocks)
|
|
434
434
|
|
|
435
435
|
### Permission Entity - Resource Level
|
|
436
436
|
|
|
437
437
|
```csharp
|
|
438
|
-
//
|
|
438
|
+
// In PermissionConfiguration.cs - HasData()
|
|
439
439
|
// Pattern: {context}.{application}.{module}.{section}.{resource}.{action}
|
|
440
440
|
|
|
441
|
-
//
|
|
441
|
+
// Declare ResourceId (must match NavigationResourceConfiguration.cs)
|
|
442
442
|
var {resource}ResourceId = Guid.Parse("$RESOURCE_GUID");
|
|
443
443
|
|
|
444
444
|
// Wildcard Resource
|
|
@@ -501,13 +501,13 @@ new {
|
|
|
501
501
|
|
|
502
502
|
## TEMPLATE: BULK OPERATIONS PERMISSIONS
|
|
503
503
|
|
|
504
|
-
> **
|
|
504
|
+
> **MANDATORY:** Always provide for CRUD modules
|
|
505
505
|
|
|
506
506
|
### Permission Entity - Bulk Operations
|
|
507
507
|
|
|
508
508
|
```csharp
|
|
509
|
-
//
|
|
510
|
-
//
|
|
509
|
+
// In PermissionConfiguration.cs - HasData()
|
|
510
|
+
// Add after standard CRUD permissions
|
|
511
511
|
|
|
512
512
|
// Bulk Create
|
|
513
513
|
new {
|
|
@@ -568,7 +568,7 @@ new {
|
|
|
568
568
|
|
|
569
569
|
---
|
|
570
570
|
|
|
571
|
-
##
|
|
571
|
+
## COMPLETE EXAMPLE: "Products" Module in "ERP > Sales"
|
|
572
572
|
|
|
573
573
|
### Variables
|
|
574
574
|
|
|
@@ -594,54 +594,54 @@ $ICON = Package
|
|
|
594
594
|
$ORDER = 1
|
|
595
595
|
```
|
|
596
596
|
|
|
597
|
-
###
|
|
597
|
+
### Files to modify
|
|
598
598
|
|
|
599
|
-
1. `NavigationContextConfiguration.cs` -
|
|
600
|
-
2. `NavigationApplicationConfiguration.cs` -
|
|
601
|
-
3. `NavigationModuleConfiguration.cs` -
|
|
602
|
-
4. `NavigationTranslationConfiguration.cs` -
|
|
603
|
-
5. `PermissionConfiguration.cs` -
|
|
604
|
-
6. `RolePermissionConfiguration.cs` -
|
|
599
|
+
1. `NavigationContextConfiguration.cs` - Add ERP context (if new)
|
|
600
|
+
2. `NavigationApplicationConfiguration.cs` - Add Sales application
|
|
601
|
+
3. `NavigationModuleConfiguration.cs` - Add Products module
|
|
602
|
+
4. `NavigationTranslationConfiguration.cs` - Add 4 translations × number of entities
|
|
603
|
+
5. `PermissionConfiguration.cs` - Add CRUD permissions
|
|
604
|
+
6. `RolePermissionConfiguration.cs` - Assign to default roles
|
|
605
605
|
|
|
606
606
|
---
|
|
607
607
|
|
|
608
|
-
## CHECKLIST
|
|
609
|
-
|
|
610
|
-
|
|
|
611
|
-
|
|
612
|
-
| ☐ GUID
|
|
613
|
-
| ☐ 4
|
|
614
|
-
| ☐ Index translations continue
|
|
615
|
-
| ☐ Route
|
|
616
|
-
| ☐ DisplayOrder
|
|
617
|
-
| ☐
|
|
618
|
-
| ☐
|
|
619
|
-
| ☐
|
|
620
|
-
| ☐
|
|
621
|
-
| ☐ RolePermissions
|
|
608
|
+
## SEED CHECKLIST
|
|
609
|
+
|
|
610
|
+
| Check | Status |
|
|
611
|
+
|-------|--------|
|
|
612
|
+
| ☐ Deterministic GUID (not NewGuid) | |
|
|
613
|
+
| ☐ 4 languages for each entity | |
|
|
614
|
+
| ☐ Index translations continue existing sequence | |
|
|
615
|
+
| ☐ Route aligned with permission path | |
|
|
616
|
+
| ☐ DisplayOrder consistent | |
|
|
617
|
+
| ☐ CRUD permissions created (Level 3 - Module) | |
|
|
618
|
+
| ☐ Section permissions if sub-pages (Level 4) | |
|
|
619
|
+
| ☐ Resource permissions if sub-resources (Level 5) | |
|
|
620
|
+
| ☐ Bulk Operations permissions created | |
|
|
621
|
+
| ☐ RolePermissions assigned | |
|
|
622
622
|
|
|
623
623
|
---
|
|
624
624
|
|
|
625
|
-
##
|
|
625
|
+
## PERMISSIONS HIERARCHY (5 Levels)
|
|
626
626
|
|
|
627
627
|
```
|
|
628
628
|
Level 1: CONTEXT
|
|
629
629
|
└─ Path: {context}.*
|
|
630
|
-
└─
|
|
630
|
+
└─ E.g.: platform.* → Full context access
|
|
631
631
|
|
|
632
632
|
Level 2: APPLICATION
|
|
633
633
|
└─ Path: {context}.{application}.*
|
|
634
|
-
└─
|
|
634
|
+
└─ E.g.: platform.administration.* → Full app access
|
|
635
635
|
|
|
636
636
|
Level 3: MODULE
|
|
637
637
|
└─ Path: {context}.{application}.{module}.{action}
|
|
638
|
-
└─
|
|
638
|
+
└─ E.g.: platform.administration.users.read
|
|
639
639
|
|
|
640
640
|
Level 4: SECTION
|
|
641
641
|
└─ Path: {context}.{application}.{module}.{section}.{action}
|
|
642
|
-
└─
|
|
642
|
+
└─ E.g.: platform.administration.ai.settings.update
|
|
643
643
|
|
|
644
644
|
Level 5: RESOURCE (finest granularity)
|
|
645
645
|
└─ Path: {context}.{application}.{module}.{section}.{resource}.{action}
|
|
646
|
-
└─
|
|
646
|
+
└─ E.g.: platform.administration.ai.prompts.blocks.delete
|
|
647
647
|
```
|