ci: docker_tag=ext chore(back): v1.0.3 IdNot 4xx passthrough robuste
All checks were successful
build-and-push-ext / build_push (push) Successful in 24s

This commit is contained in:
dev4 2025-09-19 07:09:19 +00:00
parent bd042533b2
commit 723b532c64
6 changed files with 34 additions and 8 deletions

View File

@ -14,3 +14,10 @@
- 5xx: erreurs internes ou partenaires (non applicatives)
- Documentation et tests mis à jour pour couvrir “JSON invalide -> 400”.
- CI: utiliser `ci: docker_tag=ext` pour builder/pusher limage.
## v1.0.3
- IdNot: renforcement de la gestion derreurs applicatives (4xx) dans `IdNotController.authenticate`.
- Laisse désormais passer toute erreur avec `statusCode` 4xx même si linstance nest pas exactement celle des classes locales.
- Fallback sur `name` (BusinessRuleError, ForbiddenError, UnauthorizedError, ValidationError) pour tolérer les divergences dinstances.
- Objectif: éviter les 502 lorsquun cas fonctionnel (ex: utilisateur non rattaché) survient, et renvoyer le bon 4xx.

View File

@ -36,6 +36,8 @@ Analyse synthétique de `lecoffre-back-mini` (Express + TypeScript).
- `403`: utilisateur non rattaché à une étude (ForbiddenError)
- `5xx`: erreurs internes ou partenaires (ExternalServiceError)
Note: dans `IdNotController.authenticate`, toute erreur possédant un `statusCode` 4xx (ou un `name` applicatif connu) est relancée telle quelle afin déviter un fallback en 502.
### Dépendances clés
- **HTTP**: `express`, `cors`
- **Infra**: `pg`, `dotenv`

View File

@ -1,6 +1,6 @@
{
"name": "lecoffre-back-mini",
"version": "1.0.2",
"version": "1.0.3",
"description": "Mini serveur avec une route /api/ping",
"main": "dist/server.js",
"scripts": {

View File

@ -174,11 +174,25 @@ export class IdNotController {
});
// Laisser passer les erreurs applicatives connues (4xx) pour éviter un 502 côté client
// Approche robuste: on tolère les divergences d'instance en vérifiant le statusCode et le nom
const maybeStatus = (error as any)?.statusCode;
const maybeName = (error as any)?.name as string | undefined;
// 1) Si une erreur possède un statusCode 4xx, on la relaisse passer
if (typeof maybeStatus === 'number' && maybeStatus >= 400 && maybeStatus < 500) {
throw error;
}
// 2) Si le nom correspond à une erreur applicative connue, on la relaisse passer
if (
error instanceof BusinessRuleError ||
error instanceof ForbiddenError ||
error instanceof UnauthorizedError ||
error instanceof ValidationError
error instanceof ValidationError ||
maybeName === 'BusinessRuleError' ||
maybeName === 'ForbiddenError' ||
maybeName === 'UnauthorizedError' ||
maybeName === 'ValidationError'
) {
throw error;
}

View File

@ -19,3 +19,6 @@ Axes de tests pour `lecoffre-back-mini` (sans exemples dimplémentation).
- Vérifier POST `/api/v1/idnot/auth` avec un code long dans le corps JSON (`{ code }`) retourne un statut applicatif (4xx/5xx) mais pas 502.
- Vérifier quun corps JSON invalide (ex: JSON mal formé) renvoie `400`.
- Vérifier quun GET/POST avec segment dURL trop long nest plus utilisé par le front.
Focus régression v1.0.3:
- Cas « utilisateur non rattaché à une étude » doit renvoyer `403` (plus de 502).