Aller au contenu

Intégration internal-api

L’internal-api est le back-office Symfony / Doctrine d’erevo (API Platform), consommé par le monorepo via des clients tRPC. La facturation s’y appuie pour lire l’état réel des sessions et des étudiants, et pour persister les dossiers de facturation.

Le client (librairies/trpc/src/context/internal-api-client) est une instance Axios pointant sur {internalApiUrl}{internalApiSuffix} (p. ex. https://api.example.com/api/v1), avec l’en-tête X-AUTH-TOKEN. Côté billing, l’URL et la clé proviennent de REACT_APP_INTERNAL_API_URL / REACT_APP_INTERNAL_API_KEY.

EndpointMéthodeUsage
/sessions/listPOSTRécupérer les sessions par identifiants de transaction HubSpot
/sessions/{id}/dispatchGETRécupérer une session complète
/sessions?student.user.id=…GETSessions d’un utilisateur (self-funded)
/sessions?crmID[]=…GETRécupération par lot par id de deal (confirmation webhook FIFPL)
/session_documents?session.id[]=…&documentSlug=signatureGETDocuments de signature
/consent_approbations?…GETConsentements e-signature (statut, clé S3, journaux de signature)
/training_leafs?version.reference=…GETFeuilles de formation (génération des relevés d’activité)
/virtual_classes?sessionDate.id=…GETDonnées de classe virtuelle (traitement des journaux)
/billing_files/{id}PATCHMettre à jour le dossier de facturation (numéro de facture, avoir…)

Les structures principales : SessionAPIFull (étudiant avec crmId, noms DPC/FIFPL, date et nom de naissance ; produit ; dates ; activités), FundingAPIFull (configuration financeur), ConsentApprobationAPI (consentement signé, clé S3, PDF, journaux), VirtualClassAPI (formateurs, modules, dates de session associées).

Point clé de l’automatisation FIFPL : la facturation écrit dans HubSpot, mais les noms FIFPL ne deviennent corrects côté session qu’après la descente HubSpot → internal-api, opérée par un webhook asynchrone.

C’est pourquoi, après la synchro, l’app interroge l’internal-api en boucle (/sessions?crmID[]=…) jusqu’à voir les noms attendus sur la session (nameFieldsMatch). Sans cette confirmation, relancer la mutation serait un no-op et la suite du parcours resterait bloquée.

  • Client de contexte : librairies/trpc/src/context/internal-api-client/index.ts (base URL + X-AUTH-TOKEN).
  • Contrôleurs tRPC consommateurs : librairies/trpc/src/controller/billing/index.ts (getSessionsByCRMIds, getSingleSession, getSessionsDocuments, getSessionsByCrmIdFilter, getConsentApprobations, updateBillingFileBillNumber, generateDocumentProps).
  • Persistance du dossier : le billing_file est sauvegardé avec ses médias (IRIs des PDF uploadés) — voir Documents & signatures.