# PROMPT DE VÉRIFICATION DE COMPATIBILITÉ FRONTEND/BACKEND ## Objectif Vérifier que le frontend React (TypeScript) est **complètement et entièrement compatible** avec le backend Go (API REST). --- ## 1. VÉRIFICATION DES ENDPOINTS API ### Tâche Comparer chaque endpoint utilisé dans le frontend avec les routes enregistrées dans le backend. ### Points à vérifier : - [ ] **Correspondance des chemins** : Les endpoints frontend correspondent exactement aux routes backend (y compris préfixe `/api/v1`) - [ ] **Méthodes HTTP** : GET, POST, PUT, DELETE, PATCH correspondent - [ ] **Paramètres de route** : Les `:id`, `:username`, etc. sont correctement formatés - [ ] **Query parameters** : `?page=1&limit=20` correspondent aux attentes backend - [ ] **Endpoints manquants** : Tous les endpoints backend sont accessibles depuis le frontend - [ ] **Endpoints obsolètes** : Aucun endpoint frontend n'appelle des routes backend supprimées ### Fichiers à examiner : - Frontend : `src/config/constants.ts` (API_ENDPOINTS), `src/services/api/*.ts`, `src/features/*/api/*.ts` - Backend : Routes enregistrées dans les logs de démarrage (voir sortie `make run`) ### Exemple de vérification : ```typescript // Frontend POST /api/v1/auth/login // Backend (vérifier dans les logs) [GIN-debug] POST /api/v1/auth/login --> handler ``` --- ## 2. VÉRIFICATION DES TYPES DE DONNÉES ### Tâche Vérifier que les interfaces TypeScript correspondent aux structures de données retournées par le backend. ### Points à vérifier : - [ ] **User** : `id` (string/UUID), `username`, `email`, `role`, `created_at`, etc. - [ ] **Track** : `id`, `title`, `artist_id`, `duration`, `file_path`, etc. - [ ] **Conversation** : `id`, `name`, `type`, `participants`, `last_message`, etc. - [ ] **Message** : `id`, `content`, `sender_id`, `message_type`, `created_at`, etc. - [ ] **Session** : `id`, `user_id`, `token`, `expires_at`, `ip_address`, etc. - [ ] **Types de champs** : `string` vs `number`, `Date` vs `string` (ISO), `boolean` vs `number` - [ ] **Champs optionnels** : Les `?` dans TypeScript correspondent aux `NULL`/`omitempty` du backend - [ ] **Champs manquants** : Tous les champs backend sont présents dans les types frontend - [ ] **Champs supplémentaires** : Pas de champs frontend qui n'existent pas côté backend ### Fichiers à examiner : - Frontend : `src/types/api.ts`, `src/types/index.ts`, `src/features/*/types/*.ts` - Backend : Modèles Go dans `internal/models/*.go` ou `internal/core/*/models.go` ### Exemple de vérification : ```typescript // Frontend interface User { id: string; username: string; email: string; role: 'user' | 'admin'; created_at: string; // ISO date string } // Backend (vérifier) type User struct { ID uuid.UUID `json:"id"` Username string `json:"username"` Email string `json:"email"` Role string `json:"role"` CreatedAt time.Time `json:"created_at"` } ``` --- ## 3. VÉRIFICATION DES FORMATS DE REQUÊTES ### Tâche Vérifier que les payloads envoyés par le frontend correspondent aux structures attendues par le backend. ### Points à vérifier : - [ ] **Login** : `{ email, password, remember_me? }` correspond au handler backend - [ ] **Register** : `{ email, password, username }` + validation frontend = validation backend - [ ] **Update Profile** : Champs optionnels correctement gérés - [ ] **Upload Track** : Format `FormData` ou `multipart/form-data` correct - [ ] **Pagination** : `{ page, limit }` ou `{ cursor }` selon backend - [ ] **Filtres/Recherche** : Query params formatés correctement - [ ] **Noms de champs** : `snake_case` vs `camelCase` (backend Go utilise souvent `snake_case`) ### Fichiers à examiner : - Frontend : `src/features/*/api/*.ts`, `src/services/api.ts` - Backend : Handlers dans `internal/handlers/*.go`, `internal/api/*.go` ### Exemple de vérification : ```typescript // Frontend POST /api/v1/auth/login Body: { email: "user@example.com", password: "pass123" } // Backend (vérifier) type LoginRequest struct { Email string `json:"email" binding:"required,email"` Password string `json:"password" binding:"required"` } ``` --- ## 4. VÉRIFICATION DES FORMATS DE RÉPONSES ### Tâche Vérifier que le frontend gère correctement le format de réponse standardisé du backend. ### Points à vérifier : - [ ] **Format wrapper** : `{ success: boolean, data: T, error?: ApiError }` - [ ] **Unwrapping** : Le client API (`apiClient`) unwrap correctement `response.data.data` - [ ] **Réponses directes** : Certains endpoints retournent directement `data` sans wrapper - [ ] **Codes HTTP** : 200/201 pour succès, 400/401/403/404/409/422/429/500 pour erreurs - [ ] **Pagination** : Format `{ items: T[], pagination: {...} }` ou `{ data: T[], meta: {...} }` - [ ] **Listes vides** : `[]` vs `null` vs absence de champ ### Fichiers à examiner : - Frontend : `src/services/api/client.ts` (interceptors), `src/utils/apiErrorHandler.ts` - Backend : Format de réponse dans `internal/api/response.go` ou middleware ### Exemple de vérification : ```typescript // Frontend attend { success: true, data: { id: "123", username: "user" }, error: null } // Backend retourne (vérifier) Response{Success: true, Data: user, Error: nil} ``` --- ## 5. VÉRIFICATION DE LA GESTION DES ERREURS ### Tâche Vérifier que le frontend gère tous les codes d'erreur et formats d'erreur du backend. ### Points à vérifier : - [ ] **Format ApiError** : `{ code: number, message: string, details?: [...], request_id?: string, timestamp: string }` - [ ] **Codes d'erreur** : 1000-1999 (auth), 2000-2999 (validation), 3000-3999 (business), etc. - [ ] **Parsing d'erreurs** : `parseApiError()` gère tous les cas (AxiosError, ApiError, Error) - [ ] **Erreurs de validation** : `error.details[]` avec `{ field, message }` affichés correctement - [ ] **Erreurs réseau** : Timeout, connexion refusée, CORS - [ ] **Erreurs 401** : Refresh automatique du token, redirection si échec - [ ] **Erreurs 403** : Affichage message "Accès interdit" - [ ] **Erreurs 409** : Gestion conflits (username/email déjà utilisé) - [ ] **Erreurs 429** : Rate limiting avec retry après délai - [ ] **Erreurs 500** : Logger `request_id` pour support ### Fichiers à examiner : - Frontend : `src/utils/apiErrorHandler.ts`, `src/services/api/client.ts` (interceptors) - Backend : Codes d'erreur dans `internal/errors/*.go` ou constants ### Exemple de vérification : ```typescript // Frontend gère { code: 1000, message: "Invalid credentials", request_id: "req-123", timestamp: "2025-01-27T10:00:00Z" } // Backend retourne (vérifier) ErrorCode: 1000, Message: "Invalid credentials", RequestID: "req-123" ``` --- ## 6. VÉRIFICATION DE L'AUTHENTIFICATION ### Tâche Vérifier que le flux d'authentification frontend correspond au backend. ### Points à vérifier : - [ ] **Header Authorization** : Format `Bearer ` correct - [ ] **Token storage** : `localStorage` vs `sessionStorage` vs cookies (selon backend) - [ ] **Refresh token** : Endpoint `/api/v1/auth/refresh` avec `{ refresh_token: string }` - [ ] **Token expiration** : Gestion automatique du refresh avant expiration - [ ] **Logout** : Appel `/api/v1/auth/logout` avec `refresh_token`, nettoyage local - [ ] **GetMe** : Endpoint `/api/v1/auth/me` retourne le user actuel - [ ] **Interceptors** : Ajout automatique du token sur toutes les requêtes authentifiées - [ ] **401 handling** : Refresh automatique + retry, redirection si refresh échoue - [ ] **JWT claims** : Le frontend peut décoder/utiliser les claims si nécessaire ### Fichiers à examiner : - Frontend : `src/services/api/client.ts`, `src/services/tokenRefresh.ts`, `src/services/tokenStorage.ts` - Backend : Handlers auth dans `internal/api/auth.go` ou `internal/handlers/auth*.go` ### Exemple de vérification : ```typescript // Frontend headers: { Authorization: `Bearer ${token}` } // Backend (vérifier) c.GetHeader("Authorization") // "Bearer " ``` --- ## 7. VÉRIFICATION DES SCHÉMAS DE VALIDATION ### Tâche Vérifier que les validations frontend (Zod) correspondent aux validations backend. ### Points à vérifier : - [ ] **Email** : Format regex identique, validation côté client = validation backend - [ ] **Password** : Longueur min/max, complexité (majuscule, chiffre, caractère spécial) - [ ] **Username** : Longueur min/max, caractères autorisés (alphanumérique, underscore, tiret) - [ ] **File uploads** : Taille max, types MIME autorisés - [ ] **Messages** : Longueur max du contenu - [ ] **Dates** : Format ISO 8601 (`YYYY-MM-DD` ou `YYYY-MM-DDTHH:mm:ssZ`) - [ ] **UUIDs** : Format validation si utilisé - [ ] **Nombres** : Min/max, entiers vs décimaux ### Fichiers à examiner : - Frontend : `src/schemas/validation.ts`, `src/features/*/schemas/*.ts` - Backend : Validations dans les handlers Go (tags `binding`, `validate`) ### Exemple de vérification : ```typescript // Frontend (Zod) z.string().email().min(3).max(100) // Backend (vérifier) Email string `json:"email" binding:"required,email" validate:"min=3,max=100"` ``` --- ## 8. VÉRIFICATION DES CODES HTTP ### Tâche Vérifier que le frontend gère correctement tous les codes HTTP retournés par le backend. ### Points à vérifier : - [ ] **200 OK** : Succès, traiter `data` - [ ] **201 Created** : Ressource créée, traiter `data` (peut contenir `Location` header) - [ ] **204 No Content** : Succès sans body (DELETE, UPDATE parfois) - [ ] **400 Bad Request** : Erreur de validation, afficher `error.details` - [ ] **401 Unauthorized** : Token manquant/invalide, refresh ou rediriger login - [ ] **403 Forbidden** : Permissions insuffisantes, afficher message - [ ] **404 Not Found** : Ressource introuvable, afficher message générique - [ ] **409 Conflict** : Conflit (username/email existant), afficher `error.message` - [ ] **422 Unprocessable Entity** : Validation échouée, afficher `error.details` - [ ] **429 Too Many Requests** : Rate limit, afficher message + retry après - [ ] **500 Internal Server Error** : Erreur serveur, logger `request_id`, message générique - [ ] **502/503** : Service indisponible, message + retry ### Fichiers à examiner : - Frontend : `src/services/api/client.ts`, `src/utils/apiErrorHandler.ts` - Backend : Codes HTTP dans les handlers (Gin `c.JSON(status, ...)`) --- ## 9. VÉRIFICATION DES HEADERS ### Tâche Vérifier que les headers requis sont correctement envoyés et gérés. ### Points à vérifier : - [ ] **Content-Type** : `application/json` pour les requêtes JSON - [ ] **Authorization** : `Bearer ` pour les routes protégées - [ ] **Accept** : `application/json` si backend le requiert - [ ] **X-Requested-With** : Si backend vérifie CSRF - [ ] **Custom headers** : Headers spécifiques (API version, client ID, etc.) - [ ] **CORS** : Headers CORS gérés correctement (backend autorise les origines frontend) ### Fichiers à examiner : - Frontend : `src/services/api/client.ts` (headers par défaut) - Backend : Middleware CORS dans `internal/api/*.go` ou `internal/middleware/*.go` --- ## 10. VÉRIFICATION DE LA PAGINATION ### Tâche Vérifier que le format de pagination frontend correspond au backend. ### Points à vérifier : - [ ] **Format pagination** : `{ page, limit, total, total_pages, has_next, has_prev }` ou cursor-based - [ ] **Paramètres query** : `?page=1&limit=20` vs `?cursor=abc&limit=20` - [ ] **Valeurs par défaut** : `page=1`, `limit=20` (ou valeurs backend) - [ ] **Limites max** : Frontend respecte `limit <= 100` (ou limite backend) - [ ] **Navigation** : Boutons précédent/suivant utilisent correctement `has_prev`/`has_next` - [ ] **Liste vide** : `items: []` ou `data: []` selon format backend ### Fichiers à examiner : - Frontend : `src/types/api.ts` (PaginationData), composants de liste - Backend : Format pagination dans les handlers de liste --- ## 11. VÉRIFICATION DES UPLOADS ### Tâche Vérifier que les uploads de fichiers sont compatibles avec le backend. ### Points à vérifier : - [ ] **Format** : `multipart/form-data` ou `FormData` selon backend - [ ] **Champs** : Noms de champs (`file`, `cover_art`, `title`, etc.) correspondent - [ ] **Taille max** : Frontend valide avant upload (10MB image, 100MB audio, etc.) - [ ] **Types MIME** : Validation frontend = validation backend - [ ] **Progress** : Endpoint `/api/v1/uploads/:id/progress` si disponible - [ ] **Chunked upload** : Si backend supporte, frontend utilise `/api/v1/tracks/chunk` - [ ] **Response** : Format de réponse après upload (`file_id`, `file_url`, etc.) ### Fichiers à examiner : - Frontend : `src/services/api.ts` (upload methods), `src/features/tracks/services/*.ts` - Backend : Handlers upload dans `internal/api/upload.go` ou `internal/core/track/*.go` --- ## 12. VÉRIFICATION DES WEBSOCKETS ### Tâche Vérifier que la connexion WebSocket et les messages sont compatibles. ### Points à vérifier : - [ ] **URL** : `ws://localhost:8081/ws` ou `wss://` en production - [ ] **Authentification** : Token JWT dans query param `?token=...` ou header - [ ] **Format messages** : `{ type: string, data: any, timestamp: string }` - [ ] **Types de messages** : `message`, `typing`, `read_receipt`, `user_joined`, etc. - [ ] **Reconnection** : Logique de reconnexion automatique - [ ] **Heartbeat** : Ping/pong si backend le requiert - [ ] **Error handling** : Gestion des erreurs WebSocket ### Fichiers à examiner : - Frontend : `src/services/websocket.ts`, `src/features/chat/hooks/useChat.ts` - Backend : WebSocket handler dans chat server Rust (hors scope backend Go) --- ## 13. VÉRIFICATION DES VARIABLES D'ENVIRONNEMENT ### Tâche Vérifier que les URLs et configurations correspondent. ### Points à vérifier : - [ ] **API URL** : `VITE_API_URL=http://localhost:8080/api/v1` (avec `/api/v1`) - [ ] **WS URL** : `VITE_WS_URL=ws://localhost:8081/ws` - [ ] **Stream URL** : `VITE_STREAM_URL=ws://localhost:8082/stream` - [ ] **Timeout** : Timeout frontend (10s) compatible avec timeout backend - [ ] **CORS origins** : Backend autorise les origines frontend (`localhost:5173`, `localhost:3000`) ### Fichiers à examiner : - Frontend : `src/config/env.ts`, `.env.local` - Backend : Configuration CORS dans `internal/config/*.go` --- ## 14. VÉRIFICATION DES TESTS E2E ### Tâche Vérifier que les tests E2E couvrent tous les endpoints critiques. ### Points à vérifier : - [ ] **Auth flow** : Login, register, logout, refresh - [ ] **CRUD operations** : Create, Read, Update, Delete pour chaque ressource - [ ] **Error cases** : 400, 401, 403, 404, 409, 422, 429, 500 - [ ] **Edge cases** : Pagination limites, listes vides, champs optionnels ### Fichiers à examiner : - Frontend : `e2e/*.spec.ts` --- ## 15. CHECKLIST FINALE ### Avant de considérer la compatibilité complète : - [ ] Tous les endpoints backend sont testés depuis le frontend - [ ] Tous les types TypeScript correspondent aux modèles backend - [ ] Toutes les erreurs backend sont gérées et affichées correctement - [ ] L'authentification fonctionne (login, refresh, logout) - [ ] Les uploads fonctionnent (fichiers, images, audio) - [ ] La pagination fonctionne sur toutes les listes - [ ] Les WebSockets se connectent et échangent des messages - [ ] Les validations frontend = validations backend - [ ] Les codes HTTP sont tous gérés - [ ] Les tests E2E passent --- ## MÉTHODOLOGIE DE VÉRIFICATION ### Étape 1 : Audit statique 1. Lire tous les fichiers API frontend (`src/services/api/*.ts`, `src/features/*/api/*.ts`) 2. Extraire tous les endpoints, types, formats de requêtes/réponses 3. Comparer avec la documentation backend ou les routes enregistrées ### Étape 2 : Audit dynamique 1. Démarrer le backend (`make run` dans `veza-backend-api`) 2. Tester chaque endpoint avec `curl` ou Postman 3. Comparer les réponses réelles avec ce que le frontend attend ### Étape 3 : Tests d'intégration 1. Démarrer frontend + backend 2. Exécuter les tests E2E (`npm run test:e2e`) 3. Tester manuellement les flows critiques (auth, upload, chat) ### Étape 4 : Vérification des logs 1. Examiner les logs backend pour les erreurs 400/401/500 2. Examiner les logs frontend (console) pour les erreurs de parsing 3. Identifier les incompatibilités --- ## OUTILS RECOMMANDÉS - **Postman/Insomnia** : Tester les endpoints backend directement - **Browser DevTools** : Network tab pour voir les requêtes/réponses réelles - **TypeScript compiler** : Vérifier les types (`npm run typecheck`) - **Playwright** : Tests E2E automatisés - **Diff tools** : Comparer types frontend vs modèles backend --- ## RAPPORT DE COMPATIBILITÉ Après vérification, créer un rapport avec : 1. **Endpoints vérifiés** : Liste de tous les endpoints testés 2. **Incompatibilités trouvées** : Détails de chaque problème 3. **Recommandations** : Actions à prendre pour corriger 4. **Couverture** : % d'endpoints/testés, % de types alignés --- ## EXEMPLE D'UTILISATION ```bash # 1. Démarrer le backend cd veza-backend-api && make run # 2. Dans un autre terminal, vérifier les routes curl http://localhost:8080/api/v1/health # 3. Tester un endpoint avec auth curl -X POST http://localhost:8080/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"test@example.com","password":"test123"}' # 4. Comparer la réponse avec ce que le frontend attend # (voir src/features/auth/api/authApi.ts) ``` --- **Note** : Ce prompt doit être utilisé avec le backend en cours d'exécution pour une vérification complète. Les routes backend sont visibles dans les logs de démarrage (`make run`).