Skip to content

[TECH] Sortir les erreurs jetées des repositories de session/enrolment. - #17143

Closed
alexandrecoin wants to merge 4 commits into
devfrom
tech-remove-thrown-error-from-enrolment-repositories
Closed

[TECH] Sortir les erreurs jetées des repositories de session/enrolment.#17143
alexandrecoin wants to merge 4 commits into
devfrom
tech-remove-thrown-error-from-enrolment-repositories

Conversation

@alexandrecoin

@alexandrecoin alexandrecoin commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

☀️ Problème

Plusieurs repositories du sous-contexte certification/enrolment lèvent des erreurs du domaine lorsqu'ils ne trouvent pas de ligne en base.
L'infrastructure porte ainsi une décision métier alors que son seul rôle devrait être de rapporter ce qu'elle a trouvé, ou non.

⛱️ Proposition

Les repositories renvoient désormais null au lieu de lever une erreur, et la décision métier remonte d'un cran :

Repositories (enrolment/infrastructure)

Repository Méthode Avant Après
session-repository get throw NotFoundError return null
session-repository remove throw NotFoundError return null
session-for-attendance-sheet-repository getWithCertificationCandidates throw NotFoundError return null
candidate-repository update throw CertificationCandidateNotFoundError retourne le candidat mis à jour

🧴 Remarques

  • Le refacto porte uniquement sur certification/enrolment

  • unfinalize-session introduit un changement de comportement, pas seulement un déplacement d'erreur : finalizedSessionRepository.remove (dans session-management, non touché par la branche) n'a jamais levé d'erreur. Avant, dé-finaliser une session absente de finalized-sessions passait silencieusement et appelait quand même sessionManagementRepository.unfinalize.

    • ⚠️ Point d'attention pour la revue : sur GET/PATCH d'une session inexistante, le 404 n'est plus produit par l'error-manager mais directement par le contrôleur. Le statut est identique, mais le corps de la réponse n'est plus un payload d'erreur JSON:API. (Renvoi d'un statusCode 404 au lieu d'une erreur)

    🏊 Pour tester

    • Tests verts.
    • Non-régression sur les erreurs levées dans le sous-contexte enrolment :
      • GET/PATCH d'une session inexistante → 404
      • suppression d'une session inexistante → 404
      • PV de session (feuille d'émargement) sans session ou sans candidat inscrit → 404
      • téléchargement du modèle d'import de candidats sur une session inexistante → 404
      • ajout d'un candidat / enrôlement d'élèves SCO / import ODS sur une session inaccessible → 404
      • modification d'un candidat inexistant → erreur candidat non trouvé
      • dé-finalisation d'une session non finalisée → 404

…y.update method

It is unnecessarry to check whether the candidate exists or not as this is
already done where candidate-repository.update is called (be it usecases or services)
…tendance-sheet-repository getWithCertificationCandidates
- Different calls from sessionAuthorizationAdapter.find already return null if no session is found
- As these calls are made before sessionRepository.get in all the usecases modified in this commit
we check on missing session beforehand to throw a NotFoundError
- Note: some sessionRepository.get calls are made directly from controllers, we return 404 error codes
instead of mapped domain errors. This choice prevents any additional information to be returned
from the route call
@pix-bot-github

Copy link
Copy Markdown

@alexandrecoin alexandrecoin self-assigned this Aug 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants