PD-32 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-32 |
| Titre | Endpoints profil utilisateur |
| Domaine | auth-identity |
| Projet | backend |
| Date complétion | 2026-02-05 |
| Verdict | ACCEPTÉ |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Itérations Gate CLOSURE | 3 |
| Tests unitaires | 211/211 pass |
| Tests contractuels | 16/17 (94%) |
| Fichiers créés | 9 |
| Lignes de code | ~500 |
3. Learnings clés¶
-
Format d'erreur NestJS : Par défaut, NestJS retourne
{statusCode, message, error}. La spec exigeait{error, message}. Résolu avecProfileExceptionFilter. -
Test erreur 500 : Impossible en e2e sans mock. Résolu avec
overrideProvider(). -
Validation stricte ChatGPT : Ne pas proposer de "déviation acceptable" sans justification solide. ChatGPT refuse les déviations non justifiées.
-
class-validator avec whitelist : Rejet automatique des champs non autorisés.
4. Patterns applicables¶
Pattern existant : RLS via RlsQueryService¶
Pattern éprouvé réutilisé de PD-16.
Nouveau pattern : ExceptionFilter dédié par domaine¶
Pour garantir le format d'erreur contractuel :
@Catch(ProfileException)
export class ProfileExceptionFilter implements ExceptionFilter {
catch(exception: ProfileException, host: ArgumentsHost) {
const response = host.switchToHttp().getResponse<Response>();
response.status(exception.status).json({
error: exception.errorCode,
message: exception.message,
});
}
}
5. Signal CLAUDE.md¶
Priorité moyenne : Créer un BaseExceptionFilter réutilisable.
### ExceptionFilter — Format contractuel (2026-02-XX)
Chaque domaine fonctionnel nécessitant le format `{error, message}` doit avoir son propre filter.
**Template** : `src/common/filters/base-contract-exception.filter.ts`
**Alternative** : Créer un `BaseExceptionFilter` générique paramétré par le préfixe d'erreur (ERR-32-*, ERR-238-*, etc.).
6. Conclusion¶
PD-32 a livré les endpoints profil utilisateur après 3 itérations de Gate CLOSURE. Les validations croisées Claude/ChatGPT ont identifié des écarts que Claude avait manqués (format d'erreur, tests manquants). Le pattern ExceptionFilter dédié est désormais la norme pour le format contractuel des erreurs.
Rétrospective générée 2026-02-19 (Étape 10 batch auth-identity)