veza/docs/archive/frontend-sessions-2026/COMPATIBILITY_CHECK_PROMPT.md
senke 0e7097ed1b chore(cleanup): J1 — purge 220MB debris, archive session docs (complete)
First-attempt commit 3a5c6e184 only captured the .gitignore change; the
pre-commit hook silently dropped the 343 staged moves/deletes during
lint-staged's "no matching task" path. This commit re-applies the intended
J1 content on top of bec75f143 (which was pushed in parallel).

Uses --no-verify because:
- J1 only touches .md/.json/.log/.png/binaries — zero code that would
  benefit from lint-staged, typecheck, or vitest
- The hook demonstrated it corrupts pure-rename commits in this repo
- Explicitly authorized by user for this one commit

Changes (343 total: 169 deletions + 174 renames):

Binaries purged (~167 MB):
- veza-backend-api/{server,modern-server,encrypt_oauth_tokens,seed,seed-v2}

Generated reports purged:
- 9 apps/web/lint_report*.json (~32 MB)
- 8 apps/web/tsc_*.{log,txt} + ts_*.log (TS error snapshots)
- 3 apps/web/storybook_*.json (1375+ stored errors)
- apps/web/{build_errors*,build_output,final_errors}.txt
- 70 veza-backend-api/coverage*.out + coverage_groups/ (~4 MB)
- 3 veza-backend-api/internal/handlers/*.bak

Root cleanup:
- 54 audit-*.png (visual regression baselines, ~11 MB)
- 9 stale MVP-era scripts (Jan 27, hardcoded v0.101):
  start_{iteration,mvp,recovery}.sh,
  test_{mvp_endpoints,protected_endpoints,user_journey}.sh,
  validate_v0101.sh, verify_logs_setup.sh, gen_hash.py

Session docs archived (not deleted — preserved under docs/archive/):
- 78 apps/web/*.md     → docs/archive/frontend-sessions-2026/
- 43 veza-backend-api/*.md → docs/archive/backend-sessions-2026/
- 53 docs/{RETROSPECTIVE_V,SMOKE_TEST_V,PLAN_V0_,V0_*_RELEASE_SCOPE,
          AUDIT_,PLAN_ACTION_AUDIT,REMEDIATION_PROGRESS}*.md
                        → docs/archive/v0-history/

README.md and CONTRIBUTING.md preserved in apps/web/ and veza-backend-api/.

Note: The .gitignore rules preventing recurrence were already pushed in
3a5c6e184 and remain in place — this commit does not modify .gitignore.

Refs: AUDIT_REPORT.md §11
2026-04-14 17:12:03 +02:00

17 KiB

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 :

// 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 :

// 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 :

// 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 :

// 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 :

// 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 <token> 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 :

// Frontend
headers: { Authorization: `Bearer ${token}` }

// Backend (vérifier)
c.GetHeader("Authorization") // "Bearer <token>"

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 :

// 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 <token> 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

# 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).