@atlashub/smartstack-cli 1.5.0 → 1.5.2

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.
Files changed (159) hide show
  1. package/.documentation/agents.html +920 -916
  2. package/.documentation/apex.html +1022 -1018
  3. package/.documentation/business-analyse.html +1505 -1501
  4. package/.documentation/commands.html +684 -680
  5. package/.documentation/css/styles.css +2168 -2168
  6. package/.documentation/efcore.html +2509 -2505
  7. package/.documentation/gitflow.html +2622 -2618
  8. package/.documentation/hooks.html +417 -413
  9. package/.documentation/index.html +327 -323
  10. package/.documentation/init.html +565 -0
  11. package/.documentation/installation.html +548 -462
  12. package/.documentation/js/app.js +794 -794
  13. package/.documentation/ralph-loop.html +534 -530
  14. package/.documentation/test-web.html +517 -513
  15. package/config/default-config.json +86 -86
  16. package/config/settings.json +53 -53
  17. package/config/settings.local.example.json +16 -16
  18. package/dist/index.js +18 -8
  19. package/dist/index.js.map +1 -1
  20. package/package.json +88 -88
  21. package/templates/agents/action.md +36 -36
  22. package/templates/agents/efcore/conflicts.md +84 -84
  23. package/templates/agents/efcore/db-deploy.md +51 -51
  24. package/templates/agents/efcore/db-reset.md +59 -59
  25. package/templates/agents/efcore/db-seed.md +56 -56
  26. package/templates/agents/efcore/db-status.md +64 -64
  27. package/templates/agents/efcore/migration.md +85 -85
  28. package/templates/agents/efcore/rebase-snapshot.md +62 -62
  29. package/templates/agents/efcore/scan.md +90 -90
  30. package/templates/agents/efcore/squash.md +67 -67
  31. package/templates/agents/explore-codebase.md +65 -65
  32. package/templates/agents/explore-docs.md +97 -97
  33. package/templates/agents/fix-grammar.md +49 -49
  34. package/templates/agents/gitflow/abort.md +45 -45
  35. package/templates/agents/gitflow/cleanup.md +85 -85
  36. package/templates/agents/gitflow/commit.md +40 -40
  37. package/templates/agents/gitflow/exec.md +48 -48
  38. package/templates/agents/gitflow/finish.md +92 -92
  39. package/templates/agents/gitflow/init.md +139 -139
  40. package/templates/agents/gitflow/merge.md +62 -62
  41. package/templates/agents/gitflow/plan.md +42 -42
  42. package/templates/agents/gitflow/pr.md +78 -78
  43. package/templates/agents/gitflow/review.md +49 -49
  44. package/templates/agents/gitflow/start.md +61 -61
  45. package/templates/agents/gitflow/status.md +32 -32
  46. package/templates/agents/snipper.md +36 -36
  47. package/templates/agents/websearch.md +46 -46
  48. package/templates/commands/_resources/formatting-guide.md +124 -124
  49. package/templates/commands/ai-prompt.md +315 -315
  50. package/templates/commands/apex/1-analyze.md +100 -100
  51. package/templates/commands/apex/2-plan.md +145 -145
  52. package/templates/commands/apex/3-execute.md +171 -171
  53. package/templates/commands/apex/4-examine.md +116 -116
  54. package/templates/commands/apex/5-tasks.md +209 -209
  55. package/templates/commands/apex.md +76 -76
  56. package/templates/commands/application/create.md +362 -362
  57. package/templates/commands/application/templates-backend.md +463 -463
  58. package/templates/commands/application/templates-frontend.md +517 -517
  59. package/templates/commands/application/templates-i18n.md +478 -478
  60. package/templates/commands/application/templates-seed.md +362 -362
  61. package/templates/commands/application.md +303 -303
  62. package/templates/commands/business-analyse/0-orchestrate.md +640 -640
  63. package/templates/commands/business-analyse/1-init.md +269 -269
  64. package/templates/commands/business-analyse/2-discover.md +520 -520
  65. package/templates/commands/business-analyse/3-analyse.md +408 -408
  66. package/templates/commands/business-analyse/4-specify.md +598 -598
  67. package/templates/commands/business-analyse/5-validate.md +326 -326
  68. package/templates/commands/business-analyse/6-handoff.md +746 -746
  69. package/templates/commands/business-analyse/7-doc-html.md +602 -602
  70. package/templates/commands/business-analyse/bug.md +325 -325
  71. package/templates/commands/business-analyse/change-request.md +368 -368
  72. package/templates/commands/business-analyse/hotfix.md +200 -200
  73. package/templates/commands/business-analyse.md +640 -640
  74. package/templates/commands/controller/create.md +216 -216
  75. package/templates/commands/controller/postman-templates.md +528 -528
  76. package/templates/commands/controller/templates.md +600 -600
  77. package/templates/commands/controller.md +337 -337
  78. package/templates/commands/create/agent.md +138 -138
  79. package/templates/commands/create/command.md +166 -166
  80. package/templates/commands/create/hook.md +234 -234
  81. package/templates/commands/create/plugin.md +329 -329
  82. package/templates/commands/create/project.md +507 -507
  83. package/templates/commands/create/skill.md +199 -199
  84. package/templates/commands/create.md +220 -220
  85. package/templates/commands/debug.md +95 -95
  86. package/templates/commands/documentation/module.md +202 -202
  87. package/templates/commands/documentation/templates.md +432 -432
  88. package/templates/commands/documentation.md +190 -190
  89. package/templates/commands/efcore/_env-check.md +153 -153
  90. package/templates/commands/efcore/conflicts.md +186 -186
  91. package/templates/commands/efcore/db-deploy.md +193 -193
  92. package/templates/commands/efcore/db-reset.md +426 -426
  93. package/templates/commands/efcore/db-seed.md +326 -326
  94. package/templates/commands/efcore/db-status.md +226 -226
  95. package/templates/commands/efcore/migration.md +400 -400
  96. package/templates/commands/efcore/rebase-snapshot.md +264 -264
  97. package/templates/commands/efcore/scan.md +198 -198
  98. package/templates/commands/efcore/squash.md +298 -298
  99. package/templates/commands/efcore.md +224 -224
  100. package/templates/commands/epct.md +69 -69
  101. package/templates/commands/explain.md +186 -186
  102. package/templates/commands/explore.md +45 -45
  103. package/templates/commands/feature-full.md +267 -267
  104. package/templates/commands/gitflow/1-init.md +1038 -1038
  105. package/templates/commands/gitflow/10-start.md +768 -768
  106. package/templates/commands/gitflow/11-finish.md +457 -457
  107. package/templates/commands/gitflow/12-cleanup.md +276 -276
  108. package/templates/commands/gitflow/13-sync.md +216 -216
  109. package/templates/commands/gitflow/14-rebase.md +251 -251
  110. package/templates/commands/gitflow/2-status.md +277 -277
  111. package/templates/commands/gitflow/3-commit.md +344 -344
  112. package/templates/commands/gitflow/4-plan.md +145 -145
  113. package/templates/commands/gitflow/5-exec.md +147 -147
  114. package/templates/commands/gitflow/6-abort.md +344 -344
  115. package/templates/commands/gitflow/7-pull-request.md +453 -355
  116. package/templates/commands/gitflow/8-review.md +240 -176
  117. package/templates/commands/gitflow/9-merge.md +451 -365
  118. package/templates/commands/gitflow.md +128 -128
  119. package/templates/commands/implement.md +663 -663
  120. package/templates/commands/init.md +567 -562
  121. package/templates/commands/mcp-integration.md +330 -330
  122. package/templates/commands/notification.md +129 -129
  123. package/templates/commands/oneshot.md +57 -57
  124. package/templates/commands/quick-search.md +72 -72
  125. package/templates/commands/ralph-loop/cancel-ralph.md +18 -18
  126. package/templates/commands/ralph-loop/help.md +126 -126
  127. package/templates/commands/ralph-loop/ralph-loop.md +18 -18
  128. package/templates/commands/review.md +106 -106
  129. package/templates/commands/utils/test-web-config.md +160 -160
  130. package/templates/commands/utils/test-web.md +151 -151
  131. package/templates/commands/validate.md +233 -233
  132. package/templates/commands/workflow.md +193 -193
  133. package/templates/gitflow/config.json +138 -138
  134. package/templates/hooks/ef-migration-check.md +139 -139
  135. package/templates/hooks/hooks.json +25 -25
  136. package/templates/hooks/stop-hook.sh +177 -177
  137. package/templates/skills/ai-prompt/SKILL.md +778 -778
  138. package/templates/skills/application/SKILL.md +563 -563
  139. package/templates/skills/application/templates-backend.md +450 -450
  140. package/templates/skills/application/templates-frontend.md +531 -531
  141. package/templates/skills/application/templates-i18n.md +520 -520
  142. package/templates/skills/application/templates-seed.md +647 -647
  143. package/templates/skills/business-analyse/SKILL.md +191 -191
  144. package/templates/skills/business-analyse/questionnaire.md +283 -283
  145. package/templates/skills/business-analyse/templates-frd.md +477 -477
  146. package/templates/skills/business-analyse/templates-react.md +580 -580
  147. package/templates/skills/controller/SKILL.md +240 -240
  148. package/templates/skills/controller/postman-templates.md +614 -614
  149. package/templates/skills/controller/templates.md +1468 -1468
  150. package/templates/skills/documentation/SKILL.md +133 -133
  151. package/templates/skills/documentation/templates.md +476 -476
  152. package/templates/skills/feature-full/SKILL.md +838 -838
  153. package/templates/skills/notification/SKILL.md +555 -555
  154. package/templates/skills/ui-components/SKILL.md +870 -870
  155. package/templates/skills/workflow/SKILL.md +582 -582
  156. package/templates/test-web/api-health.json +38 -38
  157. package/templates/test-web/minimal.json +19 -19
  158. package/templates/test-web/npm-package.json +46 -46
  159. package/templates/test-web/seo-check.json +54 -54
@@ -1,426 +1,426 @@
1
- ---
2
- description: Completely reset database (Drop + Recreate + Migrations)
3
- agent: efcore-db-reset
4
- model: sonnet
5
- ---
6
-
7
- # EF Core Database Reset
8
-
9
- Drops and recreates the database, then applies all migrations using EF Core CLI only.
10
-
11
- **WARNING: This command DELETES all data!**
12
-
13
- > **CLAUDE INSTRUCTION:** The `AskUserQuestion({...})` blocks are instructions to use the `AskUserQuestion` tool in an **interactive** manner. You MUST execute the tool with these parameters to get the user's response BEFORE continuing.
14
-
15
- ---
16
-
17
- ## RÈGLES DE CONFORMITÉ (OBLIGATOIRE)
18
-
19
- > **INTERDIT - Violations CLAUDE.md:**
20
- > - ❌ Utilisation de `sqlcmd` avec SQL brut
21
- > - ❌ Scripts SQL (.sql files) dans le repository
22
- > - ❌ Commandes SQL directes pour backup/restore
23
- >
24
- > **OBLIGATOIRE - Méthodes autorisées:**
25
- > - ✅ `dotnet ef database drop` pour supprimer
26
- > - ✅ `dotnet ef database update` pour recréer
27
- > - ✅ Backup via outils externes (SQL Server Management Studio, Azure)
28
- >
29
- > **Contact support:** support@atlshub.ch
30
-
31
- ---
32
-
33
- ## STEP 0: Verification environnement et connexion (CRITIQUE)
34
-
35
- > **Include:** `_env-check.md` - TOUTES les etapes car commande destructive
36
-
37
- ### 0.1 Detecter les fichiers appsettings
38
-
39
- ```bash
40
- # Scanner les fichiers appsettings
41
- API_DIR=$(find . -type d -name "*.Api" | head -1)
42
- [ -z "$API_DIR" ] && API_DIR="src/SmartStack.Api"
43
-
44
- echo "FICHIERS APPSETTINGS DISPONIBLES:"
45
- find "$API_DIR" -maxdepth 1 -name "appsettings*.json" 2>/dev/null | while read f; do
46
- echo " - $(basename $f)"
47
- done
48
- ```
49
-
50
- ### 0.2 Selectionner l'environnement
51
-
52
- ```bash
53
- # Priorite: --env flag > appsettings.Local.json > erreur
54
- ENV_FLAG="${1#--env=}"
55
-
56
- if [ -n "$ENV_FLAG" ] && [ "$ENV_FLAG" != "$1" ]; then
57
- SELECTED_ENV="appsettings.${ENV_FLAG}.json"
58
- elif [ -f "$API_DIR/appsettings.Local.json" ]; then
59
- SELECTED_ENV="appsettings.Local.json"
60
- else
61
- echo "ERROR: Aucun fichier appsettings trouve"
62
- echo " Creez appsettings.Local.json ou utilisez --env {Environment}"
63
- exit 1
64
- fi
65
-
66
- echo ""
67
- echo "ENVIRONNEMENT SELECTIONNE: $SELECTED_ENV"
68
- ```
69
-
70
- ### 0.3 Extraire et afficher la connexion
71
-
72
- ```bash
73
- # Extraire connection string
74
- CONNECTION_STRING=$(powershell -Command "
75
- \$json = Get-Content '$API_DIR/$SELECTED_ENV' | ConvertFrom-Json
76
- \$json.ConnectionStrings.DefaultConnection
77
- ")
78
-
79
- DATABASE_NAME=$(echo "$CONNECTION_STRING" | grep -oP 'Database=\K[^;]+')
80
- SERVER_NAME=$(echo "$CONNECTION_STRING" | grep -oP 'Server=\K[^;]+')
81
- CONNECTION_MASKED=$(echo "$CONNECTION_STRING" | sed 's/Password=[^;]*/Password=****/g')
82
- ```
83
-
84
- ### 0.4 Afficher le WARNING avec details de la base
85
-
86
- ```
87
- ================================================================================
88
- EF CORE - DATABASE RESET (OPERATION DESTRUCTIVE)
89
- ================================================================================
90
-
91
- ENVIRONNEMENT: {SELECTED_ENV}
92
-
93
- BASE DE DONNEES QUI SERA SUPPRIMEE:
94
- Server: {SERVER_NAME}
95
- Database: {DATABASE_NAME}
96
- String: {CONNECTION_MASKED}
97
-
98
- ================================================================================
99
- ```
100
-
101
- ### 0.5 Protection Production (BLOQUANT)
102
-
103
- ```bash
104
- # Bloquer si Production detecte
105
- if [[ "$SELECTED_ENV" == *"Production"* ]]; then
106
- echo "================================================================================
107
- BLOQUE - ENVIRONNEMENT PRODUCTION
108
- ================================================================================
109
-
110
- ERREUR: Reset interdit en environnement Production
111
-
112
- Cette commande est bloquee pour proteger les donnees de production.
113
-
114
- OPTIONS:
115
- 1. Utilisez appsettings.Local.json (defaut, recommande)
116
- 2. Utilisez --env Development ou --env Staging
117
-
118
- Contact: support@atlshub.ch
119
-
120
- ================================================================================"
121
- exit 1
122
- fi
123
- ```
124
-
125
- ---
126
-
127
- ## STEP 1: Confirmation obligatoire (avec nom de la base)
128
-
129
- > **CRITIQUE:** L'utilisateur doit voir exactement quelle base sera supprimee.
130
-
131
- ```javascript
132
- AskUserQuestion({
133
- questions: [{
134
- question: "DANGER: Supprimer DEFINITIVEMENT la base '" + DATABASE_NAME + "' sur " + SERVER_NAME + "? TOUTES LES DONNEES SERONT PERDUES!",
135
- header: "Reset DB",
136
- options: [
137
- { label: "Oui, supprimer " + DATABASE_NAME, description: "Drop + Recreate (DATA LOSS IRREVERSIBLE)" },
138
- { label: "Non, annuler", description: "Conserver la base actuelle" }
139
- ],
140
- multiSelect: false
141
- }]
142
- })
143
- ```
144
-
145
- **If No → Stop immediately**
146
-
147
- ---
148
-
149
- ## STEP 2: Detecter les projets EF Core
150
-
151
- ```bash
152
- # Detect EF Core projects
153
- STARTUP_PROJECT=$(find . -name "*.Api.csproj" -o -name "*Web.csproj" | head -1)
154
- INFRA_PROJECT=$(find . -name "*Infrastructure.csproj" | head -1)
155
-
156
- if [ -z "$INFRA_PROJECT" ]; then
157
- INFRA_PROJECT=$(find . -name "*.csproj" -exec grep -l "Microsoft.EntityFrameworkCore" {} \; | head -1)
158
- fi
159
-
160
- echo "Startup project: $STARTUP_PROJECT"
161
- echo "Infrastructure project: $INFRA_PROJECT"
162
- ```
163
-
164
- ---
165
-
166
- ## STEP 3: Backup recommendation
167
-
168
- ```javascript
169
- AskUserQuestion({
170
- questions: [{
171
- question: "Do you need to backup data before deletion?",
172
- header: "Backup",
173
- options: [
174
- { label: "No backup needed", description: "Development data only - proceed" },
175
- { label: "Manual backup first", description: "I'll backup via SSMS/Azure Portal" }
176
- ],
177
- multiSelect: false
178
- }]
179
- })
180
- ```
181
-
182
- **If manual backup:**
183
-
184
- ```
185
- ================================================================================
186
- BACKUP INSTRUCTIONS
187
- ================================================================================
188
-
189
- Pour sauvegarder votre base de données AVANT le reset:
190
-
191
- OPTION 1 - SQL Server Management Studio (SSMS):
192
- 1. Connectez-vous à votre serveur
193
- 2. Clic droit sur la DB → Tasks → Back Up...
194
- 3. Sélectionnez destination et lancez
195
-
196
- OPTION 2 - Azure Portal (si Azure SQL):
197
- 1. Azure Portal → Votre DB → Export
198
- 2. Configurez le storage account
199
- 3. Lancez l'export
200
-
201
- OPTION 3 - Azure Data Studio:
202
- 1. Connectez-vous → Clic droit DB → Backup
203
-
204
- Une fois le backup effectué, relancez /efcore:db-reset
205
-
206
- ================================================================================
207
- ```
208
-
209
- **Stop and wait for user to complete backup manually**
210
-
211
- ---
212
-
213
- ## STEP 4: Check migration state BEFORE drop
214
-
215
- ```bash
216
- echo "Checking migration state..."
217
-
218
- # List migrations in codebase
219
- CODE_MIGRATIONS=$(dotnet ef migrations list \
220
- --project "$INFRA_PROJECT" \
221
- --startup-project "$STARTUP_PROJECT" \
222
- --no-build 2>/dev/null | grep -E "^[0-9]{14}_" | wc -l)
223
-
224
- echo " Migrations in codebase: $CODE_MIGRATIONS"
225
-
226
- # Try to get applied migrations from database (may fail if DB doesn't exist)
227
- APPLIED_MIGRATIONS=$(dotnet ef migrations list \
228
- --project "$INFRA_PROJECT" \
229
- --startup-project "$STARTUP_PROJECT" \
230
- --no-build 2>/dev/null | grep -E "^\s*[0-9]{14}_.*\(Applied\)" | wc -l)
231
-
232
- echo " Migrations applied in DB: $APPLIED_MIGRATIONS"
233
-
234
- # List migration names for display
235
- echo ""
236
- echo "Migrations in codebase:"
237
- dotnet ef migrations list \
238
- --project "$INFRA_PROJECT" \
239
- --startup-project "$STARTUP_PROJECT" \
240
- --no-build 2>/dev/null | grep -E "^[0-9]{14}_" | head -20
241
- ```
242
-
243
- ---
244
-
245
- ## STEP 5: Confirm migration reset strategy
246
-
247
- > **IMPORTANT:** If migrations were squashed (fewer migrations in code than previously applied),
248
- > applying all migrations will create a fresh database with the NEW migration history.
249
-
250
- ```javascript
251
- AskUserQuestion({
252
- questions: [{
253
- question: "How should we handle migrations after database reset?",
254
- header: "Migrations",
255
- options: [
256
- { label: "Apply current migrations", description: "Use migrations currently in codebase (recommended after squash)" },
257
- { label: "Cancel reset", description: "Stop and review migration state first" }
258
- ],
259
- multiSelect: false
260
- }]
261
- })
262
- ```
263
-
264
- **If "Cancel reset" → Stop immediately and suggest:**
265
-
266
- ```
267
- ================================================================================
268
- RESET CANCELLED - REVIEW MIGRATIONS
269
- ================================================================================
270
-
271
- Pour vérifier l'état des migrations:
272
-
273
- /efcore:db-status → Voir les migrations appliquées vs disponibles
274
- /efcore:scan → Scanner les migrations sur toutes les branches
275
-
276
- Si des migrations ont été squashées:
277
- - Les anciennes migrations n'existent plus dans le code
278
- - Le reset appliquera uniquement les nouvelles migrations
279
- - C'est le comportement ATTENDU après un squash
280
-
281
- Si vous voulez restaurer d'anciennes migrations:
282
- - Vérifiez l'historique git: git log --oneline -- "**/Migrations/"
283
- - Restaurez les fichiers: git checkout <commit> -- path/to/Migrations/
284
-
285
- ================================================================================
286
- ```
287
-
288
- ---
289
-
290
- ## STEP 6: Drop database
291
-
292
- ```bash
293
- echo "Dropping database..."
294
-
295
- # Use EF Core CLI only (NO sqlcmd)
296
- dotnet ef database drop \
297
- --project "$INFRA_PROJECT" \
298
- --startup-project "$STARTUP_PROJECT" \
299
- --force
300
-
301
- if [ $? -eq 0 ]; then
302
- echo " Database dropped successfully"
303
- else
304
- echo " WARNING: Drop command returned error (database may not exist)"
305
- fi
306
- ```
307
-
308
- ---
309
-
310
- ## STEP 7: Recreate and apply migrations
311
-
312
- ```bash
313
- echo "Applying all migrations..."
314
-
315
- # Apply all migrations (creates database if missing)
316
- dotnet ef database update \
317
- --project "$INFRA_PROJECT" \
318
- --startup-project "$STARTUP_PROJECT" \
319
- --verbose
320
-
321
- if [ $? -ne 0 ]; then
322
- echo "ERROR: Failed to apply migrations"
323
- exit 1
324
- fi
325
-
326
- echo " Database recreated with all migrations"
327
- ```
328
-
329
- ---
330
-
331
- ## STEP 8: Optional seed
332
-
333
- ```javascript
334
- AskUserQuestion({
335
- questions: [{
336
- question: "Populate database with test data (via HasData)?",
337
- header: "Seed",
338
- options: [
339
- { label: "Yes (recommended)", description: "Apply HasData seed from migrations" },
340
- { label: "No", description: "Empty database" }
341
- ],
342
- multiSelect: false
343
- }]
344
- })
345
- ```
346
-
347
- **If yes:**
348
-
349
- ```bash
350
- # HasData is already applied via migrations
351
- # If additional seeding needed, use Seeder class
352
- if grep -rq "IDataSeeder\|class.*Seeder" . --include="*.cs" 2>/dev/null; then
353
- echo "Executing DataSeeder..."
354
- dotnet run --project "$STARTUP_PROJECT" -- --seed
355
- else
356
- echo " HasData() seed already applied via migrations"
357
- fi
358
- ```
359
-
360
- ---
361
-
362
- ## STEP 9: Verification
363
-
364
- ```bash
365
- echo "Verifying database..."
366
-
367
- # Check migrations status
368
- dotnet ef migrations list \
369
- --project "$INFRA_PROJECT" \
370
- --startup-project "$STARTUP_PROJECT" \
371
- --no-build 2>/dev/null | tail -10
372
-
373
- echo ""
374
- echo " Use /efcore:db-status for detailed status"
375
- ```
376
-
377
- ---
378
-
379
- ## STEP 10: Summary
380
-
381
- ```
382
- ================================================================================
383
- DATABASE RESET COMPLETE
384
- ================================================================================
385
-
386
- ✓ Old database deleted (via dotnet ef database drop)
387
- ✓ New database created (via dotnet ef database update)
388
- ✓ All migrations applied
389
- {✓ HasData seed applied | ○ Empty database}
390
-
391
- COMPLIANT: ✓ EF Core CLI only (no raw SQL)
392
-
393
- NEXT COMMANDS:
394
- /efcore:db-status → Check status
395
- /efcore:db-seed → Additional seeding (if needed)
396
- dotnet run → Launch application
397
-
398
- ================================================================================
399
- ```
400
-
401
- ---
402
-
403
- ## Options
404
-
405
- | Option | Description |
406
- |--------|-------------|
407
- | `--env {name}` | Utiliser appsettings.{name}.json (ex: --env Development) |
408
-
409
- ## Security
410
-
411
- | Protection | Description |
412
- |------------|-------------|
413
- | Env Display | Affiche la base de donnees AVANT confirmation |
414
- | Confirmation | Demande explicite avec le NOM de la base |
415
- | Production Block | Bloque si appsettings.Production.json detecte |
416
- | Migration Check | Displays migration state and asks before applying |
417
- | EF Core Only | No raw SQL commands - uses dotnet ef CLI |
418
- | Manual Backup | User directed to SSMS/Azure for backups |
419
-
420
- ---
421
-
422
- ## Support
423
-
424
- > **Questions ou problèmes avec le reset EF Core?**
425
- >
426
- > 📧 **support@atlshub.ch**
1
+ ---
2
+ description: Completely reset database (Drop + Recreate + Migrations)
3
+ agent: efcore-db-reset
4
+ model: sonnet
5
+ ---
6
+
7
+ # EF Core Database Reset
8
+
9
+ Drops and recreates the database, then applies all migrations using EF Core CLI only.
10
+
11
+ **WARNING: This command DELETES all data!**
12
+
13
+ > **CLAUDE INSTRUCTION:** The `AskUserQuestion({...})` blocks are instructions to use the `AskUserQuestion` tool in an **interactive** manner. You MUST execute the tool with these parameters to get the user's response BEFORE continuing.
14
+
15
+ ---
16
+
17
+ ## RÈGLES DE CONFORMITÉ (OBLIGATOIRE)
18
+
19
+ > **INTERDIT - Violations CLAUDE.md:**
20
+ > - ❌ Utilisation de `sqlcmd` avec SQL brut
21
+ > - ❌ Scripts SQL (.sql files) dans le repository
22
+ > - ❌ Commandes SQL directes pour backup/restore
23
+ >
24
+ > **OBLIGATOIRE - Méthodes autorisées:**
25
+ > - ✅ `dotnet ef database drop` pour supprimer
26
+ > - ✅ `dotnet ef database update` pour recréer
27
+ > - ✅ Backup via outils externes (SQL Server Management Studio, Azure)
28
+ >
29
+ > **Contact support:** support@atlshub.ch
30
+
31
+ ---
32
+
33
+ ## STEP 0: Verification environnement et connexion (CRITIQUE)
34
+
35
+ > **Include:** `_env-check.md` - TOUTES les etapes car commande destructive
36
+
37
+ ### 0.1 Detecter les fichiers appsettings
38
+
39
+ ```bash
40
+ # Scanner les fichiers appsettings
41
+ API_DIR=$(find . -type d -name "*.Api" | head -1)
42
+ [ -z "$API_DIR" ] && API_DIR="src/SmartStack.Api"
43
+
44
+ echo "FICHIERS APPSETTINGS DISPONIBLES:"
45
+ find "$API_DIR" -maxdepth 1 -name "appsettings*.json" 2>/dev/null | while read f; do
46
+ echo " - $(basename $f)"
47
+ done
48
+ ```
49
+
50
+ ### 0.2 Selectionner l'environnement
51
+
52
+ ```bash
53
+ # Priorite: --env flag > appsettings.Local.json > erreur
54
+ ENV_FLAG="${1#--env=}"
55
+
56
+ if [ -n "$ENV_FLAG" ] && [ "$ENV_FLAG" != "$1" ]; then
57
+ SELECTED_ENV="appsettings.${ENV_FLAG}.json"
58
+ elif [ -f "$API_DIR/appsettings.Local.json" ]; then
59
+ SELECTED_ENV="appsettings.Local.json"
60
+ else
61
+ echo "ERROR: Aucun fichier appsettings trouve"
62
+ echo " Creez appsettings.Local.json ou utilisez --env {Environment}"
63
+ exit 1
64
+ fi
65
+
66
+ echo ""
67
+ echo "ENVIRONNEMENT SELECTIONNE: $SELECTED_ENV"
68
+ ```
69
+
70
+ ### 0.3 Extraire et afficher la connexion
71
+
72
+ ```bash
73
+ # Extraire connection string
74
+ CONNECTION_STRING=$(powershell -Command "
75
+ \$json = Get-Content '$API_DIR/$SELECTED_ENV' | ConvertFrom-Json
76
+ \$json.ConnectionStrings.DefaultConnection
77
+ ")
78
+
79
+ DATABASE_NAME=$(echo "$CONNECTION_STRING" | grep -oP 'Database=\K[^;]+')
80
+ SERVER_NAME=$(echo "$CONNECTION_STRING" | grep -oP 'Server=\K[^;]+')
81
+ CONNECTION_MASKED=$(echo "$CONNECTION_STRING" | sed 's/Password=[^;]*/Password=****/g')
82
+ ```
83
+
84
+ ### 0.4 Afficher le WARNING avec details de la base
85
+
86
+ ```
87
+ ================================================================================
88
+ EF CORE - DATABASE RESET (OPERATION DESTRUCTIVE)
89
+ ================================================================================
90
+
91
+ ENVIRONNEMENT: {SELECTED_ENV}
92
+
93
+ BASE DE DONNEES QUI SERA SUPPRIMEE:
94
+ Server: {SERVER_NAME}
95
+ Database: {DATABASE_NAME}
96
+ String: {CONNECTION_MASKED}
97
+
98
+ ================================================================================
99
+ ```
100
+
101
+ ### 0.5 Protection Production (BLOQUANT)
102
+
103
+ ```bash
104
+ # Bloquer si Production detecte
105
+ if [[ "$SELECTED_ENV" == *"Production"* ]]; then
106
+ echo "================================================================================
107
+ BLOQUE - ENVIRONNEMENT PRODUCTION
108
+ ================================================================================
109
+
110
+ ERREUR: Reset interdit en environnement Production
111
+
112
+ Cette commande est bloquee pour proteger les donnees de production.
113
+
114
+ OPTIONS:
115
+ 1. Utilisez appsettings.Local.json (defaut, recommande)
116
+ 2. Utilisez --env Development ou --env Staging
117
+
118
+ Contact: support@atlshub.ch
119
+
120
+ ================================================================================"
121
+ exit 1
122
+ fi
123
+ ```
124
+
125
+ ---
126
+
127
+ ## STEP 1: Confirmation obligatoire (avec nom de la base)
128
+
129
+ > **CRITIQUE:** L'utilisateur doit voir exactement quelle base sera supprimee.
130
+
131
+ ```javascript
132
+ AskUserQuestion({
133
+ questions: [{
134
+ question: "DANGER: Supprimer DEFINITIVEMENT la base '" + DATABASE_NAME + "' sur " + SERVER_NAME + "? TOUTES LES DONNEES SERONT PERDUES!",
135
+ header: "Reset DB",
136
+ options: [
137
+ { label: "Oui, supprimer " + DATABASE_NAME, description: "Drop + Recreate (DATA LOSS IRREVERSIBLE)" },
138
+ { label: "Non, annuler", description: "Conserver la base actuelle" }
139
+ ],
140
+ multiSelect: false
141
+ }]
142
+ })
143
+ ```
144
+
145
+ **If No → Stop immediately**
146
+
147
+ ---
148
+
149
+ ## STEP 2: Detecter les projets EF Core
150
+
151
+ ```bash
152
+ # Detect EF Core projects
153
+ STARTUP_PROJECT=$(find . -name "*.Api.csproj" -o -name "*Web.csproj" | head -1)
154
+ INFRA_PROJECT=$(find . -name "*Infrastructure.csproj" | head -1)
155
+
156
+ if [ -z "$INFRA_PROJECT" ]; then
157
+ INFRA_PROJECT=$(find . -name "*.csproj" -exec grep -l "Microsoft.EntityFrameworkCore" {} \; | head -1)
158
+ fi
159
+
160
+ echo "Startup project: $STARTUP_PROJECT"
161
+ echo "Infrastructure project: $INFRA_PROJECT"
162
+ ```
163
+
164
+ ---
165
+
166
+ ## STEP 3: Backup recommendation
167
+
168
+ ```javascript
169
+ AskUserQuestion({
170
+ questions: [{
171
+ question: "Do you need to backup data before deletion?",
172
+ header: "Backup",
173
+ options: [
174
+ { label: "No backup needed", description: "Development data only - proceed" },
175
+ { label: "Manual backup first", description: "I'll backup via SSMS/Azure Portal" }
176
+ ],
177
+ multiSelect: false
178
+ }]
179
+ })
180
+ ```
181
+
182
+ **If manual backup:**
183
+
184
+ ```
185
+ ================================================================================
186
+ BACKUP INSTRUCTIONS
187
+ ================================================================================
188
+
189
+ Pour sauvegarder votre base de données AVANT le reset:
190
+
191
+ OPTION 1 - SQL Server Management Studio (SSMS):
192
+ 1. Connectez-vous à votre serveur
193
+ 2. Clic droit sur la DB → Tasks → Back Up...
194
+ 3. Sélectionnez destination et lancez
195
+
196
+ OPTION 2 - Azure Portal (si Azure SQL):
197
+ 1. Azure Portal → Votre DB → Export
198
+ 2. Configurez le storage account
199
+ 3. Lancez l'export
200
+
201
+ OPTION 3 - Azure Data Studio:
202
+ 1. Connectez-vous → Clic droit DB → Backup
203
+
204
+ Une fois le backup effectué, relancez /efcore:db-reset
205
+
206
+ ================================================================================
207
+ ```
208
+
209
+ **Stop and wait for user to complete backup manually**
210
+
211
+ ---
212
+
213
+ ## STEP 4: Check migration state BEFORE drop
214
+
215
+ ```bash
216
+ echo "Checking migration state..."
217
+
218
+ # List migrations in codebase
219
+ CODE_MIGRATIONS=$(dotnet ef migrations list \
220
+ --project "$INFRA_PROJECT" \
221
+ --startup-project "$STARTUP_PROJECT" \
222
+ --no-build 2>/dev/null | grep -E "^[0-9]{14}_" | wc -l)
223
+
224
+ echo " Migrations in codebase: $CODE_MIGRATIONS"
225
+
226
+ # Try to get applied migrations from database (may fail if DB doesn't exist)
227
+ APPLIED_MIGRATIONS=$(dotnet ef migrations list \
228
+ --project "$INFRA_PROJECT" \
229
+ --startup-project "$STARTUP_PROJECT" \
230
+ --no-build 2>/dev/null | grep -E "^\s*[0-9]{14}_.*\(Applied\)" | wc -l)
231
+
232
+ echo " Migrations applied in DB: $APPLIED_MIGRATIONS"
233
+
234
+ # List migration names for display
235
+ echo ""
236
+ echo "Migrations in codebase:"
237
+ dotnet ef migrations list \
238
+ --project "$INFRA_PROJECT" \
239
+ --startup-project "$STARTUP_PROJECT" \
240
+ --no-build 2>/dev/null | grep -E "^[0-9]{14}_" | head -20
241
+ ```
242
+
243
+ ---
244
+
245
+ ## STEP 5: Confirm migration reset strategy
246
+
247
+ > **IMPORTANT:** If migrations were squashed (fewer migrations in code than previously applied),
248
+ > applying all migrations will create a fresh database with the NEW migration history.
249
+
250
+ ```javascript
251
+ AskUserQuestion({
252
+ questions: [{
253
+ question: "How should we handle migrations after database reset?",
254
+ header: "Migrations",
255
+ options: [
256
+ { label: "Apply current migrations", description: "Use migrations currently in codebase (recommended after squash)" },
257
+ { label: "Cancel reset", description: "Stop and review migration state first" }
258
+ ],
259
+ multiSelect: false
260
+ }]
261
+ })
262
+ ```
263
+
264
+ **If "Cancel reset" → Stop immediately and suggest:**
265
+
266
+ ```
267
+ ================================================================================
268
+ RESET CANCELLED - REVIEW MIGRATIONS
269
+ ================================================================================
270
+
271
+ Pour vérifier l'état des migrations:
272
+
273
+ /efcore:db-status → Voir les migrations appliquées vs disponibles
274
+ /efcore:scan → Scanner les migrations sur toutes les branches
275
+
276
+ Si des migrations ont été squashées:
277
+ - Les anciennes migrations n'existent plus dans le code
278
+ - Le reset appliquera uniquement les nouvelles migrations
279
+ - C'est le comportement ATTENDU après un squash
280
+
281
+ Si vous voulez restaurer d'anciennes migrations:
282
+ - Vérifiez l'historique git: git log --oneline -- "**/Migrations/"
283
+ - Restaurez les fichiers: git checkout <commit> -- path/to/Migrations/
284
+
285
+ ================================================================================
286
+ ```
287
+
288
+ ---
289
+
290
+ ## STEP 6: Drop database
291
+
292
+ ```bash
293
+ echo "Dropping database..."
294
+
295
+ # Use EF Core CLI only (NO sqlcmd)
296
+ dotnet ef database drop \
297
+ --project "$INFRA_PROJECT" \
298
+ --startup-project "$STARTUP_PROJECT" \
299
+ --force
300
+
301
+ if [ $? -eq 0 ]; then
302
+ echo " Database dropped successfully"
303
+ else
304
+ echo " WARNING: Drop command returned error (database may not exist)"
305
+ fi
306
+ ```
307
+
308
+ ---
309
+
310
+ ## STEP 7: Recreate and apply migrations
311
+
312
+ ```bash
313
+ echo "Applying all migrations..."
314
+
315
+ # Apply all migrations (creates database if missing)
316
+ dotnet ef database update \
317
+ --project "$INFRA_PROJECT" \
318
+ --startup-project "$STARTUP_PROJECT" \
319
+ --verbose
320
+
321
+ if [ $? -ne 0 ]; then
322
+ echo "ERROR: Failed to apply migrations"
323
+ exit 1
324
+ fi
325
+
326
+ echo " Database recreated with all migrations"
327
+ ```
328
+
329
+ ---
330
+
331
+ ## STEP 8: Optional seed
332
+
333
+ ```javascript
334
+ AskUserQuestion({
335
+ questions: [{
336
+ question: "Populate database with test data (via HasData)?",
337
+ header: "Seed",
338
+ options: [
339
+ { label: "Yes (recommended)", description: "Apply HasData seed from migrations" },
340
+ { label: "No", description: "Empty database" }
341
+ ],
342
+ multiSelect: false
343
+ }]
344
+ })
345
+ ```
346
+
347
+ **If yes:**
348
+
349
+ ```bash
350
+ # HasData is already applied via migrations
351
+ # If additional seeding needed, use Seeder class
352
+ if grep -rq "IDataSeeder\|class.*Seeder" . --include="*.cs" 2>/dev/null; then
353
+ echo "Executing DataSeeder..."
354
+ dotnet run --project "$STARTUP_PROJECT" -- --seed
355
+ else
356
+ echo " HasData() seed already applied via migrations"
357
+ fi
358
+ ```
359
+
360
+ ---
361
+
362
+ ## STEP 9: Verification
363
+
364
+ ```bash
365
+ echo "Verifying database..."
366
+
367
+ # Check migrations status
368
+ dotnet ef migrations list \
369
+ --project "$INFRA_PROJECT" \
370
+ --startup-project "$STARTUP_PROJECT" \
371
+ --no-build 2>/dev/null | tail -10
372
+
373
+ echo ""
374
+ echo " Use /efcore:db-status for detailed status"
375
+ ```
376
+
377
+ ---
378
+
379
+ ## STEP 10: Summary
380
+
381
+ ```
382
+ ================================================================================
383
+ DATABASE RESET COMPLETE
384
+ ================================================================================
385
+
386
+ ✓ Old database deleted (via dotnet ef database drop)
387
+ ✓ New database created (via dotnet ef database update)
388
+ ✓ All migrations applied
389
+ {✓ HasData seed applied | ○ Empty database}
390
+
391
+ COMPLIANT: ✓ EF Core CLI only (no raw SQL)
392
+
393
+ NEXT COMMANDS:
394
+ /efcore:db-status → Check status
395
+ /efcore:db-seed → Additional seeding (if needed)
396
+ dotnet run → Launch application
397
+
398
+ ================================================================================
399
+ ```
400
+
401
+ ---
402
+
403
+ ## Options
404
+
405
+ | Option | Description |
406
+ |--------|-------------|
407
+ | `--env {name}` | Utiliser appsettings.{name}.json (ex: --env Development) |
408
+
409
+ ## Security
410
+
411
+ | Protection | Description |
412
+ |------------|-------------|
413
+ | Env Display | Affiche la base de donnees AVANT confirmation |
414
+ | Confirmation | Demande explicite avec le NOM de la base |
415
+ | Production Block | Bloque si appsettings.Production.json detecte |
416
+ | Migration Check | Displays migration state and asks before applying |
417
+ | EF Core Only | No raw SQL commands - uses dotnet ef CLI |
418
+ | Manual Backup | User directed to SSMS/Azure for backups |
419
+
420
+ ---
421
+
422
+ ## Support
423
+
424
+ > **Questions ou problèmes avec le reset EF Core?**
425
+ >
426
+ > 📧 **support@atlshub.ch**