-
Notifications
You must be signed in to change notification settings - Fork 4
API Documentation
Documentation complรจte des endpoints des services Gateway, Auth et Users du projet ft_transcendence.
- ๐ Gateway Service
- ๐ Auth Service
- ๐ฅ Users Service
- ๐ Game service
- ๐ค AI Service
- ๐ฆ DTOs & Models
| Service | Mรฉthode | Endpoint | Description | Auth | Status |
|---|---|---|---|---|---|
| Gateway | GET | / |
Message de bienvenue | ๐ Public | โ |
| Gateway | GET | /help |
Liste des routes disponibles | ๐ Public | โ |
| Gateway | GET | /health |
Health check du Gateway | ๐ Public | โ |
| Gateway | GET | /health/:name |
Health check d'un service spรฉcifique | ๐ Public | โ |
| Gateway | GET | /healthAll |
Health check de tous les services | ๐ Public | โ |
| Auth | GET | /api/auth/ |
Status du service Auth | ๐ Public | โ |
| Auth | GET | /api/auth/health |
Health check | ๐ Public | โ |
| Auth | POST | /api/auth/register |
Inscription d'un nouvel utilisateur | ๐ Public | โ |
| Auth | POST | /api/auth/login |
Connexion utilisateur | ๐ Public | โ |
| Auth | POST | /api/auth/logout |
Dรฉconnexion utilisateur | ๐ JWT | โ |
| Auth | GET | /api/auth/verify |
Vรฉrification de token JWT | ๐ JWT | โ |
| Auth | GET | /api/auth/me |
Informations utilisateur courant | ๐ JWT | ๐ง |
| Auth | POST | /api/auth/2fa/setup |
Initialise la configuration 2FA | ๐ JWT | โ |
| Auth | POST | /api/auth/2fa/setup/verify |
Vรฉrifie et active la 2FA | ๐ JWT | โ |
| Auth | POST | /api/auth/2fa/verify |
Vรฉrifie un code 2FA au login | ๐ Temp | โ |
| Auth | POST | /api/auth/2fa/disable |
Dรฉsactive la 2FA | ๐ JWT | โ |
| Auth | POST | /api/auth/heartbeat |
Envoie un heartbeat pour rester en ligne | ๐ JWT | โ |
| Auth | GET | /api/auth/is-online/:name |
Vรฉrifie si un utilisateur est en ligne | ๐ JWT | โ |
| Auth | GET | /api/auth/admin/users |
Liste tous les utilisateurs | ๐ Admin | โ |
| Auth | PUT | /api/auth/admin/users/:id |
Modifie un utilisateur | ๐ Admin | โ |
| Auth | DELETE | /api/auth/admin/users/:id |
Supprime un utilisateur | ๐ Admin | โ |
| Auth | POST | /api/auth/admin/users/:id/disable-2fa |
Dรฉsactive la 2FA d'un utilisateur | ๐ Admin | โ |
| Users | GET | /api/users/:id |
Rรฉcupรจre un profil par ID | ๐ JWT | ๐ท |
| Users | GET | /api/users/username/:username |
Rรฉcupรจre un profil par username | ๐ JWT | โ |
| Users | PATCH | /api/users/avatar/:username |
Modifie l'avatar d'un utilisateur | ๐ JWT | โ |
| Users | POST | /users/ |
Crรฉe un profil (route interne) | ๐ Internal | โ |
| Users | GET | /api/users/friends/:id |
Liste les amis d'un utilisateur | ๐ JWT | ๐ท |
| Users | POST | /api/users/friends |
Envoie une demande d'ami | ๐ JWT | โ |
| Users | PATCH | /api/users/friends/:id/status |
Modifie le statut d'une amitiรฉ | ๐ JWT | ๐ท |
| Users | PATCH | /api/users/friends/:id/nickname |
Modifie le surnom d'un ami | ๐ JWT | ๐ท |
| Users | DELETE | /api/users/friends/:id |
Supprime une relation d'amitiรฉ | ๐ JWT | โ |
| Game | POST | /api/game/rl/reset |
Rรฉinitialise une session | ๐ JWT | ๐ท |
| Game | POST | /api/game/rl/step |
- | ๐ JWT | ๐ท |
| Game | POST | /api/game/rl/state |
รtat d'une session de jeu | ๐ JWT | ๐ท |
| AI | POST | /api/ai/predict |
Demande le mouvement de la raquette pour l'IA | ๐ JWT | ๐ท |
Lรฉgende :
- ๐ Public : Accessible sans authentification
- ๐ JWT : Nรฉcessite un token JWT valide
- ๐ Temp : Nรฉcessite un token temporaire (2FA)
- ๐ Admin : Nรฉcessite un rรดle administrateur
- ๐ Internal : Route interne entre services
- โ Implรฉmentรฉ | ๐ท En dรฉveloppement | ๐ง DEV ONLY
- Total des routes : 36
- Routes publiques : 7
- Routes authentifiรฉes : 25
- Routes admin : 4
- Services : 4 (Gateway, Auth, Users, AI)
Le Gateway est le point d'entrรฉe unique de l'application. Il route les requรชtes vers les services appropriรฉs et valide les JWT localement.
| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| GET | / |
Message de bienvenue | ๐ Public | Global | โ |
| GET | /help |
Liste des routes disponibles | ๐ Public | Global | โ |
Response 200:
{
"message": "Welcome to the Gateway API, check /help"
}Liste toutes les routes disponibles du Gateway avec leur mรฉthode HTTP.
Response 200:
{
"routes": {
"public": {
"/": "GET - Welcome message",
"/help": "GET - This help message",
"/healthAll": "GET - Health check all services",
"/health/:name": "GET - Health check service by name",
"/auth/*": "Proxied to Auth service",
"/users/*": "Proxied to Users service",
"/game/*": "Proxied to Game service",
"/block/*": "Proxied to Blockchain service"
}
}
}| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| GET | /health |
Health check du Gateway | ๐ Public | Global | โ |
| GET | /health/:name |
Health check d'un service spรฉcifique | ๐ Public | Global | โ |
| GET | /healthAll |
Health check de tous les services | ๐ Public | Global | โ |
Vรฉrifie la santรฉ du Gateway lui-mรชme.
Response 200:
{
"status": "healthy",
"service": "gateway",
"timestamp": "2026-01-27T12:00:00Z"
}Vรฉrifie la santรฉ d'un service spรฉcifique.
URL Parameters:
-
name(string) : Nom du service (auth,users,game,block)
Response 200:
{
"status": "healthy",
"service": "auth",
"timestamp": "2026-01-27T12:00:00Z"
}Erreurs possibles:
-
404 Not Found- Service inconnu -
503 Service Unavailable- Service injoignable
Vรฉrifie la santรฉ de tous les services enregistrรฉs.
Response 200:
{
"gateway": {
"status": "healthy",
"timestamp": "2026-01-27T12:00:00Z"
},
"auth": {
"status": "healthy",
"timestamp": "2026-01-27T12:00:00Z"
},
"users": {
"status": "healthy",
"timestamp": "2026-01-27T12:00:00Z"
},
"game": {
"status": "healthy",
"timestamp": "2026-01-27T12:00:00Z"
},
"block": {
"status": "healthy",
"timestamp": "2026-01-27T12:00:00Z"
}
}Service d'authentification gรฉrant les utilisateurs, JWT, 2FA et statuts en ligne.
| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| GET | /api/auth/ |
Status du service Auth | ๐ Public | Global | โ |
| GET | /api/auth/health |
Health check | ๐ Public | Global | โ |
| POST | /api/auth/register |
Inscription d'un nouvel utilisateur | ๐ Public | 5/5min (prod), 100/5min (dev) | โ |
| POST | /api/auth/login |
Connexion utilisateur | ๐ Public | 5/5min (prod), 100/5min (dev) | โ |
| POST | /api/auth/logout |
Dรฉconnexion utilisateur | ๐ JWT | Global | โ |
| GET | /api/auth/verify |
Vรฉrification de token JWT | ๐ JWT | Global | โ |
| GET | /api/auth/me |
Informations utilisateur courant | ๐ JWT | Global | ๐ง DEV ONLY |
Response 200:
{
"message": "Auth service is running"
}Response 200:
{
"status": "healthy"
}Crรฉe un nouveau compte utilisateur.
Rate Limit: 5 requรชtes/5min (prod), 100/5min (dev)
Request Body:
{
"username": "john_doe",
"email": "john@example.com",
"password": "SecurePass123!"
}Validation:
-
username: 4-20 caractรจres alphanumรฉriques (_- autorisรฉs), pattern:/^[a-zA-Z0-9_]+$/ -
email: Format email valide, max 100 caractรจres -
password: Min 8 caractรจres, max 100 caractรจres, au moins 1 majuscule, 1 minuscule, 1 chiffre
Response 201:
{
"success": true,
"message": "User registered successfully",
"userId": 42
}Erreurs possibles:
-
400 Bad Request- Donnรฉes invalides ou manquantes -
409 Conflict- Username ou email dรฉjร utilisรฉ -
429 Too Many Requests- Rate limit dรฉpassรฉ
Authentifie un utilisateur et retourne un JWT.
Rate Limit: 5 requรชtes/5min (prod), 100/5min (dev)
Request Body:
{
"username": "john_doe",
"password": "SecurePass123!"
}Ou avec email:
{
"email": "john@example.com",
"password": "SecurePass123!"
}Response 200 (Sans 2FA):
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"userId": 42,
"username": "john_doe",
"require2FA": false
}Response 200 (Avec 2FA activรฉ):
{
"success": true,
"require2FA": true,
"tempToken": "temporary_token_for_2fa_verification",
"message": "2FA code required"
}Erreurs possibles:
-
400 Bad Request- Donnรฉes manquantes ou invalides -
401 Unauthorized- Identifiants incorrects -
429 Too Many Requests- Rate limit dรฉpassรฉ
Dรฉconnecte l'utilisateur et invalide le token.
Headers:
Authorization: Bearer <token>
Response 200:
{
"success": true,
"message": "Logged out successfully"
}Vรฉrifie la validitรฉ d'un token JWT.
Headers:
Authorization: Bearer <token>
Response 200:
{
"valid": true,
"userId": 42,
"username": "john_doe",
"role": "user"
}Erreurs possibles:
-
401 Unauthorized- Token invalide ou expirรฉ
Retourne les informations de l'utilisateur connectรฉ.
โ ๏ธ DEV ONLY - ร supprimer en production
Headers:
Authorization: Bearer <token>
Response 200:
{
"userId": 42,
"username": "john_doe",
"email": "john@example.com",
"role": "user",
"twoFactorEnabled": true,
"createdAt": "2026-01-15T10:30:00Z"
}| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| POST | /api/auth/2fa/setup |
Initialise la configuration 2FA | ๐ JWT | 5/5min (prod), 100/5min (dev) | โ |
| POST | /api/auth/2fa/setup/verify |
Vรฉrifie et active la 2FA | ๐ JWT | 5/5min (prod), 100/5min (dev) | โ |
| POST | /api/auth/2fa/verify |
Vรฉrifie un code 2FA au login | ๐ Temp Token | 5/5min (prod), 100/5min (dev) | โ |
| POST | /api/auth/2fa/disable |
Dรฉsactive la 2FA | ๐ JWT | Global | โ |
Gรฉnรจre un secret TOTP et un QR code pour configurer l'authentification ร deux facteurs.
Rate Limit: 5 requรชtes/5min (prod), 100/5min (dev)
Headers:
Authorization: Bearer <token>
Response 200:
{
"success": true,
"secret": "JBSWY3DPEHPK3PXP",
"qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"manualEntryKey": "JBSW Y3DP EHPK 3PXP"
}Note: Le secret n'est pas encore sauvegardรฉ en base. Il faut appeler /2fa/setup/verify avec un code valide pour activer la 2FA.
Configuration TOTP:
- Window: ยฑ1 (ยฑ30 secondes)
- Step: 30 secondes
- Digits: 6
- Algorithm: SHA1 (standard TOTP)
Vรฉrifie le code TOTP et active la 2FA pour l'utilisateur.
Rate Limit: 5 requรชtes/5min (prod), 100/5min (dev)
Headers:
Authorization: Bearer <token>
Request Body:
{
"token": "123456",
"secret": "JBSWY3DPEHPK3PXP"
}Response 200:
{
"success": true,
"message": "2FA activated successfully",
"backupCodes": [
"AB12-CD34-EF56",
"GH78-IJ90-KL12",
"MN34-OP56-QR78",
"ST90-UV12-WX34",
"YZ56-AB78-CD90"
]
}Erreurs possibles:
-
400 Bad Request- Code invalide ou expirรฉ -
409 Conflict- 2FA dรฉjร activรฉe
Vรฉrifie le code 2FA aprรจs un login avec 2FA activรฉe.
Rate Limit: 5 requรชtes/5min (prod), 100/5min (dev)
Headers:
Authorization: Bearer <tempToken>
Request Body:
{
"token": "123456"
}Response 200:
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"userId": 42,
"username": "john_doe"
}Erreurs possibles:
-
400 Bad Request- Code invalide -
401 Unauthorized- Temp token invalide ou expirรฉ -
429 Too Many Requests- Trop de tentatives
Dรฉsactive l'authentification ร deux facteurs.
Headers:
Authorization: Bearer <token>
Request Body:
{
"password": "SecurePass123!"
}Response 200:
{
"success": true,
"message": "2FA disabled successfully"
}Erreurs possibles:
-
400 Bad Request- Mot de passe requis -
401 Unauthorized- Mot de passe incorrect
| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| POST | /api/auth/heartbeat |
Envoie un heartbeat pour rester "en ligne" | ๐ JWT | 10/10s | โ |
| GET | /api/auth/is-online/:name |
Vรฉrifie si un utilisateur est en ligne | ๐ JWT | 200/min (prod), 1000/min (dev) | โ |
Envoie un signal heartbeat pour marquer l'utilisateur comme en ligne.
Rate Limit: 10 requรชtes/10s
Headers:
Authorization: Bearer <token>
Response 200:
{
"success": true,
"online": true,
"expiresIn": 30
}Note: Le statut en ligne expire aprรจs 30 secondes sans heartbeat. Les clients doivent envoyer un heartbeat toutes les 20-25 secondes pour rester en ligne.
Vรฉrifie si un utilisateur est actuellement en ligne.
Rate Limit: 200 requรชtes/min (prod), 1000/min (dev)
URL Parameters:
-
name(string) : Username de l'utilisateur
Headers:
Authorization: Bearer <token>
Response 200:
{
"username": "john_doe",
"online": true,
"lastSeen": "2026-01-27T12:34:56Z"
}Toutes les routes admin nรฉcessitent un rรดle ADMIN et sont prรฉfixรฉes par /api/auth/admin.
โ ๏ธ Les headersX-User-Id,X-User-NameetX-User-Rolesont injectรฉs automatiquement par le Gateway aprรจs validation du JWT.
| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| GET | /api/auth/admin/users |
Liste tous les utilisateurs | ๐ Admin | 50/min | โ |
| PUT | /api/auth/admin/users/:id |
Modifie un utilisateur | ๐ Admin | 20/min | โ |
| DELETE | /api/auth/admin/users/:id |
Supprime un utilisateur | ๐ Admin | 10/min | โ |
| POST | /api/auth/admin/users/:id/disable-2fa |
Dรฉsactive la 2FA d'un utilisateur | ๐ Admin | 10/min | โ |
Liste tous les utilisateurs de la plateforme.
Rate Limit: 50 requรชtes/min
Headers:
Authorization: Bearer <admin_token>
X-User-Id: <admin_user_id> (injectรฉ par Gateway)
X-User-Name: <admin_username> (injectรฉ par Gateway)
X-User-Role: admin (injectรฉ par Gateway)
Query Parameters (optionnels):
-
page(number) : Numรฉro de page (dรฉfaut: 1) -
limit(number) : Nombre de rรฉsultats par page (dรฉfaut: 50, max: 100) -
search(string) : Recherche par username ou email -
role(string) : Filtre par rรดle (user,admin)
Response 200:
{
"users": [
{
"id": 1,
"username": "john_doe",
"email": "john@example.com",
"role": "user",
"twoFactorEnabled": true,
"createdAt": "2026-01-15T10:30:00Z",
"lastLogin": "2026-01-27T12:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 150,
"pages": 3
}
}Erreurs possibles:
-
401 Unauthorized- Token invalide -
403 Forbidden- Utilisateur non admin
Modifie les informations d'un utilisateur.
Rate Limit: 20 requรชtes/min
URL Parameters:
-
id(number) : ID de l'utilisateur
Headers:
Authorization: Bearer <admin_token>
X-User-Id: <admin_user_id> (injectรฉ par Gateway)
X-User-Name: <admin_username> (injectรฉ par Gateway)
Request Body:
{
"username": "new_username",
"email": "new@example.com",
"role": "admin"
}Response 200:
{
"success": true,
"user": {
"id": 42,
"username": "new_username",
"email": "new@example.com",
"role": "admin",
"updatedAt": "2026-01-27T12:35:00Z"
}
}Erreurs possibles:
-
400 Bad Request- Donnรฉes invalides -
403 Forbidden- Non autorisรฉ -
404 Not Found- Utilisateur inexistant -
409 Conflict- Username ou email dรฉjร utilisรฉ
Supprime un utilisateur de maniรจre permanente.
Rate Limit: 10 requรชtes/min
URL Parameters:
-
id(number) : ID de l'utilisateur
Headers:
Authorization: Bearer <admin_token>
X-User-Id: <admin_user_id> (injectรฉ par Gateway)
X-User-Name: <admin_username> (injectรฉ par Gateway)
Response 200:
{
"success": true,
"message": "User deleted successfully",
"userId": 42
}Erreurs possibles:
-
403 Forbidden- Non autorisรฉ (ne peut pas supprimer un admin) -
404 Not Found- Utilisateur inexistant
Dรฉsactive la 2FA pour un utilisateur (utile si l'utilisateur a perdu accรจs ร son authenticator).
Rate Limit: 10 requรชtes/min
URL Parameters:
-
id(number) : ID de l'utilisateur
Headers:
Authorization: Bearer <admin_token>
X-User-Id: <admin_user_id> (injectรฉ par Gateway)
X-User-Name: <admin_username> (injectรฉ par Gateway)
Response 200:
{
"success": true,
"message": "2FA disabled for user",
"userId": 42,
"username": "john_doe"
}Erreurs possibles:
-
403 Forbidden- Non autorisรฉ -
404 Not Found- Utilisateur inexistant -
409 Conflict- 2FA dรฉjร dรฉsactivรฉe
Service de gestion des profils utilisateurs et des relations d'amitiรฉ.
โ ๏ธ Note: Returnedidis theauthIdin DB.users/prefix should perhaps be changed tousers/profiles
| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| GET | /api/users/:id |
Rรฉcupรจre un profil par ID | ๐ JWT | Global | ๐ท |
| GET | /api/users/username/:username |
Rรฉcupรจre un profil par username | ๐ JWT | Global | โ |
| PATCH | /api/users/avatar/:id |
Modifie l'avatar d'un utilisateur | ๐ JWT | Global | ๐ท |
| POST | /users/ |
Crรฉe un profil (route interne) | ๐ Internal | - | โ |
Rรฉcupรจre les informations de profil d'un utilisateur par son ID.
URL Parameters:
-
id(number) : Auth ID de l'utilisateur
Headers:
Authorization: Bearer <token>
Response 200:
{
"authId": 1,
"username": "john_doe",
"avatarUrl": "default.png"
}Erreurs possibles:
-
400 Bad Request- ID invalide -
404 Not Found- Utilisateur inexistant
Rรฉcupรจre les informations de profil d'un utilisateur par son username.
URL Parameters:
-
username(string) : Username de l'utilisateur
Headers:
Authorization: Bearer <token>
Response 200:
{
"authId": 1,
"username": "john_doe",
"avatarUrl": "default.png"
}Erreurs possibles:
-
400 Bad Request- Username invalide -
404 Not Found- Utilisateur inexistant
Modifie l'URL de l'avatar d'un utilisateur.
URL Parameters:
-
id(number) : Auth ID de l'utilisateur
Headers:
Authorization: Bearer <token>
Request Body:
{
"avatarUrl": "new_avatar.png"
}Response 200:
{
"authId": 1,
"username": "john_doe",
"avatarUrl": "new_avatar.png"
}Erreurs possibles:
-
400 Bad Request- Donnรฉes invalides -
401 Unauthorized- Non autorisรฉ -
404 Not Found- Utilisateur inexistant
Crรฉe un nouveau profil utilisateur. Route interne appelรฉe par le service Auth aprรจs inscription.
๐ Route interne - Authentification par API Key ou header interne
Request Body:
{
"id": 42,
"username": "john_doe",
"email": "john@example.com"
}Response 201:
{
"authId": 42,
"username": "john_doe",
"avatarUrl": "default.png"
}Erreurs possibles:
-
400 Bad Request- Donnรฉes manquantes ou invalides -
409 Conflict- Profil dรฉjร existant
| Mรฉthode | Endpoint | Description | Auth | Rate Limit | Status |
|---|---|---|---|---|---|
| GET | /api/users/friends/:id |
Liste les amis d'un utilisateur | ๐ JWT | Global | ๐ท |
| POST | /api/users/friends |
Envoie une demande d'ami | ๐ JWT | Global | โ |
| PATCH | /api/users/friends/:id/status |
Modifie le statut d'une amitiรฉ | ๐ JWT | Global | ๐ท |
| PATCH | /api/users/friends/:id/nickname |
Modifie le surnom d'un ami | ๐ JWT | Global | ๐ท |
| DELETE | /api/users/friends/:id |
Supprime une relation d'amitiรฉ | ๐ JWT | Global | ๐ท |
Liste toutes les relations d'amitiรฉ d'un utilisateur.
URL Parameters:
-
id(number) : Auth ID de l'utilisateur
Headers:
Authorization: Bearer <token>
Response 200:
[
{
"id": 1,
"status": "accepted",
"nickname": "Best Friend",
"friend": {
"authId": 2,
"username": "jane_doe",
"avatarUrl": "default.png"
}
}
]Erreurs possibles:
-
400 Bad Request- ID invalide -
401 Unauthorized- Non authentifiรฉ -
404 Not Found- Utilisateur inexistant
Envoie une demande d'ami ร un utilisateur.
Headers:
Authorization: Bearer <token>
Request Body:
{
"id": 2
}Response 201:
{
"id": 1,
"status": "pending",
"nickname": null,
"friend": {
"authId": 2,
"username": "jane_doe",
"avatarUrl": "default.png"
}
}Erreurs possibles:
-
400 Bad Request- ID invalide ou manquant -
401 Unauthorized- Non authentifiรฉ -
409 Conflict- Relation d'amitiรฉ dรฉjร existante -
422 Unprocessable Entity- Ne peut pas s'ajouter soi-mรชme
Modifie le statut d'une relation d'amitiรฉ (accepter/refuser une demande).
URL Parameters:
-
id(number) : ID de la relation d'amitiรฉ
Headers:
Authorization: Bearer <token>
Request Body:
{
"status": "accepted"
}Valeurs possibles pour status:
-
accepted: Accepter la demande -
rejected: Refuser la demande -
pending: Remettre en attente -
blocked: Bloquer l'utilisateur
Response 200:
{
"id": 1,
"status": "accepted",
"nickname": null,
"friend": {
"authId": 2,
"username": "jane_doe",
"avatarUrl": "default.png"
}
}Erreurs possibles:
-
400 Bad Request- Statut invalide -
401 Unauthorized- Non authentifiรฉ -
404 Not Found- Relation inexistante
Modifie le surnom personnalisรฉ d'un ami.
URL Parameters:
-
id(number) : ID de la relation d'amitiรฉ
Headers:
Authorization: Bearer <token>
Request Body:
{
"nickname": "Best Friend"
}Response 200:
{
"id": 1,
"status": "accepted",
"nickname": "Best Friend",
"friend": {
"authId": 2,
"username": "jane_doe",
"avatarUrl": "default.png"
}
}Erreurs possibles:
-
400 Bad Request- Nickname invalide -
401 Unauthorized- Non authentifiรฉ -
404 Not Found- Relation inexistante
Supprime une relation d'amitiรฉ.
URL Parameters:
-
id(number) : ID de la relation d'amitiรฉ
Headers:
Authorization: Bearer <token>
Response 200:
{
"id": 1,
"status": "deleted",
"nickname": null,
"friend": {
"authId": 2,
"username": "jane_doe",
"avatarUrl": "default.png"
}
}Erreurs possibles:
-
400 Bad Request- ID invalide -
401 Unauthorized- Non authentifiรฉ -
404 Not Found- Relation inexistante
Predicts the next move for the AI paddle.
Request Body:
{
"ball_x": 400,
"ball_y": 300,
"ball_velocity_x": 5,
"ball_velocity_y": -2,
"paddle_y": 250,
"opponent_y": 250
}
Response:
{
"action": 1 // 0=STOP, 1=UP, 2=DOWN
}
Structure d'un profil utilisateur.
interface ProfileDTO {
authId: number; // ID utilisateur (clรฉ primaire du service Auth)
username: string; // Username unique
avatarUrl: string; // URL de l'avatar
}Exemple:
{
"authId": 1,
"username": "john_doe",
"avatarUrl": "default.png"
}Structure d'une relation d'amitiรฉ.
interface FriendshipUnifiedDTO {
id: number; // ID de la relation
status: FriendshipStatus; // Statut de la relation
nickname: string | null; // Surnom personnalisรฉ (optionnel)
friend: ProfileDTO; // Profil de l'ami
}
type FriendshipStatus = 'pending' | 'accepted' | 'rejected' | 'blocked';Exemple:
{
"id": 1,
"status": "accepted",
"nickname": "Best Friend",
"friend": {
"authId": 2,
"username": "jane_doe",
"avatarUrl": "default.png"
}
}Structure utilisateur en base de donnรฉes SQLite (service Auth).
interface User {
id: number; // ID unique
username: string; // Username unique (4-20 caractรจres)
email: string; // Email unique
passwordHash: string; // Hash bcrypt (rounds: 10)
role: 'user' | 'admin'; // Rรดle utilisateur
twoFactorEnabled: boolean; // 2FA activรฉe ?
twoFactorSecret: string | null; // Secret TOTP (si 2FA activรฉe)
createdAt: string; // Date de crรฉation (ISO 8601)
lastLogin: string | null; // Dernier login (ISO 8601)
}Structure du payload JWT.
interface JWTPayload {
sub: number; // Subject (userId)
username: string; // Username
role: string; // Rรดle ('user' | 'admin')
iat: number; // Issued at (timestamp)
exp: number; // Expiration (timestamp)
}Configuration JWT:
- Algorithme:
HS256 - Expiration: 1h (configurable via
AUTH_CONFIG.JWT_EXPIRATION) - Secret: Variable d'environnement
JWT_SECRET - Validation: Locale au Gateway (pas d'appel au service Auth)
| Endpoint | Production | Development |
|---|---|---|
| Gateway Global | 1000/min | 10000/min |
| Auth - Register | 5/5min | 100/5min |
| Auth - Login | 5/5min | 100/5min |
| Auth - 2FA Setup | 5/5min | 100/5min |
| Auth - 2FA Verify | 5/5min | 100/5min |
| Auth - Heartbeat | 10/10s | 10/10s |
| Auth - Is Online | 200/min | 1000/min |
| Admin - List Users | 50/min | 50/min |
| Admin - Update User | 20/min | 20/min |
| Admin - Delete User | 10/min | 10/min |
| Admin - Disable 2FA | 10/min | 10/min |
Les rate limits s'adaptent automatiquement selon
NODE_ENV(production/development/test).
Gateway JWT Validation: Le Gateway valide les JWT localement sans appel au service Auth. Cela rรฉduit la latence et les points de dรฉfaillance.
Headers internes: Le Gateway injecte automatiquement les headers
X-User-Id,X-User-NameetX-User-Roleaprรจs validation du JWT pour toutes les requรชtes vers les services backend.
Hashing: Tous les mots de passe sont hashรฉs avec bcrypt (10 rounds).
TOTP: Les tokens 2FA expirent aprรจs 30 secondes. Configuration standard : SHA1, 6 digits, 30s step.
Session Management: Le statut "en ligne" utilise Redis avec un TTL de 30 secondes. Les clients doivent envoyer un heartbeat toutes les 20-25 secondes.
Les services utilisent les codes HTTP standardisรฉs :
-
200 OK: Succรจs -
201 Created: Ressource crรฉรฉe -
400 Bad Request: Donnรฉes invalides -
401 Unauthorized: Authentification requise ou invalide -
403 Forbidden: Permissions insuffisantes -
404 Not Found: Ressource inexistante -
409 Conflict: Conflit (ex: username dรฉjร pris) -
422 Unprocessable Entity: Erreur sรฉmantique -
429 Too Many Requests: Rate limit dรฉpassรฉ -
500 Internal Server Error: Erreur serveur
Voir Restful-API pour plus de dรฉtails sur les conventions HTTP.
- Gateway Service - API Gateway & JWT validation
- Auth Service - Authentication & 2FA/TOTP
- AI Service - AI opponent
- API Documentation - OpenAPI/Swagger
- Fastify - Web framework
- Prisma - ORM
- WebSockets - Real-time communication
- Restful API - API standards
- React - UI library
- CSS - Styling
- Tailwind - CSS framework
- Accessibility - WCAG compliance
- TypeScript - Language
- Zod - Schema validation
- Nginx - Reverse proxy
- Logging and Error management - Observability
- OAuth 2.0 - Authentication flows
- Two-factor authentication - 2FA/TOTP
- Avalanche - Blockchain network
- Hardhat - Development framework
- Solidity - Smart contracts language
- Open Zeppelin - Security standards
- ESLint - Linting
- Vitest - Testing
- GitHub Actions - CI/CD
- Husky, Commit lints and git hooks - Git hooks
- ELK - Logging stack
๐ Page model