[FEATURE] Modifier l'appel api/users/me pour qu'il fonctionne avec le nouveau modèle (PIX-22584)#16398
Open
EmmanuelleBonnemay wants to merge 6 commits into
Open
[FEATURE] Modifier l'appel api/users/me pour qu'il fonctionne avec le nouveau modèle (PIX-22584)#16398EmmanuelleBonnemay wants to merge 6 commits into
EmmanuelleBonnemay wants to merge 6 commits into
Conversation
|
Choisir les applications à déployer :
Important N'oubliez pas de déployer l'API pour pouvoir accéder aux fronts et/ou à l’API MaDDo. |
lego-technix
reviewed
Jun 4, 2026
lego-technix
reviewed
Jun 4, 2026
lego-technix
reviewed
Jun 4, 2026
lego-technix
reviewed
Jun 4, 2026
lego-technix
reviewed
Jun 4, 2026
lego-technix
reviewed
Jun 4, 2026
lego-technix
reviewed
Jun 4, 2026
lego-technix
left a comment
Contributor
There was a problem hiding this comment.
✅ FAIT : Relecture du code
0f32eb7 to
1fdecde
Compare
Member
|
Func OK |
Libouk
approved these changes
Jun 4, 2026
lego-technix
approved these changes
Jun 4, 2026
lego-technix
left a comment
Contributor
There was a problem hiding this comment.
✅ Lu et testé fonctionnellement avec succès avec Firefox 🦊
4c8ad06 to
1203be1
Compare
1203be1 to
8b92d44
Compare
bpetetot
reviewed
Jun 8, 2026
Comment on lines
28
to
39
| @@ -34,5 +34,7 @@ export const getCurrentUser = async function ({ | |||
| codeForLastProfileToShare, | |||
| hasRecommendedTrainings, | |||
| shouldSeeDataProtectionPolicyInformationBanner, | |||
| pixAppTermsOfServiceStatus: tosStatus.status, | |||
| pixAppTermsOfServiceDocumentPath: tosStatus.documentPath, | |||
| }); | |||
Contributor
There was a problem hiding this comment.
Je suggère de faire un découpage des appels différents pour séparer les responsabilités.
- on récupère le user (Comme avant)
- on récupère les tos pix app via
legalDocumentApiRepositoryet on passetosStatusdirectement àUserWithActivityqui contient la logique
Suggested change
| const user = await userRepository.get(authenticatedUserId); | |
| const tosStatus = await legalDocumentApiRepository.getPixAppTosStatus(authenticatedUserId); | |
| const shouldSeeDataProtectionPolicyInformationBanner = user.shouldSeeDataProtectionPolicyInformationBanner; | |
| return new UserWithActivity({ | |
| user, | |
| tosStatus, | |
| hasAssessmentParticipations, | |
| codeForLastProfileToShare, | |
| hasRecommendedTrainings, | |
| shouldSeeDataProtectionPolicyInformationBanner, | |
| }); |
- UserWithActivity contient la logique du modèle
class UserWithActivity {
constructor({
user,
tosStatus,
hasAssessmentParticipations,
codeForLastProfileToShare,
hasRecommendedTrainings,
shouldSeeDataProtectionPolicyInformationBanner,
}) {
Object.assign(this, user);
this.hasAssessmentParticipations = hasAssessmentParticipations;
this.codeForLastProfileToShare = codeForLastProfileToShare;
this.hasRecommendedTrainings = hasRecommendedTrainings;
this.shouldSeeDataProtectionPolicyInformationBanner = shouldSeeDataProtectionPolicyInformationBanner;
// new tos
this.pixAppTermsOfServiceStatus = tosStatus.status;
this.pixAppTermsOfServiceDocumentPath = tosStatus.documentPath;
// legacy tos
this.cgu = tosStatus.status === STATUS.ACCEPTED || tosStatus.status === STATUS.UPDATE_REQUESTED;
this.mustValidateTermsOfService =
tosStatus.status === STATUS.REQUESTED || tosStatus.status === STATUS.UPDATE_REQUESTED;
this.lastTermsOfServiceValidatedAt = tosStatus.acceptedAt;
}
}
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚙 Problème
Afin de mettre en place le versionnement des CGU de Pix App, il est nécessaire de modifier l’API permettant de récupérer leur valeur afin de se baser sur le nouveau modèle (hors feature toggle, les nouveaux attributs sont ajoutés aux anciens et ils sont tous disponibles).
🍃 Proposition
Sur l’appel GET /api/users/me, récupérer les informations de CGU en appelant la nouvelle API
getLegalDocumentStatusByUserIddu contextelegal-documentModifier la récupération des attributs en utilisant le résultat de l’API:
cgu = truesi status =acceptedouupdate-requestedmustValidateTermsOfService:trueoufalseen fonction du status (conservé temporairement pour compatibilité)truesi status égal àrequestedouupdate-requestedlastTermsOfServiceValidatedAt: date d’acceptation retournée par l’API (conservé temporairement pour compatibilité)Ajouter un nouvel attribut en utilisant le résultat de l’API:
termsOfServiceStatus: status d’acceptation (accepted, requested, update-requested, not-applicable)Ajouter un nouvel attribut en utilisant le résultat de l’API:
pixAppTermsOfServiceDocumentPath: documentPath sur le status d’acceptationSérialiser le nouvel attribut
pix-app-terms-of-service-statussur l’appelGET /api/users/me🦵 Remarques
Point d'attention sur la date d'acceptation dont je ne suis pas sure.
🔗 Pour tester
/api/users/me:-- cgu
-- last-terms-of-service-validated-at
-- must-validate-terms-of-service
-- pix-app-terms-of-service-status
-- pix-app-terms-of-service-document-path
-- Faire une connexion sans ajouter de legal document ni d'acceptance pour Pix App et constater que l'utilisateur est renvoyé vers la page de validation des cgu.
Constater aussi dans les logs de l'api que le usecase
getLegalDocumentStatusByUserIdrevient avec unWARNlogger.warn(Unknown legal document version found for ${service} and ${type});Vérifier aussi que que deux attributs du user ont été forcés dans la réponse au
/api/users/me:cgu = false,mustValidateTermsOfService = true, etpix-app-terms-of-service-status = "requested"Explication : Il n'y a pas de
legalDocumentStatus. Donc la méthodenotFounddulegalDocumentStatusrenvoie unREQUESTED, et toute réponseREQUESTED- qui peut se produire comme ici quand on ne trouve pas delegalDocumentStatus, ou bien quand on ne trouve pas du tout d'acceptance pour cette utilisateur - forceuser.cguà false etuser.mustValidateTermsOfServiceà true (cela se passe à la ligne 442 duuserRepository.getWithPixAppTosStatus-- Rajouter une version de
legal-documentmais pas delegal-document-version-user-acceptances:node src/legal-documents/scripts/add-new-legal-document-version.js --type 'TOS' --service 'pix-app' --versionAt '2020-01-01'et noter l'id de cette version.
-- Constater que la connexion avec un élève (hermione@example.net) ne dirige pas l'utilisateur vers la page des cgu mais vers sa homepage, et que
pix-app-terms-of-service-status = "not-applicable"-- Constater que la connexion avec un "non élève" (harry-cover@example.net) redirige l'utilisateur vers la page des cgu avec un status
pix-app-terms-of-service-status = "requested"sur la route/api/users/me-- Rajouter une deuxième version des cgu dans la table
legal-document-versions, postérieure à la première :node src/legal-documents/scripts/add-new-legal-document-version.js --type="TOS" --service="pix-orga" --versionAt="2028-11-30"Rajouter une acceptance d'un utilisateur de votre choix, mais pour la première version uniquement :
pix=# insert into "legal-document-version-user-acceptances" ("legalDocumentVersionId", "userId", "acceptedAt") values (1002, {id de l'utilisateur}, now());Connectez-vous, constatez que l'utilisateur est redirigé vers la page d'acceptation des cgu, avec un
cgu=trueetpix-app-terms-of-service-status = "update-requested"sur la route/api/users/me- Quand le FT est désactivé :
-- utilisateur ayant déjà validé les cgu et à jour :
données de départ en base : cgu=true, mustValidateTermsOfService=false
résultat de la tentative de connexion : pas de redirection vers la page des cgu
-- utilisateur ayant déjà validé les cgu et pas à jour :
données de départ en base : cgu=true, mustValidateTermsOfService=true
résultat de la tentative de connexion : redirection vers la page des cgu
//ici le last-terms-of-service-validated-at devient null dans la réponse de
/api/users/me> c'est tout à fait attendu à cause dubuildForLegacyPixAppCguet duuserRepository.getWithPixAppTosStatus-- utilisateur n'ayant jamais validé les cgu et devant les valider (cette situation est a priori théorique, car toute création de compte se fait avec cgu=true) :
données de départ en base : cgu=false, mustValidateTermsOfService=true
résultat de la tentative de correction : redirection vers la page des cgu
//attention ici cgu devient true dans la réponse de
/api/users/me> c'est tout à fait attendu à cause dubuildForLegacyPixAppCguet duuserRepository.getWithPixAppTosStatus-- utilisateur n'ayant jamais validé les cgu et n'ayant pas à les valider (un élève)
données de départ en base :
cgu=false,mustValidateTermsOfService=false,lastTermsOfServiceValidatedAt = nullrésultat de la tentative de connexion : pas de redirection vers la page des cgu
//attention ici cgu devient true dans la réponse de
/api/users/me> c'est tout à fait attendu à cause dubuildForLegacyPixAppCgu