Skip to content

Documentation des Endpoints API Backend

Documentation succinte des endpoints du backend pour les nouveaux développeurs

Base URL : http://localhost:${API_DOCKER_EXPOSED_PORT:-3017}
Swagger : http://localhost:${API_DOCKER_EXPOSED_PORT:-3017}/swagger-api-dema1n

Authentification

Tous les endpoints (sauf ceux explicitement marqués comme publics) nécessitent un token JWT dans le header :

Authorization: Bearer <token>

Rôles disponibles

  • admin : Administrateur standard
  • superadmin : Super administrateur
  • observer : Observateur (lecture seule)
  • jeune : Jeune (utilisateur jeune)
  • benevole : Bénévole (utilisateur bénévole)

Légende

  • Utilisé par le frontend : Endpoint appelé depuis le frontend Nuxt.js
  • ⚠️ Backend uniquement : Endpoint utilisé uniquement en interne ou par des services externes

🔐 Authentification (/auth)

Méthode Endpoint Rôles Description
GET /auth/logout Public Déconnexion (redirection)
GET /auth/me JWT Récupère le profil de l'utilisateur connecté
GET /auth/jwt Public Génère un JWT de test
GET /auth/jwt/:type Public Génère un JWT par type
GET /auth/jwt/sandbox/:sandbox/:type Public Génère un JWT pour sandbox
POST /auth/redirect Public Redirection après SSO
POST /auth/check-password API Key Vérifie email/password (SSO)

👤 Utilisateurs (/user)

Méthode Endpoint Rôles Description Frontend
GET /user JWT Récupère l'utilisateur complet avec relations
GET /user/jeune JWT Récupère l'utilisateur avec profil jeune
GET /user/benevole JWT Récupère l'utilisateur avec profil bénévole
POST /user/activate Public Active un compte avec token
POST /user/activate/A1 Public Activation spécifique A1
GET /user/activate/email/:email Public Récupère utilisateur pour activation
GET /user/email/:email JWT Récupère utilisateur par email
GET /user/credentials/:queryString JWT Recherche utilisateurs par nom/email
PUT /user JWT Met à jour l'utilisateur
POST /user/quit JWT Quitte les binômes (avec raisons)
GET /user/statut JWT Récupère le statut de l'utilisateur
POST /user/checkDuplicatePhone Public Vérifie si le téléphone existe déjà
DELETE /user/:type JWT Supprime un utilisateur (jeune/bénévole)
POST /user/sandbox JWT Change la sandbox d'un utilisateur
POST /user/sync/frontapp/:type Public Synchronise avec FrontApp (dev)
GET /user/unsubscribe/newsletter Public Désabonne de la newsletter
GET /user/front/resetRedis Public Reset Redis (dev) ⚠️
GET /user/front/getRedis Public Récupère valeurs Redis (dev) ⚠️
GET /user/front/synchronize/:id Public Synchronise un utilisateur (dev) ⚠️
POST /user/checkDeleteByMails admin, superadmin Vérifie suppression par emails

👨‍🎓 Jeunes (/jeunes)

Méthode Endpoint Rôles Description Frontend
GET /jeunes admin, superadmin, observer Liste des jeunes (avec filtres multiples)
GET /jeunes/count admin, superadmin, observer Compte le nombre de jeunes
GET /jeunes/:id admin, superadmin, observer Détails d'un jeune
GET /jeunes/:id/logs admin, superadmin, observer Logs d'un jeune
GET /jeunes/conversations/:id admin, superadmin, observer Conversations d'un jeune
GET /jeunes/conversation/:id admin, superadmin, observer Détails d'une conversation
POST /jeunes/overall admin, superadmin, observer Recherche globale avec pagination
POST /jeunes admin, superadmin Création d'un jeune
POST /jeunes/A1 admin, superadmin Création jeune A1 (avec lockReason)
GET /jeunes/checkMail/:email Public Vérifie si l'email existe
GET /jeunes/resend-activation-mail/:email admin, superadmin Renvoie le mail d'activation
POST /jeunes/parent Public Validation parent
POST /jeunes/finish admin, superadmin Finalise l'inscription
PUT /jeunes admin, superadmin Modification d'un jeune
PUT /jeunes/admin admin, superadmin Modification admin d'un jeune
PUT /jeunes/obs observer Modification observateur d'un jeune
PUT /jeunes/ave/:id admin, superadmin Met à jour l'AVE d'un jeune
PUT /jeunes/associate admin, superadmin Associe un jeune à un admin
PUT /jeunes/follow admin, superadmin Suit un jeune
PUT /jeunes/free admin, superadmin Libère un jeune
PUT /jeunes/multiple/follow admin, superadmin Suit plusieurs jeunes
PUT /jeunes/multiple/associate admin, superadmin Associe plusieurs jeunes
PUT /jeunes/multiple/free admin, superadmin Libère plusieurs jeunes
POST /jeunes/multiple/changeStatus admin, superadmin Change le statut de plusieurs jeunes
POST /jeunes/multiple/changeState admin, superadmin Change l'état de plusieurs jeunes
POST /jeunes/multiple/changeStem admin, superadmin Change les infos STEM
POST /jeunes/multiple/sandbox admin, superadmin Change la sandbox de plusieurs jeunes
POST /jeunes/multiple/resa admin, superadmin Réserve plusieurs jeunes
POST /jeunes/changeDispo admin, superadmin Change la disponibilité
POST /jeunes/callMonthDone admin, superadmin Marque l'appel mensuel comme fait
POST /jeunes/stemInfos admin, superadmin Met à jour les infos STEM
GET /jeunes/read/story jeune Marque l'histoire comme lue
GET /jeunes/remove/AP admin, superadmin Supprime les AP (dev) ⚠️
GET /jeunes/update/filiere_secteur admin, superadmin Met à jour filière/secteur (dev) ⚠️
DELETE /jeunes admin, superadmin Suppression d'un jeune
DELETE /jeunes/multiple admin, superadmin Suppression multiple

Filtres disponibles (query params séparés par ;) : - filterRegion, filterDepartment, filterAcademy - filterStatut, filterState - filterFiliere, filterFiliereBac, filterNiveau, filterCursus - filterBesoin, filterBadge, filterSecteur - filterBoursier, filterQpv, filterProgramme - querySearch, queryName, queryOrganisation


👨‍🏫 Bénévoles (/benevoles)

Méthode Endpoint Rôles Description Frontend
GET /benevoles admin, superadmin, observer Liste des bénévoles (avec filtres)
GET /benevoles/count admin, superadmin, observer Compte le nombre de bénévoles
GET /benevoles/:id admin, superadmin, observer Détails d'un bénévole
GET /benevoles/:id/logs admin, superadmin, observer Logs d'un bénévole
GET /benevoles/conversations/:id admin, superadmin, observer Conversations d'un bénévole
GET /benevoles/conversation/:id admin, superadmin, observer Détails d'une conversation
GET /benevoles/binomes/jeune benevole Binômes d'un bénévole (vue jeune)
POST /benevoles/overall admin, superadmin, observer Recherche globale avec pagination
POST /benevoles/A1 admin, superadmin Création bénévole A1
GET /benevoles/checkMail/:email Public Vérifie si l'email existe
GET /benevoles/resend-activation-mail/:userSsoId admin, superadmin Renvoie le mail d'activation
POST /benevoles/finish admin, superadmin Finalise l'inscription
POST /benevoles/formation admin, superadmin Valide la formation
POST /benevoles/seeFormation admin, superadmin Marque la formation comme vue
PUT /benevoles admin, superadmin Modification d'un bénévole
PUT /benevoles/admin admin, superadmin Modification admin d'un bénévole
PUT /benevoles/obs observer Modification observateur d'un bénévole
PUT /benevoles/associate admin, superadmin Associe un bénévole à un admin
PUT /benevoles/follow admin, superadmin Suit un bénévole
PUT /benevoles/free admin, superadmin Libère un bénévole
PUT /benevoles/multiple/follow admin, superadmin Suit plusieurs bénévoles
PUT /benevoles/multiple/free admin, superadmin Libère plusieurs bénévoles
PUT /benevoles/multiple/associate admin, superadmin Associe plusieurs bénévoles
POST /benevoles/multiple/changeStatus admin, superadmin Change le statut de plusieurs bénévoles
POST /benevoles/multiple/changeState admin, superadmin Change l'état de plusieurs bénévoles
POST /benevoles/multiple/sandbox admin, superadmin Change la sandbox de plusieurs bénévoles
POST /benevoles/changeDispo admin, superadmin Change la disponibilité
DELETE /benevoles admin, superadmin Suppression d'un bénévole
DELETE /benevoles/multiple admin, superadmin Suppression multiple

Filtres disponibles : - filterRegion, filterStatut, filterState - filterSecteur, filterCursus, filterFiliere, filterNiveau - filterBesoin, filterBadge, filterCible, filterPosture - filterSuiviAdmin, filterMulti - querySearch, queryName, queryOrganisation


👥 Binômes (/binomes)

Méthode Endpoint Rôles Description Frontend
GET /binomes admin, superadmin, observer Liste des binômes (avec filtres)
GET /binomes/kanban admin, superadmin, observer Liste binômes format Kanban
GET /binomes/count admin, superadmin, observer Compte le nombre de binômes
GET /binomes/:id admin, superadmin, observer Détails d'un binôme
GET /binomes/:id/logs admin, superadmin, observer Logs d'un binôme
GET /binomes/conversations/:id admin, superadmin, observer Conversations d'un binôme
GET /binomes/conversation/:id admin, superadmin, observer Détails d'une conversation
GET /binomes/checkpoint/:type/:id/:step/:hash Public Checkpoint pour réponse email
GET /binomes/impact/url/:binomeId JWT URL d'impact pour l'utilisateur
GET /binomes/impact/binome/:binomeId JWT Impact d'un binôme
POST /binomes admin, superadmin Création d'un binôme
POST /binomes/cancel admin, superadmin Annule un binôme
POST /binomes/cancelbinomes admin, superadmin Annule plusieurs binômes
POST /binomes/terminate admin, superadmin Termine un binôme
POST /binomes/terminatebinomes admin, superadmin Termine plusieurs binômes
POST /binomes/statutbinomes admin, superadmin Change le statut de plusieurs binômes
POST /binomes/statebinomes admin, superadmin Change l'état de plusieurs binômes
POST /binomes/associate admin, superadmin Associe un binôme à un admin
POST /binomes/associatebinomes admin, superadmin Associe plusieurs binômes
POST /binomes/recalculateBinome admin, superadmin Recalcule un binôme
POST /binomes/sandbox admin, superadmin Change la sandbox d'un binôme
POST /binomes/multiple/sandbox admin, superadmin Change la sandbox de plusieurs binômes
POST /binomes/call admin, superadmin Met à jour les appels mensuels
POST /binomes/callInfos admin, superadmin Met à jour les infos d'appel
POST /binomes/sendmultiplepremer admin, superadmin Envoie plusieurs emails PREMER
POST /binomes/readsuivi admin, superadmin Marque un suivi comme lu
POST /binomes/unreadsuivi admin, superadmin Marque un suivi comme non lu
POST /binomes/mailpremer admin, superadmin Renvoie le mail PREMER
POST /binomes/mailimpact admin, superadmin Renvoie le mail d'impact
POST /binomes/readprolongation admin, superadmin Marque une prolongation comme lue
POST /binomes/seevideo admin, superadmin Marque la vidéo jeune comme vue
POST /binomes/readMemo admin, superadmin Marque le mémo bénévole comme lu
POST /binomes/acceptPremer admin, superadmin Accepte PREMER
POST /binomes/denyPremer admin, superadmin Refuse PREMER
PUT /binomes admin, superadmin Modification d'un binôme
GET /binomes/unify/admin admin, superadmin Unifie les admins (dev) ⚠️

Filtres disponibles : - filterStatut, filterRegion, filterCp, filterAdmin, filterState - filterSuivi, filterProgramme, filterAve, filterAveDispo, filterAveYear - filterBadge, filterStem, filterStemAppel, filterFiliereBac - querySearch, queryName, queryOrganisation


🛠️ Administration (/admin)

Méthode Endpoint Rôles Description Frontend
GET /admin/dashboard/benevoles admin, superadmin, observer Stats dashboard bénévoles
GET /admin/dashboard/jeunes admin, superadmin, observer Stats dashboard jeunes
GET /admin/dashboard/binomes admin, superadmin, observer Stats dashboard binômes
GET /admin/all admin, superadmin, observer Liste tous les admins
GET /admin/role/all superadmin Liste admins avec filtres ⚠️
GET /admin/:id admin, superadmin, observer Détails d'un admin
GET /admin/sandbox/admins superadmin Liste sandboxes avec admins
PUT /admin/sandbox/admins/multiple superadmin Ajoute plusieurs admins à des sandboxes
GET /admin/myoptions admin, superadmin, observer Options de l'admin connecté
POST /admin/myoptions admin, superadmin, observer Sauvegarde les options
GET /admin/sequence admin, superadmin Liste des séquences d'étapes ⚠️
GET /admin/template admin, superadmin Liste des templates de messages ⚠️
PUT /admin/sandbox admin, superadmin, observer Change la sandbox d'un utilisateur
PUT /admin/sandbox/multiple admin, superadmin, observer Change sandbox multiple
PUT /admin/profile/multiple admin, superadmin, observer Change profil multiple
POST /admin superadmin Création d'un admin ⚠️
PUT /admin superadmin Modification d'un admin ⚠️
DELETE /admin superadmin Suppression d'un admin ⚠️
DELETE /admin/multiple superadmin Suppression multiple
POST /admin/deletebyIds superadmin Suppression jeunes/bénévoles par IDs

💬 Messages (/messages)

Méthode Endpoint Rôles Description Frontend
GET /messages/:addDays? admin, superadmin Prépare et envoie les messages de suivi (optionnel: +X jours). Retourne le nombre de messages envoyés.

📝 Commentaires (/comments)

Méthode Endpoint Rôles Description Frontend
GET /comments/:id admin, superadmin, observer Récupère un commentaire
GET /comments/jeune/:id admin, superadmin, observer Commentaires d'un jeune
GET /comments/benevole/:id admin, superadmin, observer Commentaires d'un bénévole
POST /comments admin, superadmin, observer Crée un commentaire
POST /comments/binomes admin, superadmin, observer Crée un commentaire sur plusieurs binômes
POST /comments/update admin, superadmin, observer Met à jour un commentaire
DELETE /comments/binome/:id admin, superadmin Supprime un commentaire

📝 Commentaires Individuels (/comments-indiv)

Méthode Endpoint Rôles Description Frontend
GET /comments-indiv/benevole/:id admin, superadmin, observer Commentaires individuels d'un bénévole
POST /comments-indiv/benevole/create admin, superadmin, observer Crée un commentaire individuel bénévole
POST /comments-indiv/benevole/create/multiple admin, superadmin, observer Crée plusieurs commentaires bénévoles
POST /comments-indiv/benevole/update admin, superadmin, observer Met à jour un commentaire bénévole
GET /comments-indiv/jeune/:id admin, superadmin, observer Commentaires individuels d'un jeune
POST /comments-indiv/jeune/create admin, superadmin, observer Crée un commentaire individuel jeune
POST /comments-indiv/jeune/create/multiple admin, superadmin, observer Crée plusieurs commentaires jeunes
POST /comments-indiv/jeune/update admin, superadmin, observer Met à jour un commentaire jeune
DELETE /comments-indiv/:id admin, superadmin, observer Supprime un commentaire individuel

⚡ Flash (/flash)

Méthode Endpoint Rôles Description Frontend
GET /flash/flashList/:tri jeune Liste des flashs disponibles (tri: compatibilite/dispo/reco)
GET /flash/autorization jeune Vérifie l'autorisation flash
POST /flash/book jeune Réserve un créneau flash

📊 Rating (/rating)

Méthode Endpoint Rôles Description Frontend
GET /rating/jeuneList/:id admin, superadmin Liste des jeunes matchables pour un bénévole (avec score)
GET /rating/benevoleList/:id admin, superadmin Liste des bénévoles matchables pour un jeune (avec score)
GET /rating/stopResa/benevole/:id admin, superadmin Arrête la réservation d'un bénévole
GET /rating/stopResa/jeune/:id admin, superadmin Arrête la réservation d'un jeune
GET /rating/autocreate/:nb admin, superadmin Crée automatiquement N binômes

📈 Impact (/impact)

Méthode Endpoint Rôles Description Frontend
GET /impact admin, superadmin, observer Liste tous les impacts

📋 Todo Lists (/todo-lists, /todo-tasks)

Méthode Endpoint Rôles Description Frontend
GET /todo-lists/:id/:userId JWT Récupère les listes pour un binôme
POST /todo-tasks/create JWT Crée une tâche
POST /todo-tasks/create-default JWT Crée une tâche par défaut
PUT /todo-tasks/edit JWT Modifie une tâche
PUT /todo-tasks/edit-default JWT Modifie une tâche par défaut
DELETE /todo-tasks JWT Supprime une tâche

🔔 Notifications (/notifs)

Méthode Endpoint Rôles Description Frontend
GET /notifs admin, superadmin Liste paginée des notifications
POST /notifs/:notifId/read admin, superadmin Marque comme lu
POST /notifs/:notifId/unread admin, superadmin Marque comme non lu

📚 Ressources (/ressources)

Méthode Endpoint Rôles Description Frontend
GET /ressources admin, superadmin, observer Liste des ressources
GET /ressources/:ressourceId admin, superadmin, observer Détails d'une ressource
POST /ressources/creation admin, superadmin Crée une ressource

🎓 Étapes (/steps)

Méthode Endpoint Rôles Description Frontend
GET /steps Public Liste toutes les étapes ⚠️

🎯 Tutoriels (/tutorials)

Méthode Endpoint Rôles Description Frontend
GET /tutorials JWT Liste des tutoriels pour l'utilisateur ⚠️
POST /tutorials JWT Marque un tutoriel comme fait ⚠️

📧 Contact (/contact)

Méthode Endpoint Rôles Description Frontend
POST /contact Public Envoie un message de contact

📬 Email Subscription (/email-subscription)

Méthode Endpoint Rôles Description Frontend
POST /email-subscription Public S'abonne à la newsletter

🤝 Partenaires (/partner)

Méthode Endpoint Rôles Description Frontend
GET /partner/:id Public Détails d'un partenaire

📅 Année (/annee)

Méthode Endpoint Rôles Description Frontend
GET /annee/ admin, superadmin Liste toutes les années
POST /annee/ admin, superadmin Crée une année
DELETE /annee/:id admin, superadmin Supprime une année

🎓 AVE Dispositif (/avedispositif)

Méthode Endpoint Rôles Description Frontend
GET /avedispositif/ admin, superadmin Liste tous les dispositifs AVE
POST /avedispositif/ admin, superadmin Crée un dispositif AVE
DELETE /avedispositif/:id admin, superadmin Supprime un dispositif AVE

🐛 Erreurs (/errors)

Méthode Endpoint Rôles Description Frontend
GET /errors/no-status admin, superadmin, observer Liste jeunes/bénévoles/binômes sans statut
GET /errors/matche-no-binome admin, superadmin, observer Liste MATCHE sans binôme actif
GET /errors/no-matche-binome admin, superadmin, observer Liste avec binôme actif mais pas MATCHE
GET /errors/admin-no-sandbox admin, superadmin, observer Liste ressources sans admin pour sandbox

📨 Réponses (/reponse)

Méthode Endpoint Rôles Description Frontend
POST /reponse Public Répond à un email de suivi
POST /reponse/comment Public Ajoute un commentaire à une réponse
POST /reponse/binome Public Répond pour un binôme
POST /reponse/binome/nondispo Public Répond non disponible pour binôme
GET /reponse/binome/:id/:hashO/:hashN Public Récupère réponse binôme
GET /reponse/impact/:type/:id/:binomeId/:hash Public Récupère formulaire impact
POST /reponse/impact/:userId/:binomeId Public Sauvegarde un impact
POST /reponse/impact/:impactId Public Met à jour un impact
POST /reponse/dashboard admin, superadmin Répond depuis le dashboard
POST /reponse/dashboard/comment admin, superadmin Ajoute commentaire depuis dashboard
POST /reponse/changeDispo/jeune Public Change disponibilité jeune (par hash)
POST /reponse/changeDispo/benevole Public Change disponibilité bénévole (par hash)
POST /reponse/multi/benevole Public Change multi-binôme bénévole (par hash)
POST /reponse/campagne/ete Public Répond à campagne été
POST /reponse/jeune/ignorePremerReason Public Ignore raison PREMER
POST /reponse/code/changeDispo/jeune Public Change disponibilité jeune (par code)
POST /reponse/code/changeDispo/benevole Public Change disponibilité bénévole (par code)
POST /reponse/code/multi/benevole Public Change multi-binôme bénévole (par code)
GET /reponse/code/formation/:code/:id Public Récupère formulaire formation (par code)
POST /reponse/code/formation/:code/:id Public Valide formation (par code)
POST /reponse/code/formation/:code/:id/seeFormation Public Marque formation comme vue (par code)

🔌 API Externe (/api)

Méthode Endpoint Rôles Description Frontend
POST /api/airtable Public Webhook Airtable ⚠️
POST /api/salesforce/accounts API Key Synchronise des comptes Salesforce ⚠️
DELETE /api/salesforce/accounts API Key Supprime des comptes Salesforce ⚠️
GET /api/companies Public Liste des entreprises
POST /api/salesforce/mentors API Key Export mentors (JSON paginé, voir ci-dessous) ⚠️
POST /api/salesforce/jeunes API Key Export jeunes (JSON paginé, voir ci-dessous) ⚠️

🏠 Root (/)

Méthode Endpoint Rôles Description Frontend
GET / Public Health check / Info app ⚠️

Notes importantes

Filtres multiples

La plupart des endpoints de liste acceptent des filtres multiples via query params séparés par ; :

GET /jeunes?filterRegion=IDF;PACA&filterStatut=APTE;EN_ATTENTE

Sandbox

Certains endpoints vérifient la sandbox de l'utilisateur. Les sandboxes disponibles sont définies dans src/common/json/SandboxList.json.

Pagination

Les endpoints de liste peuvent accepter : - page : numéro de page - itemsPerPage : nombre d'éléments par page

Exports Salesforce (POST /api/salesforce/mentors, POST /api/salesforce/jeunes)

Ces routes renvoient du JSON (pas de CSV). L’authentification repose sur les variables d’environnement API_CLIENT et API_KEY côté serveur : le body doit contenir les mêmes valeurs dans apiClient et apiKey, ainsi qu’un objet query optionnel pour la pagination.

Référence code : back/src/binomes/controllers/dto/export-mentors.dto.tsSalesforceExportRequestDto, SalesforceExportQueryDto, ExportMentorDto, ExportJeuneDto, PaginateExportMentors, PaginateExportJeunes.

En cas de problème avec l'export : un problème courant est l'enregistrement buggé de certains jeunes / bénévoles qui ont un champ JSON rempli d'une valeur qui n'est pas du JSON valide (ex. une string brute au lieu d'un tableau), ce qui provoque une erreur Unexpected token ... in JSON at position 0 dans MysqlDriver.prepareHydratedValue. Pour les trouver, exécuter la requête SQL suivante puis corriger les valeurs (ex. remplacer par []) :

SELECT id, 'sectors' AS col, sectors AS val FROM jeune WHERE sectors IS NOT NULL AND sectors NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'filieres', filieres FROM jeune WHERE filieres IS NOT NULL AND filieres NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'reasons_score_engagement', reasons_score_engagement FROM jeune WHERE reasons_score_engagement IS NOT NULL AND reasons_score_engagement NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'besoins', besoins FROM jeune WHERE besoins IS NOT NULL AND besoins NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'temp_besoins', temp_besoins FROM jeune WHERE temp_besoins IS NOT NULL AND temp_besoins NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'passions', passions FROM jeune WHERE passions IS NOT NULL AND passions NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'keywords', keywords FROM jeune WHERE keywords IS NOT NULL AND keywords NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'tutors', tutors FROM jeune WHERE tutors IS NOT NULL AND tutors NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'situations', situations FROM jeune WHERE situations IS NOT NULL AND situations NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'badges', badges FROM jeune WHERE badges IS NOT NULL AND badges NOT REGEXP '^[\\[\\{]'
UNION ALL
SELECT id, 'external_infos', external_infos FROM jeune WHERE external_infos IS NOT NULL AND external_infos NOT REGEXP '^[\\[\\{]';

Pour corriger les données (ex. remplacer une string brute par un tableau JSON valide) :

-- Vérifier d'abord les lignes concernées
SELECT id, filieres FROM jeune WHERE filieres IS NOT NULL AND filieres NOT REGEXP '^\\[';

-- Corriger en wrappant la valeur dans un tableau JSON
UPDATE jeune
SET filieres = CONCAT('["', TRIM(BOTH '"' FROM filieres), '"]')
WHERE filieres IS NOT NULL AND filieres NOT REGEXP '^\\[';

Adapter le nom de colonne (filieres, sectors, etc.) selon les résultats de la requête de détection ci-dessus.

Body attendu (SalesforceExportRequestDto)

Champ Type Description
apiClient string Doit correspondre à API_CLIENT
apiKey string Doit correspondre à API_KEY
query object Optionnel (SalesforceExportQueryDto) — page (défaut 1), take (défaut 100)

Réponse (PaginateExportMentors ou PaginateExportJeunes)

Champ Type Description
statusCode string Ex. "success"
data array Liste des objets export (voir tableau ci-dessous)
count number Nombre d’éléments sur la page courante
total number Nombre total d’enregistrements
currentPage number Page courante
prevPage number | null Page précédente ou null
nextPage number | null Page suivante ou null
lastPage number Dernière page

Objets dans data — mentors (ExportMentorDto)

Champ Type
id string
creationDate date
prenom string
nom string
phone string
email string
statut string
partenaire boolean
entreprise string
intitulePoste string
actuel boolean
region string
age number | null

Objets dans data — jeunes (ExportJeuneDto)

Champ Type Description
id string
creationDate date
prenom string
nom string
phone string
email string
gender string
programme string
niveau string
etablissement string
departementEtablissement string
region string
age number | null
statut string
stem boolean | null null : jeune datant d'avant l'ajout du calcul de stem, false : non, true : oui

Guards spéciaux

  • SandboxGuard : Vérifie que l'utilisateur a accès à la sandbox de la ressource
  • SandboxGuardMultiple : Vérifie l'accès pour plusieurs ressources
  • ExternalGuard : Pour les API externes avec authentification spécifique

Exemples d'utilisation

Récupérer un jeune avec filtres

curl -X GET "http://localhost:3017/jeunes?filterRegion=IDF&filterStatut=APTE" \
  -H "Authorization: Bearer <token>"

Créer un binôme

curl -X POST "http://localhost:3017/binomes" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"jeuneId": "123", "benevoleId": "456", "adminId": "789"}'

Récupérer le profil utilisateur

curl -X GET "http://localhost:3017/user" \
  -H "Authorization: Bearer <token>"

Export jeunes Salesforce (paginé)

curl -X POST "http://localhost:3017/api/salesforce/jeunes" \
  -H "Content-Type: application/json" \
  -d '{"apiClient":"<API_CLIENT>","apiKey":"<API_KEY>","query":{"page":1,"take":100}}'


📊 Statistiques

  • Total d'endpoints documentés : ~150+
  • Endpoints utilisés par le frontend : ~120+ (✅)
  • Endpoints backend uniquement : ~30+ (⚠️)

📖 Partie 2 : Détails des Inputs/Outputs

Cette section détaille pour chaque endpoint principal utilisé par le frontend : - Inputs : Ce qu'il faut envoyer (paramètres, body, query) - Outputs : Ce qu'il renvoie et comment c'est utilisé dans le frontend


👤 Utilisateurs (/user)

GET /user

Inputs : - Headers : Authorization: Bearer <token> (JWT requis) - Aucun paramètre

Outputs : - Retourne un objet User complet avec toutes les relations : - jeune : Profil jeune avec binômes, flashs, etc. - benevole : Profil bénévole avec binômes, cursus, postes, etc. - jeune.binomes : Liste des binômes avec bénévole, admin, stepSequence, suivistatus - benevole.binomes : Liste des binômes avec jeune, admin, stepSequence, suivistatus - jeune.flashs / benevole.flashs : Flashs disponibles - Si alternativeId présent sur un binôme, charge aussi alternativeBinome

Usage frontend : - front/services/user.jsgetFullUser() - Utilisé dans les pages de dashboard pour charger toutes les données utilisateur - Stocké dans le store Vuex pour accès global


POST /user/activate

Inputs : - Body : { token: string } (token d'activation reçu par email)

Outputs : - SuccessResponse : { success: boolean, message: string, errors: string[] } - Si succès : retourne les données utilisateur activé

Usage frontend : - front/services/user.jsfetchActivation(token) - Page d'activation de compte (/compte/activate)


PUT /user

Inputs : - Headers : Authorization: Bearer <token> - Body : { user: User } (objet utilisateur complet à mettre à jour)

Outputs : - Retourne l'objet User mis à jour

Usage frontend : - front/services/user.jsupdateUser(user) - Utilisé pour mettre à jour le profil utilisateur


POST /user/quit

Inputs : - Headers : Authorization: Bearer <token> - Body : { reasons: string[], comments: string }

Outputs : - SuccessResponse

Usage frontend : - front/services/user.jsquitBinomes(reasons, comments) - Permet à un utilisateur de quitter ses binômes


👨‍🎓 Jeunes (/jeunes)

GET /jeunes

Inputs : - Headers : Authorization: Bearer <token> - Query params (tous optionnels, séparés par ; pour multiples) : - filterRegion : string[] (ex: IDF;PACA) - filterDepartment : string[] - filterAcademy : string[] - filterStatut : string[] (ex: APTE;EN_ATTENTE) - filterState : string[] - filterFiliere, filterFiliereBac, filterNiveau, filterCursus : string[] - filterBesoin, filterBadge, filterSecteur : string[] - filterBoursier, filterQpv, filterProgramme : string[] - querySearch : string[] (recherche texte) - queryName : string[] - queryOrganisation : string[] - sortBy : string (tri) - sortDesc : boolean (ordre décroissant)

Outputs : - Retourne un tableau Jeune[] avec toutes les relations nécessaires

Usage frontend : - front/services/jeunes.jsgetAll({ query }) - Utilisé dans les pages de liste des jeunes (/bo/jeunes) - Les filtres sont construits dynamiquement depuis les composants de filtrage


GET /jeunes/:id

Inputs : - Headers : Authorization: Bearer <token> - Paramètre URL : id (ID du jeune)

Outputs : - Retourne un objet Jeune complet avec toutes ses relations

Usage frontend : - front/services/jeunes.jsget(jeuneId) - Utilisé dans les pages de détail d'un jeune (/bo/jeunes/:id)


POST /jeunes

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { user: CreateUserDto, // email, firstName, lastName, birthday, rgpd_accepted, sandbox, newsletter jeune: CreateJeuneDto // first_name, last_name, mail, minor, street_number, legal_representative_phone, // legal_representative_mail, street_name, city_name, city_code, boursier, // boursier_level, type, school_class, school_name, school_region, // school_department, school_cursus, precision, known_by }

Outputs : - SuccessResponse avec success: boolean

Usage frontend : - front/services/jeunes.jspostInscription(user, jeune) - Page d'inscription jeune (/inscription/jeune)


PUT /jeunes

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { jeune: Jeune, // Objet jeune complet à mettre à jour fromJauge?: boolean // Optionnel : indique si vient de la jauge }

Outputs : - Retourne l'objet Jeune mis à jour

Usage frontend : - front/services/jeunes.jsupdateJeune(jeune, fromJauge) - Utilisé pour modifier les informations d'un jeune depuis le BO


POST /jeunes/multiple/changeStatus

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { jeuneIds: string[], // Array d'IDs de jeunes status: string, // Nouveau statut (ex: 'APTE', 'EN_ATTENTE') raisonNonDispo?: string // Optionnel : raison si non disponible }

Outputs : - SuccessResponse

Usage frontend : - front/services/jeunes.jsupdateMultipleJeunes(jeuneIds, status, raisonNonDispo) - Utilisé pour changer le statut de plusieurs jeunes en une fois (sélection multiple)


POST /jeunes/overall

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { searchText: string, // Texte de recherche params: { page: number, limit: number, // itemsPerPage skip: number, sortBy: string, sortDesc: boolean } }

Outputs : - Retourne un objet paginé avec les jeunes correspondants

Usage frontend : - front/services/jeunes.jsfindOverall(searchText, { page, itemsPerPage, skip, sortBy, sortDesc }) - Recherche globale avec pagination dans le BO


👨‍🏫 Bénévoles (/benevoles)

GET /benevoles

Inputs : - Headers : Authorization: Bearer <token> - Query params (similaires à /jeunes) : - filterRegion, filterStatut, filterState - filterSecteur, filterCursus, filterFiliere, filterNiveau - filterBesoin, filterBadge, filterCible, filterPosture - filterSuiviAdmin, filterMulti - querySearch, queryName, queryOrganisation - querySearch recherche dans : user.first_name, user.last_name, user.email, Benevole.precision, Benevole.phone, postes.poste, cursus.diplome

Outputs : - Retourne un tableau Benevole[] avec relations

Usage frontend : - front/services/benevoles.jsgetAll({ query }) - Page de liste des bénévoles (/bo/benevoles)


POST /benevoles/A1

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { user: CreateUserDto, benevole: CreateBenevoleDto // first_name, last_name, mail, phone, major_with_no_criminal_record, // type, department, region, help_type, precision, besoins[], // cursus[], postes[], known_by }

Outputs : - SuccessResponse

Usage frontend : - front/services/benevoles.jspostInscriptionA1(user, benevole) - Inscription bénévole spécifique A1


👥 Binômes (/binomes)

GET /binomes

Inputs : - Headers : Authorization: Bearer <token> - Query params : - filterStatut, filterRegion, filterCp, filterAdmin, filterState - filterSuivi, filterProgramme, filterAve, filterAveDispo, filterAveYear - filterBadge, filterStem, filterStemAppel, filterFiliereBac - querySearch, queryName, queryOrganisation - sortBy, sortDesc

Outputs : - Retourne un tableau Binome[] avec toutes les relations (jeune, bénévole, admin, stepSequence, etc.)

Usage frontend : - front/services/binomes.jsgetAll({ query }) - Page de liste des binômes (/bo/binomes)


GET /binomes/kanban

Inputs : - Headers : Authorization: Bearer <token> - Query params : Similaires à GET /binomes

Outputs : - Retourne les binômes formatés pour un affichage Kanban (groupés par statut)

Usage frontend : - front/services/binomes.jsgetAllKanban({ query }) - Vue Kanban des binômes


POST /binomes

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { binome: { benevole: Benevole | { id: string }, jeune: Jeune | { id: string }, comment?: string, sandbox?: string, highlightedPoste?: string, commentAdmin?: string }, isDoublePropal?: boolean // Optionnel : double proposition }

Outputs : - SuccessResponse avec le binôme créé

Usage frontend : - front/services/binomes.jspostBinome(binome, isDoublePropal) - Création d'un nouveau binôme depuis le BO


POST /binomes/cancel

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { binomeId: string, reason: string, // Raison de l'annulation statutJeune: string, // Nouveau statut du jeune statutBenevole: string, // Nouveau statut du bénévole commentJeune?: string, // Commentaire jeune (optionnel) commentBenevole?: string, // Commentaire bénévole (optionnel) nonDispoUntil?: Date, // Date jusqu'à laquelle non disponible (optionnel) raisonNonDispoJeune?: string, raisonNonDispoBenevole?: string }

Outputs : - SuccessResponse

Usage frontend : - front/services/binomes.jscancelBinome(...) - Annulation d'un binôme depuis le BO


POST /binomes/statutbinomes

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { binomeIds: string[], // Array d'IDs de binômes statut: string // Nouveau statut (ex: 'ACTIF', 'TERMINE') }

Outputs : - SuccessResponse

Usage frontend : - front/services/binomes.jsstatutBinomes(binomeIds, statut) - Changement de statut en masse de plusieurs binômes


POST /binomes/statebinomes

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { binomeIds: string[], state: string, // Nouvel état (ex: 'A traiter') twoDaysReminder?: Date // Optionnel : rappel 2 jours }

Outputs : - SuccessResponse

Usage frontend : - front/services/binomes.jschangeStateBinomes(binomeIds, state, twoDaysReminder) - Changement d'état en masse


🛠️ Administration (/admin)

GET /admin/dashboard/jeunes

Inputs : - Headers : Authorization: Bearer <token> - Aucun paramètre

Outputs :

{
  jeunes: {
    total: number,
    en_attente_activation: number,
    en_attente_parent: number,
    hors_programme: number,
    apte: number,
    matche: number,
    non_disponible: number
  },
  admin: {
    besoins: {},           // Répartition par besoin
    boursier: {},          // Répartition boursiers
    qpv: {                 // Répartition QPV
      QPV: number,
      'Non QPV': number,
      Indeterminé: number
    },
    etablissement: {},     // Répartition par établissement
    cursus: {},            // Répartition par cursus
    filiere: {},           // Répartition par filière
    niveau: {}             // Répartition par niveau
  }
}

Usage frontend : - front/services/admin.js → Utilisé pour les statistiques dashboard - Affiche les métriques principales sur la page d'accueil admin


GET /admin/all

Inputs : - Headers : Authorization: Bearer <token> - Aucun paramètre

Outputs : - Retourne un tableau User[] de tous les administrateurs

Usage frontend : - front/services/admin.jsgetAdmins() - Liste tous les admins pour gestion


POST /admin/myoptions

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { options: { isScrollableDataTable?: boolean, useDnd?: boolean, displayMode?: string, // 'list' | 'kanban' | etc. vip?: boolean, stem?: boolean, linkRegion?: boolean } }

Outputs : - Retourne les options sauvegardées

Usage frontend : - front/services/admin.jssetMyAdminsOptions(options) - Sauvegarde les préférences de l'admin (affichage, filtres, etc.)


📊 Rating (/rating)

GET /rating/jeuneList/:id

Inputs : - Headers : Authorization: Bearer <token> - Paramètre URL : id (ID du bénévole) - Query params (optionnels) : - querySearch : string[] (recherche texte) - queryRegion : string[] (filtre région) - queryScore : string[] (filtre score) - queryEtranger : string[] (filtre étranger)

Outputs : - Retourne un tableau de jeunes matchables avec : - rating : Score de compatibilité (0-100) - ratingDetails : Détails textuels du score - Triés par score décroissant - Limité aux 50 premiers

Usage frontend : - front/services/rating.jsgetJeuneList(benevoleId, { query }) - Page de matching : affiche les jeunes compatibles pour un bénévole - Le score est calculé selon plusieurs critères (localisation, besoins, cursus, etc.)


GET /rating/benevoleList/:id

Inputs : - Headers : Authorization: Bearer <token> - Paramètre URL : id (ID du jeune) - Query params similaires à jeuneList

Outputs : - Retourne un tableau de bénévoles matchables avec rating et ratingDetails - Limité aux 50 premiers

Usage frontend : - front/services/rating.jsgetBenevoleList(jeuneId, { query }) - Page de matching : affiche les bénévoles compatibles pour un jeune


📝 Commentaires (/comments)

POST /comments

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { comment: { binomeId: string, content: string, type?: string, // Type de commentaire // ... autres champs } }

Outputs : - Retourne le commentaire créé

Usage frontend : - front/services/comment.jspostComment(comment) - Ajout d'un commentaire sur un binôme


POST /comments/binomes

Inputs : - Headers : Authorization: Bearer <token> - Body : typescript { binomeIds: string[], // Array d'IDs de binômes comment: { content: string, type?: string } }

Outputs : - Retourne les commentaires créés

Usage frontend : - front/services/comment.jspostCommentBinomes(binomeIds, comment) - Ajout d'un commentaire sur plusieurs binômes en une fois


⚡ Flash (/flash)

GET /flash/flashList/:tri

Inputs : - Headers : Authorization: Bearer <token> (rôle jeune requis) - Paramètre URL : tri ('compatibilite' | 'dispo' | 'reco')

Outputs : - Retourne un tableau de bénévoles avec leurs flashs disponibles : - Triés selon le paramètre tri - Limité aux 6 premiers - Chaque bénévole contient ses flashs[] avec creneauDate

Usage frontend : - front/services/flash.jsflashList(tri) - Page flash jeune : affiche les créneaux disponibles - Le tri compatibilite calcule un score de compatibilité - Le tri dispo trie par date de premier créneau disponible - Le tri reco combine compatibilité + disponibilité


POST /flash/book

Inputs : - Headers : Authorization: Bearer <token> (rôle jeune requis) - Body : typescript { flashId: string, // ID du créneau flash precisions?: string // Optionnel : précisions du jeune }

Outputs : - SuccessResponse

Usage frontend : - front/services/flash.jsbook(flashId, precisions) - Réservation d'un créneau flash par un jeune


📨 Réponses (/reponse)

POST /reponse

Inputs : - Body (public, pas de JWT requis) : typescript { actif: string, // '0' = inactif, '1' = actif/RAS, '2' = inactif à clôturer hash: string, // Hash de sécurité du mail id: string, // ID jeune ou bénévole type: string, // 'jeune' | 'benevole' dayStep?: number // Optionnel : étape du jour }

Outputs : - SuccessResponse avec message indiquant le checkpoint (CP1, CP2, CP3, CP4)

Usage frontend : - front/services/reponse.jspostReponse(actif, hash, id, type, dayStep) - Page de réponse email (/reponse/:type/:id/:actif/:hash) - Permet de répondre aux emails de suivi directement depuis le mail - Le hash garantit la sécurité et l'authenticité du lien


POST /reponse/comment

Inputs : - Body : typescript { hash: string, id: string, type: string, comment: string, // Commentaire de l'utilisateur dayStep?: number, actif?: string }

Outputs : - SuccessResponse

Usage frontend : - front/services/reponse.jspostComment(hash, id, type, comment, dayStep, actif) - Ajout d'un commentaire après avoir répondu à un email de suivi


GET /reponse/impact/:type/:id/:binomeId/:hash

Inputs : - Paramètre URL : - type : 'jeune' | 'benevole' - id : ID de l'utilisateur - binomeId : ID du binôme - hash : Hash de sécurité

Outputs :

{
  success: boolean,
  user: User,              // Utilisateur concerné
  besoins?: string[],      // Besoins si jeune
  impact?: Impact          // Impact existant si déjà rempli
}

Usage frontend : - front/services/reponse.jsfetchImpact(type, id, hash, binomeId) - Page de formulaire d'impact (/impact/:type/:id/:binomeId) - Charge le formulaire d'évaluation d'un binôme


POST /reponse/impact/:userId/:binomeId

Inputs : - Body : typescript { hash: string, type: string, impact: { score: number, // Score de 1 à 5 reponse: string, // Réponse textuelle // ... autres champs du formulaire } }

Outputs : - SuccessResponse

Usage frontend : - front/services/reponse.jssaveImpact(hash, type, userId, impact, binomeId) - Sauvegarde l'évaluation d'un binôme


🔔 Notifications (/notifs)

GET /notifs

Inputs : - Headers : Authorization: Bearer <token> (admin requis) - Query params : - itemsPerPage : number (nombre par page) - page : number (numéro de page)

Outputs :

{
  items: Notif[],         // Tableau de notifications
  total: number           // Nombre total de notifications
}

Usage frontend : - front/services/notifs.jsgetNotifs(itemsPerPage, page) - Page de notifications admin (/bo/admin/notifs) - Affichage paginé des notifications


POST /notifs/:notifId/read

Inputs : - Headers : Authorization: Bearer <token> - Paramètre URL : notifId (ID de la notification)

Outputs : - Retourne la Notif mise à jour avec read: true

Usage frontend : - front/services/notifs.jsreadNotif(notifId) - Marque une notification comme lue


📚 Ressources (/ressources)

GET /ressources

Inputs : - Headers : Authorization: Bearer <token> - Aucun paramètre

Outputs : - Retourne un tableau Ressource[] avec toutes les ressources disponibles

Usage frontend : - front/services/ressource.jsgetAll() - Page ressources (/compte/ressources) - Affiche les ressources pédagogiques disponibles


📧 Contact (/contact)

POST /contact

Inputs : - Body (public, pas de JWT requis) : typescript { message: { name: string, email: string, subject: string, content: string } }

Outputs : - SuccessResponse

Usage frontend : - front/services/contact.jspostSendMessage(message) - Formulaire de contact public - Envoie un email à l'équipe


📬 Email Subscription (/email-subscription)

POST /email-subscription

Inputs : - Body (public) : typescript { email: string }

Outputs : - SuccessResponse

Usage frontend : - front/services/email-subscription.jspostSave(email) - Formulaire d'inscription à la newsletter - Ajoute l'email à la liste de diffusion


Notes sur les réponses communes

SuccessResponse

Structure standard pour les réponses de succès/échec :

{
  success: boolean,
  message: string,
  errors: string[]
}

Erreurs HTTP

  • 401 : Non authentifié → Redirection vers /compte/connexion
  • 403 : Accès refusé → Redirection vers /compte/connexion?acces-reserve
  • 400 : Requête invalide → Message d'erreur affiché
  • 404 : Ressource non trouvée
  • 500 : Erreur serveur → Message générique affiché

Gestion des erreurs frontend

Le service front/services/api.js intercepte automatiquement les erreurs : - 401/403 : Déconnexion automatique et redirection - Autres erreurs : Propagation pour gestion dans les composants


Dernière mise à jour : Générée automatiquement depuis les controllers NestJS et vérifiée avec le frontend