# Routes API CHAPS - Guide complet

## Vue d'ensemble

L'API CHAPS propose **trois systèmes d'authentification** :

| Middleware | Alias | Usage | Routes |
|------------|-------|-------|--------|
| `VerifyFastBearerToken` | `verify.bearer` | Applications frontend (JWT Keycloak) | `/api/v1/*` |
| `VerifyFastApiKey` | `verify.apikey` | ESTAIR + Dashboard CHAPS | `/api/metadata/*`, `/api/admin/*` |
| `SsoAuthenticate` | N/A | Dashboard web CHAPS | `/admin/*` |

---

## Routes protégées par Bearer Token (`verify.bearer`)

**Préfixe** : `/api/v1`

**Authentification** : `Authorization: Bearer <JWT_TOKEN>`

### Routes CRUD
```
GET     /api/v1/admin/{modulename}                          # Liste des enregistrements
POST    /api/v1/admin/{modulename}                          # Créer un enregistrement
PUT     /api/v1/admin/{modulename}                          # Modifier un enregistrement
DELETE  /api/v1/admin/{modulename}/{uuid}                   # Supprimer un enregistrement
GET     /api/v1/admin/{modulename}/{uuid}                   # Détails + modules parents
GET     /api/v1/admin/{modulename}/distinct/{fieldname}     # Valeurs distinctes d'un champ
POST    /api/v1/admin/{modulename}/batch-update             # Mise à jour en masse
POST    /api/v1/admin/{modulename}/massEdit                 # Édition en masse
POST    /api/v1/admin/searchRecord                          # Autocomplétion
GET     /api/v1/admin/getOne/{objectName}/{objectId}        # Récupérer un enregistrement
POST    /api/v1/admin/import-file                           # Importer un fichier
```

### Routes métadonnées
```
GET     /api/v1/metadata/{modulename}                       # Métadonnées d'un module
GET     /api/v1/menus                                       # Liste des menus
```

### Routes modules
```
GET     /api/v1/modules                                     # Liste des modules
POST    /api/v1/modules                                     # Créer un module
GET     /api/v1/modules/{module}                            # Détails d'un module
PUT     /api/v1/modules/{module}                            # Modifier un module
DELETE  /api/v1/modules/{module}                            # Supprimer un module
```

### Routes badges
```
GET     /api/v1/badges                                      # Tous les badges
GET     /api/v1/badges/dashboard                            # Badges du dashboard
GET     /api/v1/badges/commercial                           # Badges commerciaux
GET     /api/v1/badges/health                               # Badges de santé
GET     /api/v1/badges/{badge}                              # Détails d'un badge
```

**Exemple** :
```bash
curl -H "Authorization: Bearer eyJhbGc..." \
     http://localhost:8011/api/v1/admin/contacts
```

---

## Routes protégées par API Key (`verify.apikey`)

**Authentification** : `X-API-KEY: <votre_cle>` OU session SSO active

### Routes métadonnées
```
GET     /api/metadata/dispatch                              # Dispatcher les métadonnées
GET     /api/metadata/dispatch-data                         # Dispatcher les données
GET     /api/metadata/import-csv                            # Importer CSV
GET     /api/metadata/purge                                 # Purger les métadonnées
GET     /api/metadata/{modulename}                          # Métadonnées d'un module
POST    /api/metadata/merge-sources                         # Fusionner les sources
POST    /api/metadata/validate                              # Valider les métadonnées
POST    /api/metadata/backup                                # Créer un backup
GET     /api/metadata/backup-versions                       # Lister les versions de backup
```

### Routes backups
```
GET     /api/backups                                        # Liste des backups
POST    /api/backups                                        # Créer un backup
GET     /api/backups/stats                                  # Statistiques
GET     /api/backups/{version}                              # Détails d'un backup
POST    /api/backups/{version}/restore                      # Restaurer un backup
DELETE  /api/backups/cleanup                                # Nettoyer les anciens backups
POST    /api/backups/validate                               # Valider les données
```

### Routes CRUD (legacy - compatibilité)
```
GET     /api/admin/{modulename}
POST    /api/admin/{modulename}
PUT     /api/admin/{modulename}
DELETE  /api/admin/{modulename}/{uuid}
... (mêmes routes que /api/v1/admin/*)
```

### Routes badges (legacy - compatibilité)
```
GET     /api/v1/badges/*
... (mêmes routes que le groupe Bearer)
```

### Routes générales
```
POST    /api/module/getadmin-metadata                       # Métadonnées admin
POST    /api/generatemetadata                               # Générer métadonnées modules
GET     /api/load/modules                                   # Charger les modules
GET     /api/dispatch/metadata                              # Dispatcher métadonnées
GET     /api/menus                                          # Liste des menus
POST    /api/admin/login                                    # Login admin
GET     /api/logout                                         # Logout
```

**Exemple (API Key)** :
```bash
curl -H "X-API-KEY: 1234567890abcdef..." \
     http://localhost:8011/api/metadata/contacts
```

**Exemple (Session SSO)** :
```javascript
// Depuis le navigateur avec session active
fetch('http://localhost:8011/api/metadata/contacts', {
  credentials: 'include'
})
```

---

## Routes publiques (sans authentification)

```
GET     /api/checking                                       # Health check
POST    /api/mapping-insert                                 # Insertion de mapping
POST    /api/apikey                                         # Créer une API key
```

---

## Routes web (protégées par SSO)

**Préfixe** : `/admin`

**Authentification** : Session SSO (redirection vers `/login` si non authentifié)

### Interface de configuration
```
GET     /admin/metadata-setup                               # Dashboard principal
POST    /admin/metadata-setup/regenerate                    # Régénérer métadonnées
POST    /admin/metadata-setup/preview                       # Prévisualisation
GET     /admin/metadata-setup/backups                       # Gestion des backups
POST    /admin/metadata-setup/restore-backup                # Restaurer un backup
GET     /admin/metadata-setup/settings                      # Paramètres
POST    /admin/metadata-setup/test-estair                   # Tester connexion ESTAIR
POST    /admin/metadata-setup/validate                      # Valider les données
POST    /admin/metadata-setup/test-sources                  # Tester les sources
GET     /admin/metadata-setup/advanced-stats                # Statistiques avancées
```

### Gestion des menus
```
GET     /admin/menus                                        # Liste des menus
POST    /admin/menus/toggle                                 # Activer/désactiver
```

### Gestion des CTAs
```
GET     /admin/ctas                                         # Liste des CTAs
POST    /admin/ctas/toggle                                  # Activer/désactiver
```

### Vue matricielle des métadonnées
```
GET     /admin/metadatas-matrix                             # Vue matricielle
POST    /admin/metadatas-matrix/toggle                      # Toggle propriété
POST    /admin/metadatas-matrix/update-displayname          # Modifier displayname
POST    /admin/metadatas-matrix/update-bloc                 # Modifier bloc
POST    /admin/metadatas-matrix/reorder                     # Réorganiser
```

### Vue matricielle des blocs
```
GET     /admin/blocs-matrix                                 # Vue matricielle
POST    /admin/blocs-matrix/toggle                          # Toggle propriété
POST    /admin/blocs-matrix/reorder                         # Réorganiser
```

---

## Migration progressive

Les applications peuvent migrer progressivement vers les nouvelles routes `/api/v1/*` :

| Ancienne route | Nouvelle route | Migration |
|----------------|----------------|-----------|
| `/api/admin/contacts` | `/api/v1/admin/contacts` | Changer l'URL + utiliser Bearer Token |
| `/api/v1/badges/dashboard` (API Key) | `/api/v1/badges/dashboard` (Bearer) | Utiliser Bearer Token |

**Les anciennes routes resteront disponibles** pour assurer la compatibilité avec ESTAIR.

---

## Commandes artisan utiles

```bash
# Lister toutes les routes
php artisan route:list

# Lister uniquement les routes /api/v1
php artisan route:list --path=api/v1

# Lister uniquement les routes métadonnées
php artisan route:list --path=api/metadata

# Générer une API key
php artisan tinker
>>> Apikeys::create(['name' => 'ESTAIR', 'key' => hash('sha256', 'votre-cle-secrete')])
```

---

## Codes d'erreur

| Code | Description | Solution |
|------|-------------|----------|
| 401 | Token Bearer invalide ou manquant | Vérifier le token JWT |
| 401 | API Key invalide ou manquante | Vérifier le header `X-API-KEY` |
| 403 | Accès refusé | Vérifier les permissions |
| 404 | Route non trouvée | Vérifier l'URL |
| 422 | Erreur de validation | Vérifier les données envoyées |

---

Pour plus de détails, consultez [AUTHENTICATION.md](./AUTHENTICATION.md)
