# Amélioration de la commande `ruch msw update`

## 🎯 Objectif

Permettre la mise à jour des fichiers MSW d'un domaine spécifique lorsque l'utilisateur a modifié ses entités, ports ou adapters.

## ✨ Nouvelle fonctionnalité

### Avant

```bash
# Seulement mise à jour générale pour nouveaux domaines
ruch msw update
```

### Après

```bash
# Mise à jour générale (comportement existant conservé)
ruch msw update

# 🆕 Mise à jour d'un domaine spécifique
ruch msw update user
ruch msw update product
```

## 🔧 Implémentation

### Modifications apportées

1. **Nouvelle fonction `updateMswDomain`** dans `src/commands/msw.ts`

   - Valide l'existence du domaine
   - Crée des sauvegardes spécifiques avec timestamp
   - Régénère handler et mock data
   - Demande confirmation utilisateur

2. **Commande CLI mise à jour** dans `src/index.ts`

   - Paramètre optionnel `[domain]` ajouté
   - Routage automatique vers la bonne fonction
   - Aide mise à jour

3. **Documentation enrichie** dans `MSW_COMMANDS.md`
   - Exemples d'usage spécifique
   - Workflow mis à jour
   - Gestion des sauvegardes détaillée

## 🛡️ Sécurité et robustesse

### Validation

- ✅ Vérification existence du domaine
- ✅ Liste des domaines disponibles en cas d'erreur
- ✅ Vérification MSW initialisé

### Sauvegardes automatiques

- ✅ Handler : `{domain}.ts.backup.{timestamp}`
- ✅ Mock data : `mockData.ts.backup.{timestamp}`
- ✅ Messages informatifs sur les sauvegardes

### Confirmation utilisateur

- ✅ Demande de confirmation avant écrasement
- ✅ Possibilité d'annuler l'opération
- ✅ Messages d'avertissement clairs

## 📋 Cas d'usage

### Scenario 1 : Modification d'entité

```typescript
// Modification dans src/domains/user/entities/User.ts
interface User {
  id: string;
  name: string;
  email: string;
  role: 'admin' | 'user';
  // 🆕 Nouveau champ ajouté
  avatar?: string;
}
```

**Action :**

```bash
ruch msw update user
```

**Résultat :**

- Handler régénéré avec nouveaux endpoints
- Mock data régénéré avec nouveaux champs
- Sauvegardes créées pour restauration si besoin

### Scenario 2 : Modification d'adapter

```typescript
// Nouveau endpoint ajouté dans UserApiAdapter
async getUserPreferences(userId: string): Promise<UserPreferences>
```

**Action :**

```bash
ruch msw update user
```

**Résultat :**

- Handler MSW synchronisé avec adapter
- Mock data mis à jour pour nouveaux types

## 🧪 Tests effectués

### ✅ Tests de fonctionnement

- Mise à jour domaine existant (`user`) : ✅
- Gestion domaine inexistant : ✅
- Confirmation utilisateur : ✅
- Création sauvegardes : ✅
- Comportement sans paramètre conservé : ✅

### ✅ Tests d'erreur

- Domaine inexistant → Message d'erreur + liste domaines disponibles
- MSW non initialisé → Message d'erreur clair
- Annulation utilisateur → Pas de modification

## 🔄 Workflow recommandé

1. **Modifier les fichiers du domaine** (entities, ports, adapters)
2. **Régénérer les mocks** : `ruch msw update {domain}`
3. **Confirmer l'opération** quand demandé
4. **Vérifier les fichiers générés** et ajuster si nécessaire
5. **Restaurer depuis backup** si des modifications custom étaient présentes

## 💡 Avantages

- **Efficacité** : Mise à jour ciblée au lieu de tout régénérer
- **Sécurité** : Sauvegardes automatiques avec timestamp
- **Flexibilité** : Choix entre mise à jour générale ou spécifique
- **Robustesse** : Validation et gestion d'erreurs complète
- **UX** : Messages clairs et informatifs

Cette amélioration rend le CLI Ruch encore plus pratique pour le développement en permettant une synchronisation fine des mocks avec l'évolution du code métier.
