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

  1. Token OAuth2 : POST {LINX_BASE_URL}oauth2/token (grant_type=password + client_id, client_secret, username, passwordLINX_PASSWORD = mot de passe + jeton de sécurité Salesforce concaténés).
  2. Fetch : GET {LINX_BASE_URL}data/v61.0/query/?q=<SOQL> avec bearer token. SOQL : Campaign filtré sur RecordTypeId = '012IV000002dcVhYAI', champs Id, Name, ThematiqueEVT__c, StartDate, Physique_ou_Digital__c, RecordTypeId, Region_campagne__c, Ville__c, Lien_inscription__c, Publie_calendrier_jeunes__c.
  3. Réconciliation :
  4. création si nouvel idLinx
  5. mise à jour de tous les champs mappés si changement
  6. restore si event soft-deleted réapparu
  7. soft-delete si absent du fetch (uniquement si fetch réussi et non vide)
  8. Normalisation région : matching tolérant contre la liste canonique (Region.js), sinon valeur brute conservée.
  9. Visibilité calendrier (publie_calendrier_jeunes) : par défaut, seuls les événements publiés (true) sont renvoyés. Les jeunes programmes PP et EL voient aussi les événements non publiés (false / null).
  10. 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).

Champs mappés (Campaignevent_linx)

Salesforce Colonne BDD
Id id_linx
Name name
StartDate start_date
Region_campagne__c region (normalisée)
Lien_inscription__c url
ThematiqueEVT__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 (à venir uniquement) — filtres : region, thematique, format (presentielPhysique, digitalDigital), name, month
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