Skip to content

💡 [REQUEST] - Convention d'error handling inter-apps #2325

Description

@KepoParis

Description

Les erreurs ne sont pas formatées de la même façon selon le serveur qui répond :

  • Legacy (apps/server), erreurs gĂ©rĂ©es (ErrorResType) : { "message": "..." }
  • Legacy, erreurs non gĂ©rĂ©es (setErrorHandler dans app.ts) : { "status": 500, "error": "<message>", "stack": "..." }
  • NestJS (apps/server-nestjs) : sĂ©rialisation par dĂ©faut des HttpException : { "message": "<message mĂ©tier>", "error": "<raison HTTP gĂ©nĂ©rique>", "statusCode": ... }
  • NestJS, validation Zod (ZodValidationPipe) : BadRequestException(error.flatten()) → le body est l'objet flatten brut ({ formErrors, fieldErrors }), sans message ni error

Côté client, extractData (xhr-client.ts) doit deviner où se trouve le message (body.message ?? body.error ?? 'Erreur inconnue' depuis #2321). Les erreurs de validation Zod v2 s'affichent encore « Erreur inconnue ».

Proposition : ajouter un ExceptionFilter global dans apps/server-nestjs pour normaliser le format des erreurs v2, et y traiter le cas Zod (aplatir les fieldErrors en message lisible).

⚠️ Décision d'équipe requise : le format cible n'est pas qu'un détail technique — il faut un choix d'équipe sur la façon dont on gère les exceptions et le error handling à travers nos apps (server legacy, server-nestjs, client), notamment :

  • quel contrat d'erreur pour l'API v2 (alignĂ© sur le legacy { message } ? format NestJS enrichi ? RFC 7807 / problem+json ?) ;
  • comment exposer les erreurs de validation (Zod) au client de manière exploitable (affichage par champ ?) ;
  • ce qu'on logue vs ce qu'on expose (le legacy renvoie la stack en prod — Ă  rediscuter) ;
  • la stratĂ©gie de convergence du client une fois le format v2 stabilisĂ© (simplification d'extractData).

À mettre à l'ordre du jour d'une prochaine réunion technique avant implémentation.

PRs liées

À compléter une fois la décision prise.

Issues liées

Exemples simples

Sur POST /api/v2/projects/:projectId/environments avec des quotas dépassés, le client affichait « Bad Request » au lieu de « Le projet ne dispose pas de suffisamment de ressources : GPU. ». Avec un body invalide (Zod), il affiche encore « Erreur inconnue ».

Spécifications techniques

  • ExceptionFilter global enregistrĂ© dans apps/server-nestjs (via APP_FILTER ou useGlobalFilters), normalisant toutes les HttpException (et erreurs non gĂ©rĂ©es) vers le format d'erreur retenu par l'Ă©quipe.
  • Traitement dĂ©diĂ© du body flatten() de ZodValidationPipe.
  • Adaptation d'extractData cĂ´tĂ© client une fois le format stabilisĂ©.

Définition du fini

  • La fonctionnalitĂ© est terminĂ©e
  • Les tests liĂ©s Ă  cette fonctionnalitĂ© ont Ă©tĂ© ajoutĂ©s
  • La documentation liĂ©e Ă  cette fonctionnalitĂ© a Ă©tĂ© ajoutĂ©e (cf. https://github.com/cloud-pi-native/documentation)
  • La communication avec les autres Ă©quipes impliquĂ©es par cette fonctionnalitĂ© a Ă©tĂ© faite

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions