@atlashub/smartstack-cli 1.5.1 → 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 (147) hide show
  1. package/.documentation/css/styles.css +2168 -2168
  2. package/.documentation/js/app.js +794 -794
  3. package/config/default-config.json +86 -86
  4. package/config/settings.json +53 -53
  5. package/config/settings.local.example.json +16 -16
  6. package/dist/index.js +0 -0
  7. package/dist/index.js.map +1 -1
  8. package/package.json +88 -88
  9. package/templates/agents/action.md +36 -36
  10. package/templates/agents/efcore/conflicts.md +84 -84
  11. package/templates/agents/efcore/db-deploy.md +51 -51
  12. package/templates/agents/efcore/db-reset.md +59 -59
  13. package/templates/agents/efcore/db-seed.md +56 -56
  14. package/templates/agents/efcore/db-status.md +64 -64
  15. package/templates/agents/efcore/migration.md +85 -85
  16. package/templates/agents/efcore/rebase-snapshot.md +62 -62
  17. package/templates/agents/efcore/scan.md +90 -90
  18. package/templates/agents/efcore/squash.md +67 -67
  19. package/templates/agents/explore-codebase.md +65 -65
  20. package/templates/agents/explore-docs.md +97 -97
  21. package/templates/agents/fix-grammar.md +49 -49
  22. package/templates/agents/gitflow/abort.md +45 -45
  23. package/templates/agents/gitflow/cleanup.md +85 -85
  24. package/templates/agents/gitflow/commit.md +40 -40
  25. package/templates/agents/gitflow/exec.md +48 -48
  26. package/templates/agents/gitflow/finish.md +92 -92
  27. package/templates/agents/gitflow/init.md +139 -139
  28. package/templates/agents/gitflow/merge.md +62 -62
  29. package/templates/agents/gitflow/plan.md +42 -42
  30. package/templates/agents/gitflow/pr.md +78 -78
  31. package/templates/agents/gitflow/review.md +49 -49
  32. package/templates/agents/gitflow/start.md +61 -61
  33. package/templates/agents/gitflow/status.md +32 -32
  34. package/templates/agents/snipper.md +36 -36
  35. package/templates/agents/websearch.md +46 -46
  36. package/templates/commands/_resources/formatting-guide.md +124 -124
  37. package/templates/commands/ai-prompt.md +315 -315
  38. package/templates/commands/apex/1-analyze.md +100 -100
  39. package/templates/commands/apex/2-plan.md +145 -145
  40. package/templates/commands/apex/3-execute.md +171 -171
  41. package/templates/commands/apex/4-examine.md +116 -116
  42. package/templates/commands/apex/5-tasks.md +209 -209
  43. package/templates/commands/apex.md +76 -76
  44. package/templates/commands/application/create.md +362 -362
  45. package/templates/commands/application/templates-backend.md +463 -463
  46. package/templates/commands/application/templates-frontend.md +517 -517
  47. package/templates/commands/application/templates-i18n.md +478 -478
  48. package/templates/commands/application/templates-seed.md +362 -362
  49. package/templates/commands/application.md +303 -303
  50. package/templates/commands/business-analyse/0-orchestrate.md +640 -640
  51. package/templates/commands/business-analyse/1-init.md +269 -269
  52. package/templates/commands/business-analyse/2-discover.md +520 -520
  53. package/templates/commands/business-analyse/3-analyse.md +408 -408
  54. package/templates/commands/business-analyse/4-specify.md +598 -598
  55. package/templates/commands/business-analyse/5-validate.md +326 -326
  56. package/templates/commands/business-analyse/6-handoff.md +746 -746
  57. package/templates/commands/business-analyse/7-doc-html.md +602 -602
  58. package/templates/commands/business-analyse/bug.md +325 -325
  59. package/templates/commands/business-analyse/change-request.md +368 -368
  60. package/templates/commands/business-analyse/hotfix.md +200 -200
  61. package/templates/commands/business-analyse.md +640 -640
  62. package/templates/commands/controller/create.md +216 -216
  63. package/templates/commands/controller/postman-templates.md +528 -528
  64. package/templates/commands/controller/templates.md +600 -600
  65. package/templates/commands/controller.md +337 -337
  66. package/templates/commands/create/agent.md +138 -138
  67. package/templates/commands/create/command.md +166 -166
  68. package/templates/commands/create/hook.md +234 -234
  69. package/templates/commands/create/plugin.md +329 -329
  70. package/templates/commands/create/project.md +507 -507
  71. package/templates/commands/create/skill.md +199 -199
  72. package/templates/commands/create.md +220 -220
  73. package/templates/commands/debug.md +95 -95
  74. package/templates/commands/documentation/module.md +202 -202
  75. package/templates/commands/documentation/templates.md +432 -432
  76. package/templates/commands/documentation.md +190 -190
  77. package/templates/commands/efcore/_env-check.md +153 -153
  78. package/templates/commands/efcore/conflicts.md +186 -186
  79. package/templates/commands/efcore/db-deploy.md +193 -193
  80. package/templates/commands/efcore/db-reset.md +426 -426
  81. package/templates/commands/efcore/db-seed.md +326 -326
  82. package/templates/commands/efcore/db-status.md +226 -226
  83. package/templates/commands/efcore/migration.md +400 -400
  84. package/templates/commands/efcore/rebase-snapshot.md +264 -264
  85. package/templates/commands/efcore/scan.md +198 -198
  86. package/templates/commands/efcore/squash.md +298 -298
  87. package/templates/commands/efcore.md +224 -224
  88. package/templates/commands/epct.md +69 -69
  89. package/templates/commands/explain.md +186 -186
  90. package/templates/commands/explore.md +45 -45
  91. package/templates/commands/feature-full.md +267 -267
  92. package/templates/commands/gitflow/1-init.md +1038 -1038
  93. package/templates/commands/gitflow/10-start.md +768 -768
  94. package/templates/commands/gitflow/11-finish.md +457 -457
  95. package/templates/commands/gitflow/12-cleanup.md +276 -276
  96. package/templates/commands/gitflow/13-sync.md +216 -216
  97. package/templates/commands/gitflow/14-rebase.md +251 -251
  98. package/templates/commands/gitflow/2-status.md +277 -277
  99. package/templates/commands/gitflow/3-commit.md +344 -344
  100. package/templates/commands/gitflow/4-plan.md +145 -145
  101. package/templates/commands/gitflow/5-exec.md +147 -147
  102. package/templates/commands/gitflow/6-abort.md +344 -344
  103. package/templates/commands/gitflow/7-pull-request.md +453 -355
  104. package/templates/commands/gitflow/8-review.md +240 -176
  105. package/templates/commands/gitflow/9-merge.md +451 -365
  106. package/templates/commands/gitflow.md +128 -128
  107. package/templates/commands/implement.md +663 -663
  108. package/templates/commands/init.md +567 -567
  109. package/templates/commands/mcp-integration.md +330 -330
  110. package/templates/commands/notification.md +129 -129
  111. package/templates/commands/oneshot.md +57 -57
  112. package/templates/commands/quick-search.md +72 -72
  113. package/templates/commands/ralph-loop/cancel-ralph.md +18 -18
  114. package/templates/commands/ralph-loop/help.md +126 -126
  115. package/templates/commands/ralph-loop/ralph-loop.md +18 -18
  116. package/templates/commands/review.md +106 -106
  117. package/templates/commands/utils/test-web-config.md +160 -160
  118. package/templates/commands/utils/test-web.md +151 -151
  119. package/templates/commands/validate.md +233 -233
  120. package/templates/commands/workflow.md +193 -193
  121. package/templates/gitflow/config.json +138 -138
  122. package/templates/hooks/ef-migration-check.md +139 -139
  123. package/templates/hooks/hooks.json +25 -25
  124. package/templates/hooks/stop-hook.sh +177 -177
  125. package/templates/skills/ai-prompt/SKILL.md +778 -778
  126. package/templates/skills/application/SKILL.md +563 -563
  127. package/templates/skills/application/templates-backend.md +450 -450
  128. package/templates/skills/application/templates-frontend.md +531 -531
  129. package/templates/skills/application/templates-i18n.md +520 -520
  130. package/templates/skills/application/templates-seed.md +647 -647
  131. package/templates/skills/business-analyse/SKILL.md +191 -191
  132. package/templates/skills/business-analyse/questionnaire.md +283 -283
  133. package/templates/skills/business-analyse/templates-frd.md +477 -477
  134. package/templates/skills/business-analyse/templates-react.md +580 -580
  135. package/templates/skills/controller/SKILL.md +240 -240
  136. package/templates/skills/controller/postman-templates.md +614 -614
  137. package/templates/skills/controller/templates.md +1468 -1468
  138. package/templates/skills/documentation/SKILL.md +133 -133
  139. package/templates/skills/documentation/templates.md +476 -476
  140. package/templates/skills/feature-full/SKILL.md +838 -838
  141. package/templates/skills/notification/SKILL.md +555 -555
  142. package/templates/skills/ui-components/SKILL.md +870 -870
  143. package/templates/skills/workflow/SKILL.md +582 -582
  144. package/templates/test-web/api-health.json +38 -38
  145. package/templates/test-web/minimal.json +19 -19
  146. package/templates/test-web/npm-package.json +46 -46
  147. 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**