@atlashub/smartstack-cli 1.5.1 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.documentation/css/styles.css +2168 -2168
- package/.documentation/js/app.js +794 -794
- package/config/default-config.json +86 -86
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js +0 -0
- package/dist/index.js.map +1 -1
- package/package.json +88 -88
- package/templates/agents/action.md +36 -36
- package/templates/agents/efcore/conflicts.md +84 -84
- package/templates/agents/efcore/db-deploy.md +51 -51
- package/templates/agents/efcore/db-reset.md +59 -59
- package/templates/agents/efcore/db-seed.md +56 -56
- package/templates/agents/efcore/db-status.md +64 -64
- package/templates/agents/efcore/migration.md +85 -85
- package/templates/agents/efcore/rebase-snapshot.md +62 -62
- package/templates/agents/efcore/scan.md +90 -90
- package/templates/agents/efcore/squash.md +67 -67
- package/templates/agents/explore-codebase.md +65 -65
- package/templates/agents/explore-docs.md +97 -97
- package/templates/agents/fix-grammar.md +49 -49
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +85 -85
- package/templates/agents/gitflow/commit.md +40 -40
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +92 -92
- package/templates/agents/gitflow/init.md +139 -139
- package/templates/agents/gitflow/merge.md +62 -62
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +78 -78
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +61 -61
- package/templates/agents/gitflow/status.md +32 -32
- package/templates/agents/snipper.md +36 -36
- package/templates/agents/websearch.md +46 -46
- package/templates/commands/_resources/formatting-guide.md +124 -124
- package/templates/commands/ai-prompt.md +315 -315
- package/templates/commands/apex/1-analyze.md +100 -100
- package/templates/commands/apex/2-plan.md +145 -145
- package/templates/commands/apex/3-execute.md +171 -171
- package/templates/commands/apex/4-examine.md +116 -116
- package/templates/commands/apex/5-tasks.md +209 -209
- package/templates/commands/apex.md +76 -76
- package/templates/commands/application/create.md +362 -362
- package/templates/commands/application/templates-backend.md +463 -463
- package/templates/commands/application/templates-frontend.md +517 -517
- package/templates/commands/application/templates-i18n.md +478 -478
- package/templates/commands/application/templates-seed.md +362 -362
- package/templates/commands/application.md +303 -303
- package/templates/commands/business-analyse/0-orchestrate.md +640 -640
- package/templates/commands/business-analyse/1-init.md +269 -269
- package/templates/commands/business-analyse/2-discover.md +520 -520
- package/templates/commands/business-analyse/3-analyse.md +408 -408
- package/templates/commands/business-analyse/4-specify.md +598 -598
- package/templates/commands/business-analyse/5-validate.md +326 -326
- package/templates/commands/business-analyse/6-handoff.md +746 -746
- package/templates/commands/business-analyse/7-doc-html.md +602 -602
- package/templates/commands/business-analyse/bug.md +325 -325
- package/templates/commands/business-analyse/change-request.md +368 -368
- package/templates/commands/business-analyse/hotfix.md +200 -200
- package/templates/commands/business-analyse.md +640 -640
- package/templates/commands/controller/create.md +216 -216
- package/templates/commands/controller/postman-templates.md +528 -528
- package/templates/commands/controller/templates.md +600 -600
- package/templates/commands/controller.md +337 -337
- package/templates/commands/create/agent.md +138 -138
- package/templates/commands/create/command.md +166 -166
- package/templates/commands/create/hook.md +234 -234
- package/templates/commands/create/plugin.md +329 -329
- package/templates/commands/create/project.md +507 -507
- package/templates/commands/create/skill.md +199 -199
- package/templates/commands/create.md +220 -220
- package/templates/commands/debug.md +95 -95
- package/templates/commands/documentation/module.md +202 -202
- package/templates/commands/documentation/templates.md +432 -432
- package/templates/commands/documentation.md +190 -190
- package/templates/commands/efcore/_env-check.md +153 -153
- package/templates/commands/efcore/conflicts.md +186 -186
- package/templates/commands/efcore/db-deploy.md +193 -193
- package/templates/commands/efcore/db-reset.md +426 -426
- package/templates/commands/efcore/db-seed.md +326 -326
- package/templates/commands/efcore/db-status.md +226 -226
- package/templates/commands/efcore/migration.md +400 -400
- package/templates/commands/efcore/rebase-snapshot.md +264 -264
- package/templates/commands/efcore/scan.md +198 -198
- package/templates/commands/efcore/squash.md +298 -298
- package/templates/commands/efcore.md +224 -224
- package/templates/commands/epct.md +69 -69
- package/templates/commands/explain.md +186 -186
- package/templates/commands/explore.md +45 -45
- package/templates/commands/feature-full.md +267 -267
- package/templates/commands/gitflow/1-init.md +1038 -1038
- package/templates/commands/gitflow/10-start.md +768 -768
- package/templates/commands/gitflow/11-finish.md +457 -457
- package/templates/commands/gitflow/12-cleanup.md +276 -276
- package/templates/commands/gitflow/13-sync.md +216 -216
- package/templates/commands/gitflow/14-rebase.md +251 -251
- package/templates/commands/gitflow/2-status.md +277 -277
- package/templates/commands/gitflow/3-commit.md +344 -344
- package/templates/commands/gitflow/4-plan.md +145 -145
- package/templates/commands/gitflow/5-exec.md +147 -147
- package/templates/commands/gitflow/6-abort.md +344 -344
- package/templates/commands/gitflow/7-pull-request.md +453 -355
- package/templates/commands/gitflow/8-review.md +240 -176
- package/templates/commands/gitflow/9-merge.md +451 -365
- package/templates/commands/gitflow.md +128 -128
- package/templates/commands/implement.md +663 -663
- package/templates/commands/init.md +567 -567
- package/templates/commands/mcp-integration.md +330 -330
- package/templates/commands/notification.md +129 -129
- package/templates/commands/oneshot.md +57 -57
- package/templates/commands/quick-search.md +72 -72
- package/templates/commands/ralph-loop/cancel-ralph.md +18 -18
- package/templates/commands/ralph-loop/help.md +126 -126
- package/templates/commands/ralph-loop/ralph-loop.md +18 -18
- package/templates/commands/review.md +106 -106
- package/templates/commands/utils/test-web-config.md +160 -160
- package/templates/commands/utils/test-web.md +151 -151
- package/templates/commands/validate.md +233 -233
- package/templates/commands/workflow.md +193 -193
- package/templates/gitflow/config.json +138 -138
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +25 -25
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/skills/ai-prompt/SKILL.md +778 -778
- package/templates/skills/application/SKILL.md +563 -563
- package/templates/skills/application/templates-backend.md +450 -450
- package/templates/skills/application/templates-frontend.md +531 -531
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +647 -647
- package/templates/skills/business-analyse/SKILL.md +191 -191
- package/templates/skills/business-analyse/questionnaire.md +283 -283
- package/templates/skills/business-analyse/templates-frd.md +477 -477
- package/templates/skills/business-analyse/templates-react.md +580 -580
- package/templates/skills/controller/SKILL.md +240 -240
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/templates.md +1468 -1468
- package/templates/skills/documentation/SKILL.md +133 -133
- package/templates/skills/documentation/templates.md +476 -476
- package/templates/skills/feature-full/SKILL.md +838 -838
- package/templates/skills/notification/SKILL.md +555 -555
- package/templates/skills/ui-components/SKILL.md +870 -870
- package/templates/skills/workflow/SKILL.md +582 -582
- 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,362 +1,362 @@
|
|
|
1
|
-
# /application:create - Génération Full-Stack SmartStack
|
|
2
|
-
|
|
3
|
-
> **Synergie Skill/Commande:**
|
|
4
|
-
> - **Skill** (`.claude/skills/application/`) → Invocation automatique par Claude
|
|
5
|
-
> - **Commande** (`/application:create`) → Invocation manuelle par l'utilisateur
|
|
6
|
-
> - Templates partagés dans `.claude/skills/application/templates-*.md`
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## ARGUMENTS
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
/application:create <level> <parent> <code> [options]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
| Variable | Description | Valeurs |
|
|
17
|
-
|----------|-------------|---------|
|
|
18
|
-
| `level` | Niveau de navigation | `context`, `application`, `module`, `section` |
|
|
19
|
-
| `parent` | Code du parent | Ex: `platform`, `platform.administration` |
|
|
20
|
-
| `code` | Code de l'entité | Ex: `products`, `crm`, `erp` |
|
|
21
|
-
|
|
22
|
-
**Exemples:**
|
|
23
|
-
```bash
|
|
24
|
-
# Créer un nouveau context
|
|
25
|
-
/application:create context _ erp
|
|
26
|
-
|
|
27
|
-
# Créer une application dans un context existant
|
|
28
|
-
/application:create application platform sales
|
|
29
|
-
|
|
30
|
-
# Créer un module dans une application existante
|
|
31
|
-
/application:create module platform.administration products
|
|
32
|
-
|
|
33
|
-
# Créer une section dans un module existant
|
|
34
|
-
/application:create section platform.administration.users settings
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## WORKFLOW
|
|
40
|
-
|
|
41
|
-
### PHASE 1: PARSING & VALIDATION
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
1. EXTRAIRE level, parent, code des arguments
|
|
45
|
-
2. VALIDER que le parent existe (sauf pour context)
|
|
46
|
-
3. DÉTECTER le context racine
|
|
47
|
-
4. GÉNÉRER les chemins de route et permission
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### PHASE 2: COLLECTE DES TRADUCTIONS
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
AskUserQuestion({
|
|
54
|
-
questions: [
|
|
55
|
-
{
|
|
56
|
-
header: "Labels FR",
|
|
57
|
-
question: "Libellés en français ?",
|
|
58
|
-
options: [
|
|
59
|
-
{ label: "$CODE_PASCAL", description: "Label par défaut" }
|
|
60
|
-
]
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
header: "Icône",
|
|
64
|
-
question: "Quelle icône Lucide ?",
|
|
65
|
-
options: [
|
|
66
|
-
{ label: "Package", description: "Icône produit" },
|
|
67
|
-
{ label: "Folder", description: "Icône générique" },
|
|
68
|
-
{ label: "Settings", description: "Icône configuration" }
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
]
|
|
72
|
-
})
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### PHASE 3: GÉNÉRATION DB SEED
|
|
76
|
-
|
|
77
|
-
| Fichier | Action |
|
|
78
|
-
|---------|--------|
|
|
79
|
-
| `Navigation{Level}Configuration.cs` | Ajouter entité |
|
|
80
|
-
| `NavigationTranslationConfiguration.cs` | Ajouter 4 traductions |
|
|
81
|
-
| `PermissionConfiguration.cs` | Ajouter permissions CRUD |
|
|
82
|
-
| `RolePermissionConfiguration.cs` | Assigner aux rôles |
|
|
83
|
-
|
|
84
|
-
**Templates:** → `.claude/skills/application/templates-seed.md`
|
|
85
|
-
|
|
86
|
-
### PHASE 4: GÉNÉRATION BACKEND
|
|
87
|
-
|
|
88
|
-
| Fichier | Action |
|
|
89
|
-
|---------|--------|
|
|
90
|
-
| `Permissions.cs` | Ajouter classe permissions |
|
|
91
|
-
| `I{Entity}Service.cs` | Créer interface |
|
|
92
|
-
| `{Entity}Service.cs` | Créer implémentation |
|
|
93
|
-
| `{Entity}Dto.cs` | Créer DTOs |
|
|
94
|
-
| `{Entity}.cs` | Créer entité Domain |
|
|
95
|
-
| `{Entity}Configuration.cs` | Créer config EF |
|
|
96
|
-
| `IApplicationDbContext.cs` | Ajouter DbSet |
|
|
97
|
-
| `DependencyInjection.cs` | Enregistrer service |
|
|
98
|
-
|
|
99
|
-
**Templates:** → `.claude/skills/application/templates-backend.md`
|
|
100
|
-
|
|
101
|
-
**Chaîner:** → `/controller:create $AREA $MODULE $ENTITY`
|
|
102
|
-
|
|
103
|
-
### PHASE 5: GÉNÉRATION FRONTEND
|
|
104
|
-
|
|
105
|
-
| Fichier | Action |
|
|
106
|
-
|---------|--------|
|
|
107
|
-
| `{Module}Page.tsx` | Créer page principale |
|
|
108
|
-
| `{Module}ListView.tsx` | Créer composant liste |
|
|
109
|
-
| `use{Module}Preferences.ts` | Créer hook préférences |
|
|
110
|
-
| `{module}Api.ts` | Créer service API |
|
|
111
|
-
| `App.tsx` | Ajouter routes |
|
|
112
|
-
|
|
113
|
-
**Templates:** → `.claude/skills/application/templates-frontend.md`
|
|
114
|
-
|
|
115
|
-
#### 5.1 RÈGLE SECTIONS: Toute section DOIT avoir une page
|
|
116
|
-
|
|
117
|
-
Pour les **sections** (`level=section`), vérifier si une page dédiée est demandée :
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
// Logique de décision
|
|
121
|
-
if (level === 'section') {
|
|
122
|
-
const hasCustomPage = userRequestedSpecificPage();
|
|
123
|
-
|
|
124
|
-
if (!hasCustomPage) {
|
|
125
|
-
// Créer page placeholder avec UnderDevelopment
|
|
126
|
-
createPlaceholderPage(code, parent);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**Création automatique de page placeholder:**
|
|
132
|
-
|
|
133
|
-
1. **Vérifier** que `UnderDevelopment.tsx` existe dans `components/ui/`
|
|
134
|
-
2. **Créer** `{Section}Page.tsx` utilisant `UnderDevelopment`
|
|
135
|
-
3. **Ajouter** route dans `App.tsx`
|
|
136
|
-
4. **Ajouter** traductions i18n pour la section
|
|
137
|
-
|
|
138
|
-
**Template page placeholder:**
|
|
139
|
-
|
|
140
|
-
```tsx
|
|
141
|
-
// web/smartstack-web/src/pages/{area}/{Section}Page.tsx
|
|
142
|
-
import { {Icon} } from 'lucide-react';
|
|
143
|
-
import { useTranslation } from 'react-i18next';
|
|
144
|
-
import { UnderDevelopment } from '@/components/ui/UnderDevelopment';
|
|
145
|
-
|
|
146
|
-
export function {Section}Page() {
|
|
147
|
-
const { t } = useTranslation('{namespace}');
|
|
148
|
-
|
|
149
|
-
return (
|
|
150
|
-
<div className="space-y-6">
|
|
151
|
-
<div>
|
|
152
|
-
<h1 className="text-2xl font-bold text-[var(--text-primary)]">
|
|
153
|
-
{t('{section}.title')}
|
|
154
|
-
</h1>
|
|
155
|
-
<p className="text-sm text-[var(--text-tertiary)] mt-1">
|
|
156
|
-
{t('{section}.subtitle')}
|
|
157
|
-
</p>
|
|
158
|
-
</div>
|
|
159
|
-
<div className="card">
|
|
160
|
-
<UnderDevelopment
|
|
161
|
-
title={t('{section}.underDevelopmentTitle')}
|
|
162
|
-
description={t('{section}.underDevelopmentDescription')}
|
|
163
|
-
icon={<{Icon} className="w-10 h-10 text-amber-600 dark:text-amber-400" />}
|
|
164
|
-
showBackButton={true}
|
|
165
|
-
backUrl="{parentRoute}"
|
|
166
|
-
/>
|
|
167
|
-
</div>
|
|
168
|
-
</div>
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**Template traductions placeholder (à ajouter dans le namespace existant):**
|
|
174
|
-
|
|
175
|
-
```json
|
|
176
|
-
"{section}": {
|
|
177
|
-
"title": "{Label}",
|
|
178
|
-
"subtitle": "{Description}",
|
|
179
|
-
"underDevelopmentTitle": "{Label}",
|
|
180
|
-
"underDevelopmentDescription": "Cette fonctionnalité sera bientôt disponible."
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### PHASE 6: GÉNÉRATION I18N
|
|
185
|
-
|
|
186
|
-
| Fichier | Action |
|
|
187
|
-
|---------|--------|
|
|
188
|
-
| `fr/{module}.json` | Créer traductions FR |
|
|
189
|
-
| `en/{module}.json` | Créer traductions EN |
|
|
190
|
-
| `it/{module}.json` | Créer traductions IT |
|
|
191
|
-
| `de/{module}.json` | Créer traductions DE |
|
|
192
|
-
| `navigation.json` (×4) | Mettre à jour |
|
|
193
|
-
| `i18n/index.ts` | Enregistrer namespace |
|
|
194
|
-
|
|
195
|
-
**Templates:** → `.claude/skills/application/templates-i18n.md`
|
|
196
|
-
|
|
197
|
-
### PHASE 7: MIGRATION
|
|
198
|
-
|
|
199
|
-
```bash
|
|
200
|
-
# Chaîner automatiquement
|
|
201
|
-
/efcore:migration Add{Level}{Code}
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### PHASE 8: VALIDATION
|
|
205
|
-
|
|
206
|
-
```bash
|
|
207
|
-
# Backend
|
|
208
|
-
dotnet build
|
|
209
|
-
dotnet test
|
|
210
|
-
|
|
211
|
-
# Frontend
|
|
212
|
-
cd web/smartstack-web
|
|
213
|
-
npm run build
|
|
214
|
-
npm run lint
|
|
215
|
-
npm run test
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### PHASE 9: RÉSUMÉ
|
|
219
|
-
|
|
220
|
-
```markdown
|
|
221
|
-
## ✅ Création terminée
|
|
222
|
-
|
|
223
|
-
### Fichiers créés
|
|
224
|
-
- 📁 Backend: X fichiers
|
|
225
|
-
- 📁 Frontend: X fichiers
|
|
226
|
-
- 🌐 i18n: 4 langues
|
|
227
|
-
|
|
228
|
-
### Navigation
|
|
229
|
-
- Route: /$ROUTE
|
|
230
|
-
- Permission: $PERMISSION_PATH.*
|
|
231
|
-
|
|
232
|
-
### Prochaines étapes
|
|
233
|
-
1. Vérifier les seeds générés
|
|
234
|
-
2. Tester avec Swagger
|
|
235
|
-
3. Valider l'UI
|
|
236
|
-
|
|
237
|
-
### Commandes utiles
|
|
238
|
-
- `dotnet ef database update` - Appliquer migration
|
|
239
|
-
- `npm run dev` - Lancer frontend
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
---
|
|
243
|
-
|
|
244
|
-
## RÈGLES ABSOLUES
|
|
245
|
-
|
|
246
|
-
1. **TOUJOURS** 4 langues (FR, EN, IT, DE)
|
|
247
|
-
2. **TOUJOURS** respecter l'architecture en couches
|
|
248
|
-
3. **TOUJOURS** implémenter les préférences utilisateur (template complet)
|
|
249
|
-
4. **TOUJOURS** chaîner avec `/controller:create` et `/efcore:migration`
|
|
250
|
-
5. **TOUJOURS** utiliser GUIDs déterministes (`GenerateGuid(index)`)
|
|
251
|
-
6. **TOUJOURS** créer une page pour chaque section (placeholder si non spécifiée)
|
|
252
|
-
7. **JAMAIS** de violation d'architecture (WEB → Infrastructure)
|
|
253
|
-
8. **JAMAIS** de traduction manquante
|
|
254
|
-
9. **JAMAIS** de section sans page frontend correspondante
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## VALIDATION ARCHITECTURE
|
|
259
|
-
|
|
260
|
-
Le skill **DOIT** vérifier après génération :
|
|
261
|
-
|
|
262
|
-
```typescript
|
|
263
|
-
// Vérifier qu'aucun fichier frontend n'importe Infrastructure
|
|
264
|
-
const frontendFiles = glob('web/**/*.{ts,tsx}');
|
|
265
|
-
for (const file of frontendFiles) {
|
|
266
|
-
const content = read(file);
|
|
267
|
-
if (content.includes('SmartStack.Infrastructure')) {
|
|
268
|
-
ERROR('Architecture violation: ' + file);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## SOURCES DE DONNÉES
|
|
276
|
-
|
|
277
|
-
| Donnée | Source |
|
|
278
|
-
|--------|--------|
|
|
279
|
-
| Navigation entities | `src/SmartStack.Infrastructure/Persistence/Configurations/Navigation/` |
|
|
280
|
-
| Translations | `NavigationTranslationConfiguration.cs` |
|
|
281
|
-
| Permissions | `src/SmartStack.Application/Common/Authorization/Permissions.cs` |
|
|
282
|
-
| i18n locales | `web/smartstack-web/src/i18n/locales/` |
|
|
283
|
-
| Routes | `web/smartstack-web/src/App.tsx` |
|
|
284
|
-
| UnderDevelopment | `web/smartstack-web/src/components/ui/UnderDevelopment.tsx` |
|
|
285
|
-
|
|
286
|
-
---
|
|
287
|
-
|
|
288
|
-
## MAPPING NIVEAU → GÉNÉRATION
|
|
289
|
-
|
|
290
|
-
| Niveau | DB Seed | Backend | Frontend | i18n |
|
|
291
|
-
|--------|---------|---------|----------|------|
|
|
292
|
-
| Context | ✅ | ❌ | ❌ | ✅ (nav) |
|
|
293
|
-
| Application | ✅ | ❌ | ✅ (layout) | ✅ (nav) |
|
|
294
|
-
| Module | ✅ | ✅ (complet) | ✅ (complet) | ✅ (complet) |
|
|
295
|
-
| Section | ✅ | ✅ (optionnel) | ✅ (page ou placeholder) | ✅ (nav + section) |
|
|
296
|
-
|
|
297
|
-
> **Note Section:** Toute section DOIT avoir une page. Si aucune page spécifique n'est demandée, créer automatiquement une page placeholder utilisant `UnderDevelopment`.
|
|
298
|
-
|
|
299
|
-
---
|
|
300
|
-
|
|
301
|
-
## EXEMPLES COMPLETS
|
|
302
|
-
|
|
303
|
-
### Exemple 1: Nouveau module Products
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
/application:create module business.sales products
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
Génère:
|
|
310
|
-
- Navigation seed + 4 traductions
|
|
311
|
-
- Permissions CRUD
|
|
312
|
-
- Domain entity `Product`
|
|
313
|
-
- Service `IProductService` + `ProductService`
|
|
314
|
-
- DTOs
|
|
315
|
-
- Controller (via /controller:create)
|
|
316
|
-
- Page React + ListView + Hook préférences
|
|
317
|
-
- 4 fichiers i18n
|
|
318
|
-
- Routes
|
|
319
|
-
- Migration
|
|
320
|
-
|
|
321
|
-
### Exemple 2: Nouvelle application CRM
|
|
322
|
-
|
|
323
|
-
```bash
|
|
324
|
-
/application:create application business crm
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
Génère:
|
|
328
|
-
- Navigation seed application + 4 traductions
|
|
329
|
-
- Layout/Dashboard pour CRM
|
|
330
|
-
- Mise à jour navigation.json (4 langues)
|
|
331
|
-
|
|
332
|
-
### Exemple 3: Nouveau context ERP
|
|
333
|
-
|
|
334
|
-
```bash
|
|
335
|
-
/application:create context _ erp
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
Génère:
|
|
339
|
-
- Navigation seed context + 4 traductions
|
|
340
|
-
- Mise à jour navigation.json (4 langues)
|
|
341
|
-
- Base pour futures applications
|
|
342
|
-
|
|
343
|
-
### Exemple 4: Nouvelle section (avec page placeholder automatique)
|
|
344
|
-
|
|
345
|
-
```bash
|
|
346
|
-
/application:create section platform.administration.workflows analytics
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
Génère:
|
|
350
|
-
- Navigation seed section + 4 traductions
|
|
351
|
-
- Permissions (si applicable)
|
|
352
|
-
- **Page placeholder** `WorkflowAnalyticsPage.tsx` utilisant `UnderDevelopment`
|
|
353
|
-
- Traductions i18n pour la section (titre, description, underDevelopment)
|
|
354
|
-
- Route dans `App.tsx`
|
|
355
|
-
- Export dans `index.ts` du dossier pages
|
|
356
|
-
|
|
357
|
-
**Fichiers créés:**
|
|
358
|
-
```
|
|
359
|
-
web/smartstack-web/src/pages/admin/communications/WorkflowAnalyticsPage.tsx
|
|
360
|
-
web/smartstack-web/src/i18n/locales/{fr,en,de,it}/communications.json (màj)
|
|
361
|
-
web/smartstack-web/src/App.tsx (màj)
|
|
362
|
-
```
|
|
1
|
+
# /application:create - Génération Full-Stack SmartStack
|
|
2
|
+
|
|
3
|
+
> **Synergie Skill/Commande:**
|
|
4
|
+
> - **Skill** (`.claude/skills/application/`) → Invocation automatique par Claude
|
|
5
|
+
> - **Commande** (`/application:create`) → Invocation manuelle par l'utilisateur
|
|
6
|
+
> - Templates partagés dans `.claude/skills/application/templates-*.md`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ARGUMENTS
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/application:create <level> <parent> <code> [options]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
| Variable | Description | Valeurs |
|
|
17
|
+
|----------|-------------|---------|
|
|
18
|
+
| `level` | Niveau de navigation | `context`, `application`, `module`, `section` |
|
|
19
|
+
| `parent` | Code du parent | Ex: `platform`, `platform.administration` |
|
|
20
|
+
| `code` | Code de l'entité | Ex: `products`, `crm`, `erp` |
|
|
21
|
+
|
|
22
|
+
**Exemples:**
|
|
23
|
+
```bash
|
|
24
|
+
# Créer un nouveau context
|
|
25
|
+
/application:create context _ erp
|
|
26
|
+
|
|
27
|
+
# Créer une application dans un context existant
|
|
28
|
+
/application:create application platform sales
|
|
29
|
+
|
|
30
|
+
# Créer un module dans une application existante
|
|
31
|
+
/application:create module platform.administration products
|
|
32
|
+
|
|
33
|
+
# Créer une section dans un module existant
|
|
34
|
+
/application:create section platform.administration.users settings
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## WORKFLOW
|
|
40
|
+
|
|
41
|
+
### PHASE 1: PARSING & VALIDATION
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
1. EXTRAIRE level, parent, code des arguments
|
|
45
|
+
2. VALIDER que le parent existe (sauf pour context)
|
|
46
|
+
3. DÉTECTER le context racine
|
|
47
|
+
4. GÉNÉRER les chemins de route et permission
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### PHASE 2: COLLECTE DES TRADUCTIONS
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
AskUserQuestion({
|
|
54
|
+
questions: [
|
|
55
|
+
{
|
|
56
|
+
header: "Labels FR",
|
|
57
|
+
question: "Libellés en français ?",
|
|
58
|
+
options: [
|
|
59
|
+
{ label: "$CODE_PASCAL", description: "Label par défaut" }
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
header: "Icône",
|
|
64
|
+
question: "Quelle icône Lucide ?",
|
|
65
|
+
options: [
|
|
66
|
+
{ label: "Package", description: "Icône produit" },
|
|
67
|
+
{ label: "Folder", description: "Icône générique" },
|
|
68
|
+
{ label: "Settings", description: "Icône configuration" }
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
})
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### PHASE 3: GÉNÉRATION DB SEED
|
|
76
|
+
|
|
77
|
+
| Fichier | Action |
|
|
78
|
+
|---------|--------|
|
|
79
|
+
| `Navigation{Level}Configuration.cs` | Ajouter entité |
|
|
80
|
+
| `NavigationTranslationConfiguration.cs` | Ajouter 4 traductions |
|
|
81
|
+
| `PermissionConfiguration.cs` | Ajouter permissions CRUD |
|
|
82
|
+
| `RolePermissionConfiguration.cs` | Assigner aux rôles |
|
|
83
|
+
|
|
84
|
+
**Templates:** → `.claude/skills/application/templates-seed.md`
|
|
85
|
+
|
|
86
|
+
### PHASE 4: GÉNÉRATION BACKEND
|
|
87
|
+
|
|
88
|
+
| Fichier | Action |
|
|
89
|
+
|---------|--------|
|
|
90
|
+
| `Permissions.cs` | Ajouter classe permissions |
|
|
91
|
+
| `I{Entity}Service.cs` | Créer interface |
|
|
92
|
+
| `{Entity}Service.cs` | Créer implémentation |
|
|
93
|
+
| `{Entity}Dto.cs` | Créer DTOs |
|
|
94
|
+
| `{Entity}.cs` | Créer entité Domain |
|
|
95
|
+
| `{Entity}Configuration.cs` | Créer config EF |
|
|
96
|
+
| `IApplicationDbContext.cs` | Ajouter DbSet |
|
|
97
|
+
| `DependencyInjection.cs` | Enregistrer service |
|
|
98
|
+
|
|
99
|
+
**Templates:** → `.claude/skills/application/templates-backend.md`
|
|
100
|
+
|
|
101
|
+
**Chaîner:** → `/controller:create $AREA $MODULE $ENTITY`
|
|
102
|
+
|
|
103
|
+
### PHASE 5: GÉNÉRATION FRONTEND
|
|
104
|
+
|
|
105
|
+
| Fichier | Action |
|
|
106
|
+
|---------|--------|
|
|
107
|
+
| `{Module}Page.tsx` | Créer page principale |
|
|
108
|
+
| `{Module}ListView.tsx` | Créer composant liste |
|
|
109
|
+
| `use{Module}Preferences.ts` | Créer hook préférences |
|
|
110
|
+
| `{module}Api.ts` | Créer service API |
|
|
111
|
+
| `App.tsx` | Ajouter routes |
|
|
112
|
+
|
|
113
|
+
**Templates:** → `.claude/skills/application/templates-frontend.md`
|
|
114
|
+
|
|
115
|
+
#### 5.1 RÈGLE SECTIONS: Toute section DOIT avoir une page
|
|
116
|
+
|
|
117
|
+
Pour les **sections** (`level=section`), vérifier si une page dédiée est demandée :
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// Logique de décision
|
|
121
|
+
if (level === 'section') {
|
|
122
|
+
const hasCustomPage = userRequestedSpecificPage();
|
|
123
|
+
|
|
124
|
+
if (!hasCustomPage) {
|
|
125
|
+
// Créer page placeholder avec UnderDevelopment
|
|
126
|
+
createPlaceholderPage(code, parent);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Création automatique de page placeholder:**
|
|
132
|
+
|
|
133
|
+
1. **Vérifier** que `UnderDevelopment.tsx` existe dans `components/ui/`
|
|
134
|
+
2. **Créer** `{Section}Page.tsx` utilisant `UnderDevelopment`
|
|
135
|
+
3. **Ajouter** route dans `App.tsx`
|
|
136
|
+
4. **Ajouter** traductions i18n pour la section
|
|
137
|
+
|
|
138
|
+
**Template page placeholder:**
|
|
139
|
+
|
|
140
|
+
```tsx
|
|
141
|
+
// web/smartstack-web/src/pages/{area}/{Section}Page.tsx
|
|
142
|
+
import { {Icon} } from 'lucide-react';
|
|
143
|
+
import { useTranslation } from 'react-i18next';
|
|
144
|
+
import { UnderDevelopment } from '@/components/ui/UnderDevelopment';
|
|
145
|
+
|
|
146
|
+
export function {Section}Page() {
|
|
147
|
+
const { t } = useTranslation('{namespace}');
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<div className="space-y-6">
|
|
151
|
+
<div>
|
|
152
|
+
<h1 className="text-2xl font-bold text-[var(--text-primary)]">
|
|
153
|
+
{t('{section}.title')}
|
|
154
|
+
</h1>
|
|
155
|
+
<p className="text-sm text-[var(--text-tertiary)] mt-1">
|
|
156
|
+
{t('{section}.subtitle')}
|
|
157
|
+
</p>
|
|
158
|
+
</div>
|
|
159
|
+
<div className="card">
|
|
160
|
+
<UnderDevelopment
|
|
161
|
+
title={t('{section}.underDevelopmentTitle')}
|
|
162
|
+
description={t('{section}.underDevelopmentDescription')}
|
|
163
|
+
icon={<{Icon} className="w-10 h-10 text-amber-600 dark:text-amber-400" />}
|
|
164
|
+
showBackButton={true}
|
|
165
|
+
backUrl="{parentRoute}"
|
|
166
|
+
/>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Template traductions placeholder (à ajouter dans le namespace existant):**
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
"{section}": {
|
|
177
|
+
"title": "{Label}",
|
|
178
|
+
"subtitle": "{Description}",
|
|
179
|
+
"underDevelopmentTitle": "{Label}",
|
|
180
|
+
"underDevelopmentDescription": "Cette fonctionnalité sera bientôt disponible."
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### PHASE 6: GÉNÉRATION I18N
|
|
185
|
+
|
|
186
|
+
| Fichier | Action |
|
|
187
|
+
|---------|--------|
|
|
188
|
+
| `fr/{module}.json` | Créer traductions FR |
|
|
189
|
+
| `en/{module}.json` | Créer traductions EN |
|
|
190
|
+
| `it/{module}.json` | Créer traductions IT |
|
|
191
|
+
| `de/{module}.json` | Créer traductions DE |
|
|
192
|
+
| `navigation.json` (×4) | Mettre à jour |
|
|
193
|
+
| `i18n/index.ts` | Enregistrer namespace |
|
|
194
|
+
|
|
195
|
+
**Templates:** → `.claude/skills/application/templates-i18n.md`
|
|
196
|
+
|
|
197
|
+
### PHASE 7: MIGRATION
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Chaîner automatiquement
|
|
201
|
+
/efcore:migration Add{Level}{Code}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### PHASE 8: VALIDATION
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# Backend
|
|
208
|
+
dotnet build
|
|
209
|
+
dotnet test
|
|
210
|
+
|
|
211
|
+
# Frontend
|
|
212
|
+
cd web/smartstack-web
|
|
213
|
+
npm run build
|
|
214
|
+
npm run lint
|
|
215
|
+
npm run test
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### PHASE 9: RÉSUMÉ
|
|
219
|
+
|
|
220
|
+
```markdown
|
|
221
|
+
## ✅ Création terminée
|
|
222
|
+
|
|
223
|
+
### Fichiers créés
|
|
224
|
+
- 📁 Backend: X fichiers
|
|
225
|
+
- 📁 Frontend: X fichiers
|
|
226
|
+
- 🌐 i18n: 4 langues
|
|
227
|
+
|
|
228
|
+
### Navigation
|
|
229
|
+
- Route: /$ROUTE
|
|
230
|
+
- Permission: $PERMISSION_PATH.*
|
|
231
|
+
|
|
232
|
+
### Prochaines étapes
|
|
233
|
+
1. Vérifier les seeds générés
|
|
234
|
+
2. Tester avec Swagger
|
|
235
|
+
3. Valider l'UI
|
|
236
|
+
|
|
237
|
+
### Commandes utiles
|
|
238
|
+
- `dotnet ef database update` - Appliquer migration
|
|
239
|
+
- `npm run dev` - Lancer frontend
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## RÈGLES ABSOLUES
|
|
245
|
+
|
|
246
|
+
1. **TOUJOURS** 4 langues (FR, EN, IT, DE)
|
|
247
|
+
2. **TOUJOURS** respecter l'architecture en couches
|
|
248
|
+
3. **TOUJOURS** implémenter les préférences utilisateur (template complet)
|
|
249
|
+
4. **TOUJOURS** chaîner avec `/controller:create` et `/efcore:migration`
|
|
250
|
+
5. **TOUJOURS** utiliser GUIDs déterministes (`GenerateGuid(index)`)
|
|
251
|
+
6. **TOUJOURS** créer une page pour chaque section (placeholder si non spécifiée)
|
|
252
|
+
7. **JAMAIS** de violation d'architecture (WEB → Infrastructure)
|
|
253
|
+
8. **JAMAIS** de traduction manquante
|
|
254
|
+
9. **JAMAIS** de section sans page frontend correspondante
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## VALIDATION ARCHITECTURE
|
|
259
|
+
|
|
260
|
+
Le skill **DOIT** vérifier après génération :
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
// Vérifier qu'aucun fichier frontend n'importe Infrastructure
|
|
264
|
+
const frontendFiles = glob('web/**/*.{ts,tsx}');
|
|
265
|
+
for (const file of frontendFiles) {
|
|
266
|
+
const content = read(file);
|
|
267
|
+
if (content.includes('SmartStack.Infrastructure')) {
|
|
268
|
+
ERROR('Architecture violation: ' + file);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## SOURCES DE DONNÉES
|
|
276
|
+
|
|
277
|
+
| Donnée | Source |
|
|
278
|
+
|--------|--------|
|
|
279
|
+
| Navigation entities | `src/SmartStack.Infrastructure/Persistence/Configurations/Navigation/` |
|
|
280
|
+
| Translations | `NavigationTranslationConfiguration.cs` |
|
|
281
|
+
| Permissions | `src/SmartStack.Application/Common/Authorization/Permissions.cs` |
|
|
282
|
+
| i18n locales | `web/smartstack-web/src/i18n/locales/` |
|
|
283
|
+
| Routes | `web/smartstack-web/src/App.tsx` |
|
|
284
|
+
| UnderDevelopment | `web/smartstack-web/src/components/ui/UnderDevelopment.tsx` |
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## MAPPING NIVEAU → GÉNÉRATION
|
|
289
|
+
|
|
290
|
+
| Niveau | DB Seed | Backend | Frontend | i18n |
|
|
291
|
+
|--------|---------|---------|----------|------|
|
|
292
|
+
| Context | ✅ | ❌ | ❌ | ✅ (nav) |
|
|
293
|
+
| Application | ✅ | ❌ | ✅ (layout) | ✅ (nav) |
|
|
294
|
+
| Module | ✅ | ✅ (complet) | ✅ (complet) | ✅ (complet) |
|
|
295
|
+
| Section | ✅ | ✅ (optionnel) | ✅ (page ou placeholder) | ✅ (nav + section) |
|
|
296
|
+
|
|
297
|
+
> **Note Section:** Toute section DOIT avoir une page. Si aucune page spécifique n'est demandée, créer automatiquement une page placeholder utilisant `UnderDevelopment`.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## EXEMPLES COMPLETS
|
|
302
|
+
|
|
303
|
+
### Exemple 1: Nouveau module Products
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
/application:create module business.sales products
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Génère:
|
|
310
|
+
- Navigation seed + 4 traductions
|
|
311
|
+
- Permissions CRUD
|
|
312
|
+
- Domain entity `Product`
|
|
313
|
+
- Service `IProductService` + `ProductService`
|
|
314
|
+
- DTOs
|
|
315
|
+
- Controller (via /controller:create)
|
|
316
|
+
- Page React + ListView + Hook préférences
|
|
317
|
+
- 4 fichiers i18n
|
|
318
|
+
- Routes
|
|
319
|
+
- Migration
|
|
320
|
+
|
|
321
|
+
### Exemple 2: Nouvelle application CRM
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
/application:create application business crm
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
Génère:
|
|
328
|
+
- Navigation seed application + 4 traductions
|
|
329
|
+
- Layout/Dashboard pour CRM
|
|
330
|
+
- Mise à jour navigation.json (4 langues)
|
|
331
|
+
|
|
332
|
+
### Exemple 3: Nouveau context ERP
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
/application:create context _ erp
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Génère:
|
|
339
|
+
- Navigation seed context + 4 traductions
|
|
340
|
+
- Mise à jour navigation.json (4 langues)
|
|
341
|
+
- Base pour futures applications
|
|
342
|
+
|
|
343
|
+
### Exemple 4: Nouvelle section (avec page placeholder automatique)
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
/application:create section platform.administration.workflows analytics
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Génère:
|
|
350
|
+
- Navigation seed section + 4 traductions
|
|
351
|
+
- Permissions (si applicable)
|
|
352
|
+
- **Page placeholder** `WorkflowAnalyticsPage.tsx` utilisant `UnderDevelopment`
|
|
353
|
+
- Traductions i18n pour la section (titre, description, underDevelopment)
|
|
354
|
+
- Route dans `App.tsx`
|
|
355
|
+
- Export dans `index.ts` du dossier pages
|
|
356
|
+
|
|
357
|
+
**Fichiers créés:**
|
|
358
|
+
```
|
|
359
|
+
web/smartstack-web/src/pages/admin/communications/WorkflowAnalyticsPage.tsx
|
|
360
|
+
web/smartstack-web/src/i18n/locales/{fr,en,de,it}/communications.json (màj)
|
|
361
|
+
web/smartstack-web/src/App.tsx (màj)
|
|
362
|
+
```
|