# Le Pain Matinal API Gateway
Ce dépôt contient la documentation de l'API Gateway "Le Pain Matinal". Cette documentation a été générée à partir d'une collection Insomnia et comprend une interface Swagger UI pour tester l'API.
## Table des matières
- [Vue d'ensemble](#vue-densemble)
- [Authentification](#authentification)
- [Endpoints disponibles](#endpoints-disponibles)
- [Authentification](#endpoints-authentification)
- [Administration](#endpoints-administration)
- [Autres services](#endpoints-autres-services)
- [Utilisation de Swagger UI](#utilisation-de-swagger-ui)
- [Scripts de test](#scripts-de-test)
## Vue d'ensemble
L'API Gateway "Le Pain Matinal" sert d'interface unifiée pour accéder à différents services backend. L'API est sécurisée via deux mécanismes d'authentification :
1. baseUrl (`baseUrl`) requise pour tous les endpoints
2. Clé API (`x-gateway-key`) requise pour tous les endpoints
3. Authentification par token JWT pour les endpoints protégés
## Authentification
### Clé API Gateway
Toutes les requêtes à l'API nécessitent une clé d'API spécifiée dans l'en-tête HTTP `x-gateway-key`.
Exemple :
```bash
x-gateway-key: xxxxxxxxxxxxx
```
### Authentification utilisateur
Pour les endpoints protégés, un token JWT est également requis dans l'en-tête HTTP `Authorization`.
Exemple :
```bash
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
## Endpoints disponibles
### Endpoints Authentification
| Méthode | Endpoint | Description | Authentification |
|---------|----------|-------------|------------------|
| POST | `/auth/register` | Inscription d'un nouvel utilisateur | x-gateway-key |
| POST | `/auth/verify-otp` | Vérification du code OTP | x-gateway-key |
| POST | `/auth/activate-account` | Activation du compte | x-gateway-key |
| POST | `/auth/login` | Connexion et obtention du token JWT | x-gateway-key |
| POST | `/auth/verify-auth` | Vérification du token d'authentification | x-gateway-key + JWT |
| POST | `/auth/refresh-token` | Rafraîchissement du token JWT | x-gateway-key + JWT |
| POST | `/auth/forgot-password` | Demande de réinitialisation de mot de passe | x-gateway-key |
| PUT | `/auth/reset-password` | Réinitialisation du mot de passe | x-gateway-key |
### Endpoints Administration
| Méthode | Endpoint | Description | Authentification |
|---------|----------|-------------|------------------|
| GET | `/admin/logs/filters` | Récupération des logs avec filtres | x-gateway-key + JWT |
| GET | `/logs/filters/:id` | Récupération d'un log par son ID | x-gateway-key + JWT |
| GET | `/logs/filters/user/:id` | Récupération des logs par utilisateur | x-gateway-key + JWT |
| GET | `/admin/x-api-key/find` | Récupération des clés API | x-gateway-key + JWT |
### Autres services
| Méthode | Endpoint | Description | Authentification |
|---------|----------|-------------|------------------|
| GET | `/welcom` | Page d'accueil | x-gateway-key |
| GET | `/app/books` | Récupération des livres | x-gateway-key |
## Utilisation de Swagger UI
1. Ouvrez le fichier `index.html` dans votre navigateur
2. Configurez les paramètres d'authentification :
- Base URL : URL de base de l'API (ex: http://localhost:3000)
- x-gateway-key : Clé d'accès à l'API Gateway
- Authorization Token : Token JWT obtenu après connexion
3. Cliquez sur "Authorize" pour appliquer ces paramètres
4. Testez les différents endpoints disponibles
## Scripts de test
La collection Insomnia inclut plusieurs scripts de test pour valider les réponses de l'API :
### Inscription (`/auth/register`)
Ce script vérifie la réponse 201 et stocke l'email et le code OTP pour les étapes suivantes.
### Connexion (`/auth/login`)
Ce script vérifie la réponse 200 et stocke les tokens d'authentification et de rafraîchissement.
### Rafraîchissement du token (`/auth/refresh-token`)
Ce script vérifie la réponse 200 et met à jour le token d'authentification stocké.
## Workflow d'authentification
1. **Inscription**
- Endpoint: `/auth/register`
- Fournir email, mot de passe et rôle
- Récupérer le code OTP
2. **Vérification OTP**
- Endpoint: `/auth/verify-otp`
- Fournir email et code OTP
3. **Activation du compte**
- Endpoint: `/auth/activate-account`
- Fournir email et code OTP
4. **Connexion**
- Endpoint: `/auth/login`
- Fournir email et mot de passe
- Récupérer les tokens d'authentification et de rafraîchissement
5. **Utilisation des endpoints protégés**
- Inclure le token JWT dans l'en-tête d'autorisation
6. **Rafraîchissement du token**
- Endpoint: `/auth/refresh-token`
- Fournir email et token de rafraîchissement
- Récupérer un nouveau token JWT