# Commandes MSW pour Ruch CLI

## Vue d'ensemble

Les nouvelles commandes MSW (Mock Service Worker) ont été ajoutées au CLI Ruch pour faciliter l'intégration et la gestion des mocks dans les projets suivant l'architecture hexagonale.

## Commandes disponibles

### `ruch msw init`

Initialise la configuration MSW dans le projet.

**Ce qui est créé :**

- `src/mocks/setup.ts` - Configuration principale MSW
- `src/mocks/browser.ts` - Configuration pour l'environnement navigateur/développement
- `src/mocks/server.ts` - Configuration pour l'environnement Node.js/tests
- `src/mocks/handlers/index.ts` - Index des handlers (vide initialement)
- `src/setupTests.ts` - Configuration globale des tests avec MSW

**Exemple d'utilisation :**

```bash
ruch msw init
```

### `ruch msw handlers`

Génère les handlers MSW pour tous les domaines existants.

**Ce qui est créé :**

- Un fichier handler par domaine dans `src/mocks/handlers/`
- Mise à jour de l'index des handlers
- Création des dossiers `mocks/` dans chaque domaine
- Endpoints CRUD complets pour chaque domaine

**Exemple d'utilisation :**

```bash
ruch msw handlers
```

### `ruch msw mocks`

Génère les données mock pour tous les domaines.

**Ce qui est créé :**

- `src/domains/{domain}/mocks/mockData.ts` pour chaque domaine
- Classes de gestion des données mock avec méthodes CRUD
- Données d'exemple pour chaque domaine

**Exemple d'utilisation :**

```bash
ruch msw mocks
```

### `ruch msw update [domain]`

Met à jour la configuration MSW avec les domaines manquants, ou régénère les fichiers MSW pour un domaine spécifique.

**Utilisation générale (sans paramètre) :**

- Détecte les nouveaux domaines créés
- Crée des sauvegardes des fichiers existants avec timestamp
- Demande confirmation avant modification
- Génère les handlers manquants
- Met à jour l'index des handlers

**Utilisation pour un domaine spécifique :**

- Régénère le handler MSW du domaine
- Régénère les données mock du domaine
- Crée des sauvegardes avec timestamp
- Demande confirmation avant écrasement
- Utile après modification des entities, ports, ou adapters

**Exemples d'utilisation :**

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

# Régénération pour un domaine spécifique
ruch msw update user
ruch msw update product
```

## Workflow recommandé

1. **Initialisation du projet :**

   ```bash
   ruch msw init
   bun add -D msw
   bunx msw init public/ --save
   ```

2. **Génération des handlers et mocks :**

   ```bash
   ruch msw handlers
   ruch msw mocks
   ```

3. **Après création de nouveaux domaines :**

   ```bash
   ruch create new-domain
   ruch msw update
   ruch msw mocks
   ```

4. **Après modification d'entities/ports/adapters d'un domaine :**
   ```bash
   # Régénérer les mocks pour le domaine modifié
   ruch msw update user
   ```

## Structure générée

```
src/
├── mocks/
│   ├── setup.ts              # Configuration principale
│   ├── browser.ts            # Setup navigateur
│   ├── server.ts             # Setup Node.js/tests
│   └── handlers/
│       ├── index.ts          # Index des handlers
│       ├── user.ts           # Handlers du domaine user
│       ├── product.ts        # Handlers du domaine product
│       └── ...
├── domains/
│   ├── user/
│   │   ├── mocks/
│   │   │   └── mockData.ts   # Données mock du domaine
│   │   └── ...
│   └── ...
└── setupTests.ts             # Configuration globale des tests
```

## Fonctionnalités avancées

### Gestion des sauvegardes

La commande `update` crée automatiquement des sauvegardes avec timestamp :

**Pour mise à jour générale :**

- `setup.ts.backup.{timestamp}`
- `browser.ts.backup.{timestamp}`
- `server.ts.backup.{timestamp}`

**Pour domaine spécifique :**

- `{domain}.ts.backup.{timestamp}` (handler)
- `mockData.ts.backup.{timestamp}` (données mock)

### Détection intelligente

- Évite d'écraser les fichiers existants
- Détecte automatiquement les nouveaux domaines
- Mise à jour incrémentale des configurations

### Types TypeScript

Tous les templates générés utilisent TypeScript avec :

- Interfaces typées pour les entités
- JSDoc pour la documentation
- Types stricts pour les méthodes CRUD

## Intégration avec MSW v2.x (2025)

Les templates utilisent la dernière version de MSW avec :

- `http` et `HttpResponse` pour les handlers
- `setupWorker` et `setupServer`
- Configuration moderne pour navigateur et Node.js
- Gestion d'erreurs améliorée

## Notes importantes

- Les commandes respectent l'architecture hexagonale de Ruch
- Les paths utilisent `src/domains/` (pluriel) comme configuré dans le projet
- Les handlers sont automatiquement ajoutés à l'index
- Les données mock sont générées avec des exemples réalistes
- Compatible avec les patterns React Query utilisés dans les hooks de domaine
