EventLinx — synchronisation des événements Salesforce (Linx)
Module NestJS qui synchronise les événements Salesforce (objet Campaign) vers la table event_linx, et expose une API pour le front jeune et le back-office.
Flux de synchronisation
- Token OAuth2 :
POST {LINX_BASE_URL}oauth2/token(grant_type=password+client_id,client_secret,username,password—LINX_PASSWORD= mot de passe + jeton de sécurité Salesforce concaténés). - Fetch :
GET {LINX_BASE_URL}data/v61.0/query/?q=<SOQL>avec bearer token. SOQL :Campaignfiltré surRecordTypeId = '012IV000002dcVhYAI', champsId,Name,Categorie__c,StartDate,Physique_ou_Digital__c,RecordTypeId,Region_campagne__c,Ville__c,Lien_inscription__c,Publie_calendrier_jeunes__c. - Réconciliation :
- création si nouvel
idLinx - mise à jour de tous les champs mappés si changement
- restore si event soft-deleted réapparu
- soft-delete si absent du fetch (uniquement si fetch réussi et non vide)
- événement sans
StartDateignoré (la colonnestart_dateest obligatoire) ; sonIdreste dans le fetch pour ne pas le soft-delete - Normalisation région : matching tolérant contre la liste canonique (
Region.js), sinon valeur brute conservée. - Visibilité calendrier (
publie_calendrier_jeunes) : seuls les événements publiés (true) sont renvoyés aux jeunes, quel que soit leur programme. - Lien d'inscription (
url/Lien_inscription__c) : seuls les événements avec une URL non vide sont listés côté jeune (GET /event-linx) et back-office (GET /event-linx/admin). - Visibilité jeune (endpoint
GET /event-linxauthentifié) : - un jeune PNP voit uniquement les événements digitaux, dans toutes les régions ;
- un jeune PP voit les événements digitaux de toutes les régions ainsi que les événements présentiels de sa région (
schoolRegion) et les événements nationaux ; - un programme absent ou inconnu applique les règles PNP.
Affichage jeune (dashboard v2 + liste)
Le dashboard (/compte/jeune/dashboard/v2) et la page liste (/compte/jeune/dashboard/events) appellent le même endpoint avec les mêmes filtres de visibilité. Le dashboard affiche les 3 prochains événements à venir (tous mois confondus), du plus proche non passé au plus loin (sort=ASC). La page liste filtre par mois (month=YYYY-MM, mois courant par défaut) avec le même ordre.
Le titre affiché au jeune retire un tiret initial et une date JJ-MM-AAAA en fin de nom Salesforce (ex. - Atelier - 01-06-2027). La date reste dans le méta de la carte. Le back-office conserve le nom brut.
Champs mappés (Campaign → event_linx)
| Salesforce | Colonne BDD |
|---|---|
Id |
id_linx |
Name |
name |
StartDate |
start_date |
Region_campagne__c |
region (normalisée) |
Lien_inscription__c |
url |
Categorie__c |
thematique |
Physique_ou_Digital__c |
format (Physique | Digital) |
Ville__c |
ville |
Publie_calendrier_jeunes__c |
publie_calendrier_jeunes |
Endpoints
| Méthode | Route | Auth | Description |
|---|---|---|---|
| GET | /event-linx |
JWT | Liste paginée/filtrée des événements publiés à venir — filtres : thematique, format (presentiel → Physique, digital → Digital), name, month ; visibilité région/format selon le programme et la schoolRegion du jeune |
| GET | /event-linx/regions |
JWT | Régions distinctes en base |
| GET | /event-linx/user?email= |
JWT + admin | Events utilisateur (bruts Salesforce, non stockés) |
| POST | /event-linx/sync |
JWT + admin | Synchro manuelle |