Logs de diagnostic et rapprochement SumUp ↔ bénévole
- Une ligne de log par requête (route modèle, statut, durée, code d'erreur, compte), identifiant X-Request-ID repris dans chaque log et affiché à l'utilisateur sous une erreur, exceptions non gérées tracées (500 JSON) - Journal d'accès d'uvicorn coupé : il exposait le jeton du formulaire public - Logs métier : paiement SumUp, connexion, import, plannings, solveur - Nom du bénévole dans la description du checkout SumUp - Code et identifiant de transaction SumUp enregistrés au paiement (migration 0023), affichés sur la fiche et dans l'export Excel Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d722a81a87
commit
d0fa1e109c
@@ -70,7 +70,11 @@ export function createHttpApi(baseUrl: string): PlanningApi {
|
||||
? ((detail as { violations: [] }).violations ?? [])
|
||||
: [];
|
||||
if (res.status === 401 && !path.includes('/auth/')) notifyUnauthorized();
|
||||
throw new ApiError(res.status, code, violations);
|
||||
const requestId = res.headers.get('X-Request-ID');
|
||||
if (res.status >= 500) {
|
||||
console.error(`API ${res.status} ${path} — référence ${requestId ?? '?'}`, detail);
|
||||
}
|
||||
throw new ApiError(res.status, code, violations, requestId);
|
||||
}
|
||||
return body as T;
|
||||
}
|
||||
@@ -99,7 +103,7 @@ export function createHttpApi(baseUrl: string): PlanningApi {
|
||||
// Corps non JSON (ex. erreur réseau) : garde le code générique.
|
||||
}
|
||||
if (res.status === 401) notifyUnauthorized();
|
||||
throw new ApiError(res.status, code, []);
|
||||
throw new ApiError(res.status, code, [], res.headers.get('X-Request-ID'));
|
||||
}
|
||||
return res.blob();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user