From 4feb8772f21a647c06922050e5de48e453f8e39d Mon Sep 17 00:00:00 2001 From: Malek Zemni Date: Wed, 6 Dec 2023 22:15:03 +0100 Subject: [PATCH 1/4] feat(migration-structures-milo): clean up --- package.json | 5 +- .../mettre-a-jour-agences-milo.js | 30 -- .../mettre-a-jour-doublons-agences-milo.js | 30 -- src/app.module.ts | 418 +++++++++--------- ...nce-animation-collective.job.handler.db.ts | 90 ---- src/domain/planificateur.ts | 7 - ...el-agences.js => 1-referentiel-agences.js} | 0 ...1-referentiel-communes-et-departements.js} | 0 ...lo.js => 1-referentiel-structures-milo.js} | 0 .../{5-conseiller.js => 2-conseiller.js} | 0 .../seeders/{6-jeune.js => 3-jeune.js} | 0 .../seeders/{7-action.js => 4-action.js} | 0 .../{9-recherche.js => 4-recherche.js} | 0 .../{8-rendez-vous.js => 4-rendez-vous.js} | 0 .../seeders/data/agences_milo_170223.json | 16 - ...nimation-collective.job.handler.db.test.ts | 148 ------- .../clients/suivi-job.service.db.test.ts | 8 +- 17 files changed, 214 insertions(+), 538 deletions(-) delete mode 100644 scripts/data-migrations/mettre-a-jour-agences-milo.js delete mode 100644 scripts/data-migrations/mettre-a-jour-doublons-agences-milo.js delete mode 100644 src/application/jobs/maj-agence-animation-collective.job.handler.db.ts rename src/infrastructure/sequelize/seeders/{2-referentiel-agences.js => 1-referentiel-agences.js} (100%) rename src/infrastructure/sequelize/seeders/{3-referentiel-communes-et-departements.js => 1-referentiel-communes-et-departements.js} (100%) rename src/infrastructure/sequelize/seeders/{4-referentiel-structures-milo.js => 1-referentiel-structures-milo.js} (100%) rename src/infrastructure/sequelize/seeders/{5-conseiller.js => 2-conseiller.js} (100%) rename src/infrastructure/sequelize/seeders/{6-jeune.js => 3-jeune.js} (100%) rename src/infrastructure/sequelize/seeders/{7-action.js => 4-action.js} (100%) rename src/infrastructure/sequelize/seeders/{9-recherche.js => 4-recherche.js} (100%) rename src/infrastructure/sequelize/seeders/{8-rendez-vous.js => 4-rendez-vous.js} (100%) delete mode 100644 src/infrastructure/sequelize/seeders/data/agences_milo_170223.json delete mode 100644 test/application/jobs/maj-agence-animation-collective.job.handler.db.test.ts diff --git a/package.json b/package.json index e8d79ede4..2f4e7f5b2 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "migration": "sequelize db:migrate", "psql": "docker compose exec apidb psql -h localhost -d passemploidb -U passemploi ", "seed": "sequelize db:seed:undo:all && sequelize db:seed:all", - "seed:referentiel": "sequelize db:seed:undo --seed 20211201160540-referentiel-communes-et-departements.js && sequelize db:seed --seed 20211201160540-referentiel-communes-et-departements.js && sequelize db:seed:undo --seed 20220420160540-referentiel-agences.js && sequelize db:seed --seed 20220420160540-referentiel-agences.js && sequelize db:seed:undo --seed 20221004160540-referentiel-rome.js && sequelize db:seed --seed 20221004160540-referentiel-rome.js", - "seed:referentiel:metiers": "sequelize db:seed:undo --seed 20221004160540-referentiel-rome.js && sequelize db:seed --seed 20221004160540-referentiel-rome.js", + "seed:referentiel": "sequelize db:seed:undo --seed 1-referentiel-communes-et-departements.js && sequelize db:seed --seed 1-referentiel-communes-et-departements.js && sequelize db:seed:undo --seed 1-referentiel-agences.js && sequelize db:seed --seed 1-referentiel-agences.js && sequelize db:seed:undo --seed 1-referentiel-rome.js && sequelize db:seed --seed 1-referentiel-rome.js", + "seed:referentiel:metiers": "sequelize db:seed:undo --seed 1-referentiel-rome.js && sequelize db:seed --seed 1-referentiel-rome.js", "start": "yarn start:pg:db && nest start", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", @@ -56,7 +56,6 @@ "tasks:nettoyer-les-pieces-jointes": "IS_WEB=false TASK_NAME=NETTOYER_LES_PIECES_JOINTES node dist/main", "tasks:nettoyer-les-donnees": "IS_WEB=false TASK_NAME=NETTOYER_LES_DONNEES node dist/main", "tasks:notifier-rendez-vous-pe": "IS_WEB=false TASK_NAME=NOTIFIER_RENDEZVOUS_PE node dist/main", - "tasks:maj-agences-ac": "IS_WEB=false TASK_NAME=MAJ_AGENCE_AC node dist/main", "tasks:maj-segments": "IS_WEB=false TASK_NAME=MAJ_SEGMENTS node dist/main", "tasks:monitorer-jobs": "IS_WEB=false TASK_NAME=MONITORER_JOBS node dist/main", "tasks:suivre-events-milo": "IS_WEB=false TASK_NAME=SUIVRE_FILE_EVENEMENTS_MILO node dist/main", diff --git a/scripts/data-migrations/mettre-a-jour-agences-milo.js b/scripts/data-migrations/mettre-a-jour-agences-milo.js deleted file mode 100644 index 9edfa4b90..000000000 --- a/scripts/data-migrations/mettre-a-jour-agences-milo.js +++ /dev/null @@ -1,30 +0,0 @@ -require('dotenv').config() -const { Sequelize } = require('sequelize') -const sequelize = new Sequelize(process.env.DATABASE_URL) - -const agencesMilo = require('../../src/infrastructure/sequelize/seeders/data/agences_milo_170223.json') - -sequelize.transaction(async transaction => { - for (const { - id, - nom_agence, - nom_region, - code_departement, - structure - } of agencesMilo) { - await sequelize.query( - `INSERT INTO agence (id, nom_agence, nom_region, code_departement, structure) VALUES (?, ?, ?, ?, ?)`, - { - replacements: [ - id, - nom_agence, - nom_region, - code_departement, - structure, - nom_agence - ], - transaction - } - ) - } -}) diff --git a/scripts/data-migrations/mettre-a-jour-doublons-agences-milo.js b/scripts/data-migrations/mettre-a-jour-doublons-agences-milo.js deleted file mode 100644 index 3cbdd0d04..000000000 --- a/scripts/data-migrations/mettre-a-jour-doublons-agences-milo.js +++ /dev/null @@ -1,30 +0,0 @@ -require('dotenv').config() -const { Sequelize } = require('sequelize') -const sequelize = new Sequelize(process.env.DATABASE_URL) - -const agencesDoublons = require('./agences_doublons_170223.json') - -sequelize.transaction(async transaction => { - for (const { id_agence_doublon, id_agence_cible } of agencesDoublons) { - await sequelize.query( - `UPDATE rendez_vous SET id_agence = ? WHERE id_agence = ?`, - { - replacements: [id_agence_cible, id_agence_doublon], - transaction - } - ) - - await sequelize.query( - `UPDATE conseiller SET id_agence = ? WHERE id_agence = ?`, - { - replacements: [id_agence_cible, id_agence_doublon], - transaction - } - ) - - await sequelize.query(`DELETE FROM agence WHERE id = ?`, { - replacements: [id_agence_doublon], - transaction - }) - } -}) diff --git a/src/app.module.ts b/src/app.module.ts index 316843620..8fdea9963 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -11,78 +11,195 @@ import { import { ConfigModule } from '@nestjs/config' import { APP_GUARD } from '@nestjs/core' import { TerminusModule } from '@nestjs/terminus' +import { EmargementSessionMiloCommandHandler } from 'src/application/commands/milo/emargement-session-milo.command.handler' +import { GetAgendaSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db' +import { GetDetailSessionConseillerMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db' +import { GetDetailSessionJeuneMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-jeune.milo.query.handler.db' +import { GetSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db' +import { GetSessionsJeuneMiloQueryHandler } from 'src/application/queries/milo/get-sessions-jeune.milo.query.handler.db' +import { EvenementEmploiCodePostalQueryGetter } from 'src/application/queries/query-getters/evenement-emploi-code-postal.query.getter' +import { GetSessionsJeuneMiloQueryGetter } from 'src/application/queries/query-getters/milo/get-sessions-jeune.milo.query.getter.db' +import { AppMobileCacheControlMiddleware } from 'src/infrastructure/middlewares/app-mobile-cache-control.middleware' import { ActionAuthorizer } from './application/authorizers/action-authorizer' import { ConseillerAuthorizer } from './application/authorizers/conseiller-authorizer' +import { ConseillerInterAgenceAuthorizer } from './application/authorizers/conseiller-inter-agence-authorizer' +import { ConseillerInterStructureMiloAuthorizer } from './application/authorizers/conseiller-inter-structure-milo-authorizer' import { FavoriOffresEmploiAuthorizer } from './application/authorizers/favori-offres-emploi-authorizer' import { FavoriOffreServiceCiviqueAuthorizer } from './application/authorizers/favori-offres-engagement-authorizer' import { FavoriOffresImmersionAuthorizer } from './application/authorizers/favori-offres-immersion-authorizer' +import { FichierAuthorizer } from './application/authorizers/fichier-authorizer' import { JeuneAuthorizer } from './application/authorizers/jeune-authorizer' +import { ListeDeDiffusionAuthorizer } from './application/authorizers/liste-de-diffusion-authorizer' import { RechercheAuthorizer } from './application/authorizers/recherche-authorizer' import { RendezVousAuthorizer } from './application/authorizers/rendezvous-authorizer' +import { SuggestionAuthorizer } from './application/authorizers/suggestion-authorizer' import { SupportAuthorizer } from './application/authorizers/support-authorizer' +import { AddCommentaireActionCommandHandler } from './application/commands/action/add-commentaire-action.command.handler' +import { CreateActionCommandHandler } from './application/commands/action/create-action.command.handler' +import { DeleteActionCommandHandler } from './application/commands/action/delete-action.command.handler' +import { QualifierActionCommandHandler } from './application/commands/action/qualifier-action.command.handler' +import { UpdateStatutActionCommandHandler } from './application/commands/action/update-statut-action.command.handler' import { AddFavoriOffreEmploiCommandHandler } from './application/commands/add-favori-offre-emploi.command.handler' -import { AddFavoriOffreServiceCiviqueCommandHandler } from './application/commands/add-favori-offre-service-civique.command.handler' import { AddFavoriOffreImmersionCommandHandler } from './application/commands/add-favori-offre-immersion.command.handler' -import { CreateActionCommandHandler } from './application/commands/action/create-action.command.handler' +import { AddFavoriOffreServiceCiviqueCommandHandler } from './application/commands/add-favori-offre-service-civique.command.handler' +import { ArchiverJeuneCommandHandler } from './application/commands/archiver-jeune.command.handler' +import { CreateCampagneCommandHandler } from './application/commands/campagne/create-campagne.command' +import { CreateEvaluationCommandHandler } from './application/commands/campagne/create-evaluation.command' +import { CloturerAnimationCollectiveCommandHandler } from './application/commands/cloturer-animation-collective.command.handler' +import { DeleteConseillerCommandHandler } from './application/commands/conseiller/delete-conseiller.command.handler' import { CreateEvenementCommandHandler } from './application/commands/create-evenement.command.handler' +import { CreateListeDeDiffusionCommandHandler } from './application/commands/create-liste-de-diffusion.command.handler' +import { CreateRechercheFromSuggestionCommandHandler } from './application/commands/create-recherche-from-suggestion.command.handler' import { CreateRechercheCommandHandler } from './application/commands/create-recherche.command.handler' import { CreateRendezVousCommandHandler } from './application/commands/create-rendez-vous.command.handler' +import { CreateSuggestionConseillerImmersionCommandHandler } from './application/commands/create-suggestion-conseiller-immersion.command.handler' +import { CreateSuggestionConseillerOffreEmploiCommandHandler } from './application/commands/create-suggestion-conseiller-offre-emploi.command.handler' +import { CreateSuggestionConseillerServiceCiviqueCommandHandler } from './application/commands/create-suggestion-conseiller-service-civique.command.handler' import { CreerJeuneMiloCommandHandler } from './application/commands/creer-jeune-milo.command.handler' import { CreerJeunePoleEmploiCommandHandler } from './application/commands/creer-jeune-pole-emploi.command.handler' import { CreerSuperviseursCommandHandler } from './application/commands/creer-superviseurs.command.handler' -import { DeleteActionCommandHandler } from './application/commands/action/delete-action.command.handler' import { DeleteFavoriOffreEmploiCommandHandler } from './application/commands/delete-favori-offre-emploi.command.handler' -import { DeleteFavoriOffreServiceCiviqueCommandHandler } from './application/commands/delete-favori-offre-service-civique.command.handler' import { DeleteFavoriOffreImmersionCommandHandler } from './application/commands/delete-favori-offre-immersion.command.handler' +import { DeleteFavoriOffreServiceCiviqueCommandHandler } from './application/commands/delete-favori-offre-service-civique.command.handler' import { DeleteJeuneInactifCommandHandler } from './application/commands/delete-jeune-inactif.command.handler' +import { DeleteJeuneCommandHandler } from './application/commands/delete-jeune.command.handler' import { DeleteListeDeDiffusionCommandHandler } from './application/commands/delete-liste-de-diffusion.command.handler' import { DeleteRechercheCommandHandler } from './application/commands/delete-recherche.command.handler' import { DeleteRendezVousCommandHandler } from './application/commands/delete-rendez-vous.command.handler.db' import { DeleteSuperviseursCommandHandler } from './application/commands/delete-superviseurs.command.handler' +import { CreateDemarcheCommandHandler } from './application/commands/demarche/create-demarche.command.handler' +import { UpdateStatutDemarcheCommandHandler } from './application/commands/demarche/update-demarche.command.handler' import { EnvoyerMessageGroupeCommandHandler } from './application/commands/envoyer-message-groupe.command.handler' +import { EnvoyerFormulaireContactImmersionCommandHandler } from './application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' +import { MettreAJourLesJeunesCejPeCommandHandler } from './application/commands/mettre-a-jour-les-jeunes-cej-pe.command.handler' +import { UpdateSessionMiloCommandHandler } from './application/commands/milo/update-session-milo.command.handler' +import { ModifierConseillerCommandHandler } from './application/commands/modifier-conseiller.command.handler' +import { ModifierJeuneDuConseillerCommandHandler } from './application/commands/modifier-jeune-du-conseiller.command.handler' import { NotifierNouvellesImmersionsCommandHandler } from './application/commands/notifier-nouvelles-immersions.command.handler' +import { RafraichirSuggestionsCommandHandler } from './application/commands/rafraichir-suggestions.command.handler' +import { RecupererJeunesDuConseillerCommandHandler } from './application/commands/recuperer-jeunes-du-conseiller.command.handler' +import { RefreshJddCommandHandler } from './application/commands/refresh-jdd.command.handler' +import { RefuserSuggestionCommandHandler } from './application/commands/refuser-suggestion.command.handler' import { SendNotificationsNouveauxMessagesExternesCommandHandler } from './application/commands/send-notifications-nouveaux-messages-externes.command.handler' import { SendNotificationsNouveauxMessagesCommandHandler } from './application/commands/send-notifications-nouveaux-messages.command.handler' -import { NettoyerEvenementsChargesAnalyticsJobHandler } from './application/jobs/analytics/1bis-nettoyer-les-evenements-charges.job.handler.db' -import { PlanifierExecutionCronCommandHandler } from './application/tasks/planifier-execution-cron.command.handler' -import { InitCronsCommandHandler } from './application/tasks/init-crons.command' -import { SynchronizeJobsCommandHandler } from './application/tasks/synchronize-jobs.command' +import { ArchiverJeuneSupportCommandHandler } from './application/commands/support/archiver-jeune-support.command.handler' +import { UpdateAgenceConseillerCommandHandler } from './application/commands/support/update-agence-conseiller.command.handler' +import { SupprimerFichierCommandHandler } from './application/commands/supprimer-fichier.command.handler' +import { TeleverserFichierCommandHandler } from './application/commands/televerser-fichier.command.handler' import { TransfererJeunesConseillerCommandHandler } from './application/commands/transferer-jeunes-conseiller.command.handler' import { UpdateJeuneConfigurationApplicationCommandHandler } from './application/commands/update-jeune-configuration-application.command.handler' -import { UpdateStatutActionCommandHandler } from './application/commands/action/update-statut-action.command.handler' +import { UpdateListeDeDiffusionCommandHandler } from './application/commands/update-liste-de-diffusion.command.handler' +import { UpdateJeunePreferencesCommandHandler } from './application/commands/update-preferences-jeune.command.handler' +import { UpdateRendezVousCommandHandler } from './application/commands/update-rendez-vous.command.handler' import { UpdateUtilisateurCommandHandler } from './application/commands/update-utilisateur.command.handler' -import { TeleverserFichierCommandHandler } from './application/commands/televerser-fichier.command.handler' -import { GetActionsPredefiniesQueryHandler } from './application/queries/action/get-actions-predefinies.query.handler' -import { GetJeunesIdentitesQueryHandler } from './application/queries/get-jeunes-identites.query.handler.db' -import { Context } from './building-blocks/context' +import { DumpForAnalyticsJobHandler } from './application/jobs/analytics/0-dump-for-analytics.job' +import { ChargerEvenementsJobHandler } from './application/jobs/analytics/1-charger-les-evenements.job' +import { NettoyerEvenementsChargesAnalyticsJobHandler } from './application/jobs/analytics/1bis-nettoyer-les-evenements-charges.job.handler.db' +import { EnrichirEvenementsJobHandler } from './application/jobs/analytics/2-enrichir-les-evenements.job' +import { ChargerLesVuesJobHandler } from './application/jobs/analytics/3-charger-les-vues.job' +import { InitialiserLesVuesJobHandler } from './application/jobs/analytics/initialiser-les-vues.job' +import { EnvoyerEmailsMessagesConseillersJobHandler } from './application/jobs/envoyer-emails-messages-conseillers.job.handler' +import { FakeJobHandler } from './application/jobs/fake.job.handler' +import { HandleJobGenererJDDCommandHandler } from './application/jobs/generer-jdd.job.handler' +import { MajCodesEvenementsJobHandler } from './application/jobs/maj-codes-evenements.job.handler' +import { MajMailingListConseillerJobHandler } from './application/jobs/maj-mailing-list-conseiller.job.handler' +import { MajSegmentsJobHandler } from './application/jobs/maj-segments.job.handler.db' +import { MonitorJobsJobHandler } from './application/jobs/monitor-jobs.job.handler.db' +import { NettoyerLesDonneesJobHandler } from './application/jobs/nettoyer-les-donnees.job.handler.db' +import { NettoyerLesJobsJobHandler } from './application/jobs/nettoyer-les-jobs.job.handler' +import { NettoyerPiecesJointesJobHandler } from './application/jobs/nettoyer-pieces-jointes.job.handler' +import { NotifierRappelActionJobHandler } from './application/jobs/notifier-rappel-action.job.handler' +import { NotifierRappelInstanceSessionMiloJobHandler } from './application/jobs/notifier-rappel-instance-session-milo.job.handler' +import { NotifierRappelRendezVousJobHandler } from './application/jobs/notifier-rappel-rendez-vous.job.handler' +import { NotifierRecherchesOffreEmploiJobHandler } from './application/jobs/notifier-recherches-offre-emploi.job.handler' +import { NotifierRecherchesServiceCiviqueJobHandler } from './application/jobs/notifier-recherches-service-civique.job.handler' +import { NotifierRendezVousPEJobHandler } from './application/jobs/notifier-rendez-vous-pole-emploi.job.handler' +import { RecupererSituationsJeunesMiloJobHandler } from './application/jobs/recuperer-situations-jeunes-milo.job.handler' +import { SuivreEvenementsMiloCronJobHandler } from './application/jobs/suivre-file-evenements-milo.job.handler' +import { TraiterEvenementMiloJobHandler } from './application/jobs/traiter-evenement-milo.job.handler' +import { GetAccueilJeuneMiloQueryHandler } from './application/queries/accueil/get-accueil-jeune-milo.query.handler.db' +import { GetAccueilJeunePoleEmploiQueryHandler } from './application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db' +import { GetActionsConseillerV2QueryHandler } from './application/queries/action/get-actions-conseiller-v2.query.handler.db' import { GetActionsJeuneQueryHandler } from './application/queries/action/get-actions-jeune.query.handler.db' +import { GetActionsPredefiniesQueryHandler } from './application/queries/action/get-actions-predefinies.query.handler' +import { GetCommentairesActionQueryHandler } from './application/queries/action/get-commentaires-action.query.handler.db' +import { GetDetailActionQueryHandler } from './application/queries/action/get-detail-action.query.handler.db' +import { GetResumeActionsDesJeunesDuConseillerQueryHandlerDb } from './application/queries/action/get-resume-actions-des-jeunes-du-conseiller.query.handler.db' +import { GetTypesQualificationsQueryHandler } from './application/queries/action/get-types-qualifications.query.handler' +import { GetFavorisJeuneQueryHandler } from './application/queries/favoris/get-favoris-jeune.query.handler.db' +import { GetMetadonneesFavorisJeuneQueryHandler } from './application/queries/favoris/get-metadonnees-favoris-jeune.query.handler.db' +import { GetAgencesQueryHandler } from './application/queries/get-agences.query.handler.db' +import { GetCatalogueDemarchesQueryHandler } from './application/queries/get-catalogue-demarches.query.handler' import { GetChatSecretsQueryHandler } from './application/queries/get-chat-secrets.query.handler' import { GetCommunesEtDepartementsQueryHandler } from './application/queries/get-communes-et-departements.query.handler.db' -import { GetConseillersQueryHandler } from './application/queries/get-conseillers.query.handler.db' import { GetConseillersJeuneQueryHandler } from './application/queries/get-conseillers-jeune.query.handler.db' -import { GetDetailActionQueryHandler } from './application/queries/action/get-detail-action.query.handler.db' +import { GetConseillersQueryHandler } from './application/queries/get-conseillers.query.handler.db' +import { GetCVPoleEmploiQueryHandler } from './application/queries/get-cv-pole-emploi.query.handler' +import { GetDemarchesQueryHandler } from './application/queries/get-demarches.query.handler' import { GetDetailConseillerQueryHandler } from './application/queries/get-detail-conseiller.query.handler.db' import { GetDetailJeuneQueryHandler } from './application/queries/get-detail-jeune.query.handler.db' +import { GetDetailListeDeDiffusionQueryHandler } from './application/queries/get-detail-liste-de-diffusion.query.handler.db' import { GetDetailOffreEmploiQueryHandler } from './application/queries/get-detail-offre-emploi.query.handler' import { GetDetailOffreImmersionQueryHandler } from './application/queries/get-detail-offre-immersion.query.handler' -import { GetDetailRendezVousQueryHandler } from './application/queries/rendez-vous/get-detail-rendez-vous.query.handler.db' import { GetDetailOffreServiceCiviqueQueryHandler } from './application/queries/get-detail-offre-service-civique.query.handler' +import { GetDiagorienteMetiersFavorisQueryHandler } from './application/queries/get-diagoriente-metiers-favoris.query.handler' +import { GetDiagorienteUrlsQueryHandler } from './application/queries/get-diagoriente-urls.query.handler' import { GetDossierMiloJeuneQueryHandler } from './application/queries/get-dossier-milo-jeune.query.handler' +import { GetEvenementEmploiQueryHandler } from './application/queries/get-evenement-emploi.query.handler' +import { GetEvenementsEmploiQueryHandler } from './application/queries/get-evenements-emploi.query.handler' import { GetFavorisOffresEmploiJeuneQueryHandler } from './application/queries/get-favoris-offres-emploi-jeune.query.handler.db' import { GetFavorisOffresImmersionJeuneQueryHandler } from './application/queries/get-favoris-offres-immersion-jeune.query.handler.db' +import { GetFavorisServiceCiviqueJeuneQueryHandler } from './application/queries/get-favoris-service-civique-jeune.query.handler.db' import { GetHomeJeuneHandler } from './application/queries/get-home-jeune.query.handler' +import { GetIndicateursPourConseillerQueryHandler } from './application/queries/get-indicateurs-pour-conseiller.query.handler.db' +import { GetJeuneHomeActionsQueryHandler } from './application/queries/get-jeune-home-actions.query.handler' +import { GetJeuneHomeAgendaQueryHandler } from './application/queries/get-jeune-home-agenda.query.handler.db' +import { GetJeuneHomeDemarchesQueryHandler } from './application/queries/get-jeune-home-demarches.query.handler' +import { GetJeuneMiloByDossierQueryHandler } from './application/queries/get-jeune-milo-by-dossier.query.handler.db' import { GetJeunesByConseillerQueryHandler } from './application/queries/get-jeunes-by-conseiller.query.handler.db' +import { GetJeunesByEtablissementQueryHandler } from './application/queries/get-jeunes-by-etablissement.query.handler.db' +import { GetJeunesEtablissementV2QueryHandler } from './application/queries/get-jeunes-etablissement-v2.query.handler.db' +import { GetJeunesIdentitesQueryHandler } from './application/queries/get-jeunes-identites.query.handler.db' +import { GetListesDeDiffusionDuConseillerQueryHandler } from './application/queries/get-listes-de-diffusion-du-conseiller.query.handler.db' +import { GetMetiersRomeQueryHandler } from './application/queries/get-metiers-rome.query.handler.db' +import { GetMotifsSuppressionJeuneQueryHandler } from './application/queries/get-motifs-suppression-jeune.query.handler' import { GetOffresEmploiQueryHandler } from './application/queries/get-offres-emploi.query.handler' import { GetOffresImmersionQueryHandler } from './application/queries/get-offres-immersion.query.handler' +import { GetOffresServicesCiviqueQueryHandler } from './application/queries/get-offres-services-civique.query.handler' +import { GetPreferencesJeuneQueryHandler } from './application/queries/get-preferences-jeune.handler.db' import { GetRecherchesQueryHandler } from './application/queries/get-recherches.query.handler.db' +import { GetSuggestionsQueryHandler } from './application/queries/get-suggestions.query.handler.db' +import { GetSuiviSemainePoleEmploiQueryHandler } from './application/queries/get-suivi-semaine-pole-emploi.query.handler' +import { GetJeunesByStructureMiloQueryHandler } from './application/queries/milo/get-jeunes-by-structure-milo.query.handler.db' +import { GetSessionsConseillerMiloV2QueryHandler } from './application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db' +import { GetFavorisAccueilQueryGetter } from './application/queries/query-getters/accueil/get-favoris.query.getter.db' +import { GetRecherchesSauvegardeesQueryGetter } from './application/queries/query-getters/accueil/get-recherches-sauvegardees.query.getter.db' +import { FindAllOffresEmploiQueryGetter } from './application/queries/query-getters/find-all-offres-emploi.query.getter' +import { FindAllOffresImmersionQueryGetter } from './application/queries/query-getters/find-all-offres-immersion.query.getter' +import { FindAllOffresServicesCiviqueQueryGetter } from './application/queries/query-getters/find-all-offres-services-civique.query.getter' +import { GetCampagneQueryGetter } from './application/queries/query-getters/get-campagne.query.getter' +import { GetSessionsConseillerMiloQueryGetter } from './application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db' +import { GetSessionsConseillerMiloV2QueryGetter } from './application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db' +import { GetDemarchesQueryGetter } from './application/queries/query-getters/pole-emploi/get-demarches.query.getter' +import { GetRendezVousJeunePoleEmploiQueryGetter } from './application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter' +import { RechercherTypesDemarcheQueryHandler } from './application/queries/rechercher-types-demarche.query.handler' +import { GetAnimationsCollectivesJeuneQueryHandler } from './application/queries/rendez-vous/get-animations-collectives-jeune.query.handler.db' +import { GetAnimationsCollectivesV2QueryHandler } from './application/queries/rendez-vous/get-animations-collectives-v2.query.handler.db' +import { GetAnimationsCollectivesQueryHandler } from './application/queries/rendez-vous/get-animations-collectives.query.handler.db' +import { GetDetailRendezVousQueryHandler } from './application/queries/rendez-vous/get-detail-rendez-vous.query.handler.db' +import { GetRendezVousConseillerPaginesQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-conseiller-pagines.query.handler.db' import { GetAllRendezVousConseillerQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-conseiller.query.handler.db' import { GetRendezVousJeunePoleEmploiQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-jeune-pole-emploi.query.handler' import { GetRendezVousJeuneQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-jeune.query.handler.db' -import { GetResumeActionsDesJeunesDuConseillerQueryHandlerDb } from './application/queries/action/get-resume-actions-des-jeunes-du-conseiller.query.handler.db' -import { GetOffresServicesCiviqueQueryHandler } from './application/queries/get-offres-services-civique.query.handler' import { GetTypesRendezVousQueryHandler } from './application/queries/rendez-vous/get-types-rendez-vous.query.handler' +import { GetUnRendezVousJeuneQueryHandler } from './application/queries/rendez-vous/get-un-rendez-vous-jeune.query.handler.db' +import { TelechargerFichierQueryHandler } from './application/queries/telecharger-fichier.query.handler' import { TaskService } from './application/task.service' +import { InitCronsCommandHandler } from './application/tasks/init-crons.command' +import { PlanifierExecutionCronCommandHandler } from './application/tasks/planifier-execution-cron.command.handler' +import { SynchronizeJobsCommandHandler } from './application/tasks/synchronize-jobs.command' import { WorkerService } from './application/worker.service.db' +import { Context } from './building-blocks/context' import configuration from './config/configuration' import { Action, @@ -90,15 +207,20 @@ import { ActionsRepositoryToken, CommentaireActionRepositoryToken } from './domain/action/action' +import { AgenceRepositoryToken } from './domain/agence' +import { ArchiveJeuneRepositoryToken } from './domain/archive-jeune' import { Authentification, AuthentificationRepositoryToken } from './domain/authentification' +import { Campagne, CampagneRepositoryToken } from './domain/campagne' import { ChatRepositoryToken } from './domain/chat' import { Conseiller, ConseillersRepositoryToken } from './domain/conseiller/conseiller' +import { ListeDeDiffusionRepositoryToken } from './domain/conseiller/liste-de-diffusion' +import { Demarche, DemarcheRepositoryToken } from './domain/demarche' import { EvenementService, EvenementsRepositoryToken } from './domain/evenement' import { Fichier, FichierRepositoryToken } from './domain/fichier' import { @@ -107,259 +229,136 @@ import { JeunePoleEmploiRepositoryToken, JeunesRepositoryToken } from './domain/jeune/jeune' +import { Mail, MailRepositoryToken, MailServiceToken } from './domain/mail' +import { ConseillerMiloRepositoryToken } from './domain/milo/conseiller.milo.db' +import { EvenementMiloRepositoryToken } from './domain/milo/evenement.milo' +import { MiloJeuneRepositoryToken } from './domain/milo/jeune.milo' +import { + RendezVousMilo, + RendezVousMiloRepositoryToken +} from './domain/milo/rendez-vous.milo' +import { SessionMiloRepositoryToken } from './domain/milo/session.milo' import { Notification, NotificationRepositoryToken } from './domain/notification/notification' import { OffresEmploiRepositoryToken } from './domain/offre/favori/offre-emploi' -import { OffreServiceCiviqueRepositoryToken } from './domain/offre/favori/offre-service-civique' import { FavorisOffresImmersionRepositoryToken } from './domain/offre/favori/offre-immersion' -import { - PlanificateurRepositoryToken, - PlanificateurService -} from './domain/planificateur' +import { OffreServiceCiviqueRepositoryToken } from './domain/offre/favori/offre-service-civique' import { Recherche, RecherchesRepositoryToken } from './domain/offre/recherche/recherche' +import { SuggestionPoleEmploiService } from './domain/offre/recherche/suggestion/pole-emploi.service' +import { + Suggestion, + SuggestionsPoleEmploiRepositoryToken, + SuggestionsRepositoryToken +} from './domain/offre/recherche/suggestion/suggestion' +import { + PlanificateurRepositoryToken, + PlanificateurService +} from './domain/planificateur' +import { AnimationCollectiveRepositoryToken } from './domain/rendez-vous/animation-collective' +import { HistoriqueRendezVousRepositoryToken } from './domain/rendez-vous/historique' import { RendezVous, RendezVousRepositoryToken } from './domain/rendez-vous/rendez-vous' -import { SuperviseursRepositoryToken } from './domain/superviseur' import { SuiviJobServiceToken } from './domain/suivi-job' +import { SuperviseursRepositoryToken } from './domain/superviseur' import { ApiKeyAuthGuard } from './infrastructure/auth/api-key.auth-guard' import { JwtService } from './infrastructure/auth/jwt.service' import { OidcAuthGuard } from './infrastructure/auth/oidc.auth-guard' +import { BigqueryClient } from './infrastructure/clients/bigquery.client' +import { DiagorienteClient } from './infrastructure/clients/diagoriente-client' import { EngagementClient } from './infrastructure/clients/engagement-client' import { FirebaseClient } from './infrastructure/clients/firebase-client' import { ImmersionClient } from './infrastructure/clients/immersion-client' -import { DiagorienteClient } from './infrastructure/clients/diagoriente-client' +import { InvitationIcsClient } from './infrastructure/clients/invitation-ics.client' import { KeycloakClient } from './infrastructure/clients/keycloak-client' import { MailSendinblueService } from './infrastructure/clients/mail-sendinblue.service' +import { MatomoClient } from './infrastructure/clients/matomo-client' +import { MiloClient } from './infrastructure/clients/milo-client' import { ObjectStorageClient } from './infrastructure/clients/object-storage.client' import { PoleEmploiClient } from './infrastructure/clients/pole-emploi-client' +import { + PoleEmploiPartenaireClient, + PoleEmploiPartenaireClientToken, + PoleEmploiPartenaireInMemoryClient +} from './infrastructure/clients/pole-emploi-partenaire-client' import { SuiviJobService } from './infrastructure/clients/suivi-job.service.db' +import { ActionMiloHttpRepository } from './infrastructure/repositories/action/action-milo-http-sql.repository' import { ActionSqlRepository } from './infrastructure/repositories/action/action-sql.repository.db' +import { CommentaireActionSqlRepositoryDb } from './infrastructure/repositories/action/commentaire-action-sql.repository.db' +import { AgenceSqlRepository } from './infrastructure/repositories/agence-sql.repository.db' +import { ArchiveJeuneSqlRepository } from './infrastructure/repositories/archive-jeune-sql.repository.db' import { AuthentificationSqlRepository } from './infrastructure/repositories/authentification-sql.repository.db' +import { CampagneSqlRepository } from './infrastructure/repositories/campagne-sql.repository.db' import { ChatFirebaseRepository } from './infrastructure/repositories/chat-firebase.repository' import { ConseillerSqlRepository } from './infrastructure/repositories/conseiller-sql.repository.db' +import { ListeDeDiffusionSqlRepository } from './infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db' +import { DemarcheHttpRepository } from './infrastructure/repositories/demarche-http.repository' import { EvenementSqlRepository } from './infrastructure/repositories/evenement-sql.repository.db' import { FichierSqlS3Repository } from './infrastructure/repositories/fichier-sql-s3.repository.db' import { JeuneConfigurationApplicationSqlRepository } from './infrastructure/repositories/jeune/jeune-configuration-application-sql.repository.db' +import { JeunePoleEmploiSqlRepository } from './infrastructure/repositories/jeune/jeune-pole-emploi-sql.repository.db' import { JeuneSqlRepository } from './infrastructure/repositories/jeune/jeune-sql.repository.db' import { MailSqlRepository } from './infrastructure/repositories/mail-sql.repository.db' +import { ConseillerMiloSqlRepository } from './infrastructure/repositories/milo/conseiller.milo.repository.db' +import { EvenementMiloHttpRepository } from './infrastructure/repositories/milo/evenement-milo-http.repository' import { MiloJeuneHttpSqlRepository } from './infrastructure/repositories/milo/jeune-milo-http-sql.repository.db' +import { RendezVousMiloHttpRepository } from './infrastructure/repositories/milo/rendez-vous-milo-http.repository' +import { SessionMiloHttpSqlRepository } from './infrastructure/repositories/milo/session-milo-http-sql.repository.db' import { NotificationFirebaseRepository } from './infrastructure/repositories/notification-firebase.repository' import { OffresEmploiHttpSqlRepository } from './infrastructure/repositories/offre/offre-emploi-http-sql.repository.db' -import { OffreServiceCiviqueHttpSqlRepository } from './infrastructure/repositories/offre/offre-service-civique-http.repository.db' import { FavorisOffresImmersionSqlRepository } from './infrastructure/repositories/offre/offre-immersion-http-sql.repository.db' -import { PlanificateurRedisRepository } from './infrastructure/repositories/planificateur-redis.repository.db' +import { OffreServiceCiviqueHttpSqlRepository } from './infrastructure/repositories/offre/offre-service-civique-http.repository.db' import { RechercheSqlRepository } from './infrastructure/repositories/offre/recherche/recherche-sql.repository.db' +import { SuggestionPeHttpRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-pe-http.repository.db' +import { SuggestionSqlRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-sql.repository.db' +import { PlanificateurRedisRepository } from './infrastructure/repositories/planificateur-redis.repository.db' +import { AnimationCollectiveSqlRepository } from './infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db' +import { HistoriqueRendezVousRepositorySql } from './infrastructure/repositories/rendez-vous/historique-rendez-vous.repository.db' import { RendezVousRepositorySql } from './infrastructure/repositories/rendez-vous/rendez-vous-sql.repository.db' import { SuperviseurSqlRepository } from './infrastructure/repositories/superviseur-sql.repository.db' import { ActionsController } from './infrastructure/routes/actions.controller' import { AuthentificationController } from './infrastructure/routes/authentification.controller' +import { CampagnesController } from './infrastructure/routes/campagnes.controller' import { ConseillersController } from './infrastructure/routes/conseillers.controller' +import { ConseillersMiloController } from './infrastructure/routes/conseillers.milo.controller' import { ConseillersPoleEmploiController } from './infrastructure/routes/conseillers.pole-emploi.controller' +import { DiagorienteController } from './infrastructure/routes/diagoriente.controller' +import { EtablissementsController } from './infrastructure/routes/etablissements.controller' +import { EvenementsEmploiController } from './infrastructure/routes/evenements-emploi.controller' import { EvenementsController } from './infrastructure/routes/evenements.controller' import { FavorisController } from './infrastructure/routes/favoris.controller' +import { FilesController } from './infrastructure/routes/fichiers.controller' import { HealthController } from './infrastructure/routes/health.controller' import { JeunesController } from './infrastructure/routes/jeunes.controller' import { JeunesMiloController } from './infrastructure/routes/jeunes.milo.controller' -import { JeunesControllerV2 } from './infrastructure/routes/v2/jeunes.controller.v2' -import { ConseillersControllerV2 } from './infrastructure/routes/v2/conseillers.controller.v2' +import { JeunesPoleEmploiController } from './infrastructure/routes/jeunes.pole-emploi.controller' +import { ListesDeDiffusionController } from './infrastructure/routes/listes-de-diffusion.controller' +import { MessagesController } from './infrastructure/routes/messages.controller' import { OffresEmploiController } from './infrastructure/routes/offres-emploi.controller' import { OffresImmersionController } from './infrastructure/routes/offres-immersion.controller' -import { RecherchesJeunesController } from './infrastructure/routes/recherches-jeunes.controller' import { RecherchesConseillersController } from './infrastructure/routes/recherches-conseillers.controller' +import { RecherchesJeunesController } from './infrastructure/routes/recherches-jeunes.controller' import { ReferentielsController } from './infrastructure/routes/referentiels.controller' import { RendezVousController } from './infrastructure/routes/rendez-vous.controller' import { ServicesCiviqueController } from './infrastructure/routes/services-civique.controller' +import { StructuresMiloController } from './infrastructure/routes/structures-milo.controller' +import { SupportController } from './infrastructure/routes/support.controller' +import { ConseillersControllerV2 } from './infrastructure/routes/v2/conseillers.controller.v2' +import { ConseillersMiloControllerv2 } from './infrastructure/routes/v2/conseillers.milo.controller.v2' +import { EtablissementsControllerV2 } from './infrastructure/routes/v2/etablissements.controller.v2' +import { JeunesControllerV2 } from './infrastructure/routes/v2/jeunes.controller.v2' import { databaseProviders } from './infrastructure/sequelize/providers' +import { ChatCryptoService } from './utils/chat-crypto-service' import { DateService } from './utils/date-service' import { IdService } from './utils/id-service' import { configureLoggerModule } from './utils/logger.module' -import { - PoleEmploiPartenaireClient, - PoleEmploiPartenaireClientToken, - PoleEmploiPartenaireInMemoryClient -} from './infrastructure/clients/pole-emploi-partenaire-client' -import { GetDemarchesQueryHandler } from './application/queries/get-demarches.query.handler' -import { GetCatalogueDemarchesQueryHandler } from './application/queries/get-catalogue-demarches.query.handler' -import { GetJeuneMiloByDossierQueryHandler } from './application/queries/get-jeune-milo-by-dossier.query.handler.db' -import { UpdateRendezVousCommandHandler } from './application/commands/update-rendez-vous.command.handler' -import { InvitationIcsClient } from './infrastructure/clients/invitation-ics.client' -import { Mail, MailRepositoryToken, MailServiceToken } from './domain/mail' -import { ChatCryptoService } from './utils/chat-crypto-service' -import { DeleteJeuneCommandHandler } from './application/commands/delete-jeune.command.handler' -import { AgenceRepositoryToken } from './domain/agence' -import { AgenceSqlRepository } from './infrastructure/repositories/agence-sql.repository.db' -import { GetAgencesQueryHandler } from './application/queries/get-agences.query.handler.db' -import { ModifierConseillerCommandHandler } from './application/commands/modifier-conseiller.command.handler' -import { GetFavorisServiceCiviqueJeuneQueryHandler } from './application/queries/get-favoris-service-civique-jeune.query.handler.db' -import { RecupererSituationsJeunesMiloJobHandler } from './application/jobs/recuperer-situations-jeunes-milo.job.handler' -import { CampagnesController } from './infrastructure/routes/campagnes.controller' -import { Campagne, CampagneRepositoryToken } from './domain/campagne' -import { CampagneSqlRepository } from './infrastructure/repositories/campagne-sql.repository.db' -import { CreateCampagneCommandHandler } from './application/commands/campagne/create-campagne.command' -import { GetJeuneHomeDemarchesQueryHandler } from './application/queries/get-jeune-home-demarches.query.handler' -import { GetJeuneHomeActionsQueryHandler } from './application/queries/get-jeune-home-actions.query.handler' -import { GetCampagneQueryGetter } from './application/queries/query-getters/get-campagne.query.getter' -import { CreateEvaluationCommandHandler } from './application/commands/campagne/create-evaluation.command' -import { DemarcheHttpRepository } from './infrastructure/repositories/demarche-http.repository' -import { Demarche, DemarcheRepositoryToken } from './domain/demarche' -import { UpdateStatutDemarcheCommandHandler } from './application/commands/demarche/update-demarche.command.handler' -import { CreateDemarcheCommandHandler } from './application/commands/demarche/create-demarche.command.handler' -import { RechercherTypesDemarcheQueryHandler } from './application/queries/rechercher-types-demarche.query.handler' -import { FilesController } from './infrastructure/routes/fichiers.controller' -import { TelechargerFichierQueryHandler } from './application/queries/telecharger-fichier.query.handler' -import { SupprimerFichierCommandHandler } from './application/commands/supprimer-fichier.command.handler' -import { FichierAuthorizer } from './application/authorizers/fichier-authorizer' -import { FindAllOffresEmploiQueryGetter } from './application/queries/query-getters/find-all-offres-emploi.query.getter' -import { FindAllOffresImmersionQueryGetter } from './application/queries/query-getters/find-all-offres-immersion.query.getter' -import { FindAllOffresServicesCiviqueQueryGetter } from './application/queries/query-getters/find-all-offres-services-civique.query.getter' -import { RecupererJeunesDuConseillerCommandHandler } from './application/commands/recuperer-jeunes-du-conseiller.command.handler' -import { ArchiverJeuneCommandHandler } from './application/commands/archiver-jeune.command.handler' -import { ArchiveJeuneRepositoryToken } from './domain/archive-jeune' -import { ArchiveJeuneSqlRepository } from './infrastructure/repositories/archive-jeune-sql.repository.db' -import { GetMotifsSuppressionJeuneQueryHandler } from './application/queries/get-motifs-suppression-jeune.query.handler' import { RateLimiterService } from './utils/rate-limiter.service' -import { UpdateJeunePreferencesCommandHandler } from './application/commands/update-preferences-jeune.command.handler' -import { GetPreferencesJeuneQueryHandler } from './application/queries/get-preferences-jeune.handler.db' -import { GetRendezVousConseillerPaginesQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-conseiller-pagines.query.handler.db' -import { GetFavorisJeuneQueryHandler } from './application/queries/favoris/get-favoris-jeune.query.handler.db' -import { GetMetadonneesFavorisJeuneQueryHandler } from './application/queries/favoris/get-metadonnees-favoris-jeune.query.handler.db' -import { AddCommentaireActionCommandHandler } from './application/commands/action/add-commentaire-action.command.handler' -import { ModifierJeuneDuConseillerCommandHandler } from './application/commands/modifier-jeune-du-conseiller.command.handler' -import { CommentaireActionSqlRepositoryDb } from './infrastructure/repositories/action/commentaire-action-sql.repository.db' -import { GetCommentairesActionQueryHandler } from './application/queries/action/get-commentaires-action.query.handler.db' -import { GetJeuneHomeAgendaQueryHandler } from './application/queries/get-jeune-home-agenda.query.handler.db' -import { JeunePoleEmploiSqlRepository } from './infrastructure/repositories/jeune/jeune-pole-emploi-sql.repository.db' -import { GetTypesQualificationsQueryHandler } from './application/queries/action/get-types-qualifications.query.handler' -import { ActionMiloHttpRepository } from './infrastructure/repositories/action/action-milo-http-sql.repository' -import { QualifierActionCommandHandler } from './application/commands/action/qualifier-action.command.handler' -import { GetSuiviSemainePoleEmploiQueryHandler } from './application/queries/get-suivi-semaine-pole-emploi.query.handler' -import { GetDemarchesQueryGetter } from './application/queries/query-getters/pole-emploi/get-demarches.query.getter' -import { GetRecherchesSauvegardeesQueryGetter } from './application/queries/query-getters/accueil/get-recherches-sauvegardees.query.getter.db' -import { GetRendezVousJeunePoleEmploiQueryGetter } from './application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter' -import { GetIndicateursPourConseillerQueryHandler } from './application/queries/get-indicateurs-pour-conseiller.query.handler.db' -import { NettoyerLesDonneesJobHandler } from './application/jobs/nettoyer-les-donnees.job.handler.db' -import { RafraichirSuggestionsCommandHandler } from './application/commands/rafraichir-suggestions.command.handler' -import { SuggestionPeHttpRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-pe-http.repository.db' -import { - Suggestion, - SuggestionsPoleEmploiRepositoryToken, - SuggestionsRepositoryToken -} from './domain/offre/recherche/suggestion/suggestion' -import { SuggestionSqlRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-sql.repository.db' -import { GetSuggestionsQueryHandler } from './application/queries/get-suggestions.query.handler.db' -import { SuggestionPoleEmploiService } from './domain/offre/recherche/suggestion/pole-emploi.service' -import { RefuserSuggestionCommandHandler } from './application/commands/refuser-suggestion.command.handler' -import { CreateRechercheFromSuggestionCommandHandler } from './application/commands/create-recherche-from-suggestion.command.handler' -import { SuggestionAuthorizer } from './application/authorizers/suggestion-authorizer' -import { GetMetiersRomeQueryHandler } from './application/queries/get-metiers-rome.query.handler.db' -import { CreateSuggestionConseillerOffreEmploiCommandHandler } from './application/commands/create-suggestion-conseiller-offre-emploi.command.handler' -import { CreateSuggestionConseillerServiceCiviqueCommandHandler } from './application/commands/create-suggestion-conseiller-service-civique.command.handler' -import { CreateSuggestionConseillerImmersionCommandHandler } from './application/commands/create-suggestion-conseiller-immersion.command.handler' -import { EtablissementsController } from './infrastructure/routes/etablissements.controller' -import { EtablissementsControllerV2 } from './infrastructure/routes/v2/etablissements.controller.v2' -import { ConseillerInterAgenceAuthorizer } from './application/authorizers/conseiller-inter-agence-authorizer' -import { AnimationCollectiveSqlRepository } from './infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db' -import { HistoriqueRendezVousRepositorySql } from './infrastructure/repositories/rendez-vous/historique-rendez-vous.repository.db' -import { CloturerAnimationCollectiveCommandHandler } from './application/commands/cloturer-animation-collective.command.handler' -import { GetAnimationsCollectivesQueryHandler } from './application/queries/rendez-vous/get-animations-collectives.query.handler.db' -import { GetAnimationsCollectivesV2QueryHandler } from './application/queries/rendez-vous/get-animations-collectives-v2.query.handler.db' -import { AnimationCollectiveRepositoryToken } from './domain/rendez-vous/animation-collective' -import { HistoriqueRendezVousRepositoryToken } from './domain/rendez-vous/historique' -import { GetAnimationsCollectivesJeuneQueryHandler } from './application/queries/rendez-vous/get-animations-collectives-jeune.query.handler.db' -import { GetUnRendezVousJeuneQueryHandler } from './application/queries/rendez-vous/get-un-rendez-vous-jeune.query.handler.db' -import { CreateListeDeDiffusionCommandHandler } from './application/commands/create-liste-de-diffusion.command.handler' -import { ListeDeDiffusionSqlRepository } from './infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db' -import { ListeDeDiffusionRepositoryToken } from './domain/conseiller/liste-de-diffusion' -import { GetListesDeDiffusionDuConseillerQueryHandler } from './application/queries/get-listes-de-diffusion-du-conseiller.query.handler.db' -import { ListesDeDiffusionController } from './infrastructure/routes/listes-de-diffusion.controller' -import { ListeDeDiffusionAuthorizer } from './application/authorizers/liste-de-diffusion-authorizer' -import { UpdateListeDeDiffusionCommandHandler } from './application/commands/update-liste-de-diffusion.command.handler' -import { GetDetailListeDeDiffusionQueryHandler } from './application/queries/get-detail-liste-de-diffusion.query.handler.db' -import { MajAgenceAnimationCollectiveJobHandler } from './application/jobs/maj-agence-animation-collective.job.handler.db' -import { BigqueryClient } from './infrastructure/clients/bigquery.client' -import { MessagesController } from './infrastructure/routes/messages.controller' -import { SupportController } from './infrastructure/routes/support.controller' -import { RefreshJddCommandHandler } from './application/commands/refresh-jdd.command.handler' -import { RendezVousMiloHttpRepository } from './infrastructure/repositories/milo/rendez-vous-milo-http.repository' -import { EvenementMiloHttpRepository } from './infrastructure/repositories/milo/evenement-milo-http.repository' -import { TraiterEvenementMiloJobHandler } from './application/jobs/traiter-evenement-milo.job.handler' -import { - RendezVousMiloRepositoryToken, - RendezVousMilo -} from './domain/milo/rendez-vous.milo' -import { MiloJeuneRepositoryToken } from './domain/milo/jeune.milo' -import { MettreAJourLesJeunesCejPeCommandHandler } from './application/commands/mettre-a-jour-les-jeunes-cej-pe.command.handler' -import { UpdateAgenceConseillerCommandHandler } from './application/commands/support/update-agence-conseiller.command.handler' -import { GetActionsConseillerV2QueryHandler } from './application/queries/action/get-actions-conseiller-v2.query.handler.db' -import { DiagorienteController } from './infrastructure/routes/diagoriente.controller' -import { GetDiagorienteUrlsQueryHandler } from './application/queries/get-diagoriente-urls.query.handler' -import { ArchiverJeuneSupportCommandHandler } from './application/commands/support/archiver-jeune-support.command.handler' -import { GetDiagorienteMetiersFavorisQueryHandler } from './application/queries/get-diagoriente-metiers-favoris.query.handler' -import { EnvoyerFormulaireContactImmersionCommandHandler } from './application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' -import { GetAccueilJeuneMiloQueryHandler } from './application/queries/accueil/get-accueil-jeune-milo.query.handler.db' -import { GetAccueilJeunePoleEmploiQueryHandler } from './application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db' -import { JeunesPoleEmploiController } from './infrastructure/routes/jeunes.pole-emploi.controller' -import { DumpForAnalyticsJobHandler } from './application/jobs/analytics/0-dump-for-analytics.job' -import { EnrichirEvenementsJobHandler } from './application/jobs/analytics/2-enrichir-les-evenements.job' -import { ChargerLesVuesJobHandler } from './application/jobs/analytics/3-charger-les-vues.job' -import { ChargerEvenementsJobHandler } from './application/jobs/analytics/1-charger-les-evenements.job' -import { InitialiserLesVuesJobHandler } from './application/jobs/analytics/initialiser-les-vues.job' -import { DeleteConseillerCommandHandler } from './application/commands/conseiller/delete-conseiller.command.handler' -import { GetFavorisAccueilQueryGetter } from './application/queries/query-getters/accueil/get-favoris.query.getter.db' -import { GetCVPoleEmploiQueryHandler } from './application/queries/get-cv-pole-emploi.query.handler' -import { EvenementsEmploiController } from './infrastructure/routes/evenements-emploi.controller' -import { GetEvenementsEmploiQueryHandler } from './application/queries/get-evenements-emploi.query.handler' -import { GetEvenementEmploiQueryHandler } from './application/queries/get-evenement-emploi.query.handler' -import { GetSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db' -import { MiloClient } from './infrastructure/clients/milo-client' -import { ConseillerMiloRepositoryToken } from './domain/milo/conseiller.milo.db' -import { ConseillerMiloSqlRepository } from './infrastructure/repositories/milo/conseiller.milo.repository.db' -import { ConseillersMiloController } from './infrastructure/routes/conseillers.milo.controller' -import { EvenementEmploiCodePostalQueryGetter } from 'src/application/queries/query-getters/evenement-emploi-code-postal.query.getter' -import { GetDetailSessionConseillerMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db' -import { UpdateSessionMiloCommandHandler } from './application/commands/milo/update-session-milo.command.handler' -import { SessionMiloRepositoryToken } from './domain/milo/session.milo' -import { SessionMiloHttpSqlRepository } from './infrastructure/repositories/milo/session-milo-http-sql.repository.db' -import { GetSessionsJeuneMiloQueryHandler } from 'src/application/queries/milo/get-sessions-jeune.milo.query.handler.db' -import { SuivreEvenementsMiloCronJobHandler } from './application/jobs/suivre-file-evenements-milo.job.handler' -import { MonitorJobsJobHandler } from './application/jobs/monitor-jobs.job.handler.db' -import { NettoyerPiecesJointesJobHandler } from './application/jobs/nettoyer-pieces-jointes.job.handler' -import { NettoyerLesJobsJobHandler } from './application/jobs/nettoyer-les-jobs.job.handler' -import { FakeJobHandler } from './application/jobs/fake.job.handler' -import { NotifierRappelRendezVousJobHandler } from './application/jobs/notifier-rappel-rendez-vous.job.handler' -import { NotifierRappelActionJobHandler } from './application/jobs/notifier-rappel-action.job.handler' -import { EnvoyerEmailsMessagesConseillersJobHandler } from './application/jobs/envoyer-emails-messages-conseillers.job.handler' -import { NotifierRecherchesOffreEmploiJobHandler } from './application/jobs/notifier-recherches-offre-emploi.job.handler' -import { MajCodesEvenementsJobHandler } from './application/jobs/maj-codes-evenements.job.handler' -import { NotifierRendezVousPEJobHandler } from './application/jobs/notifier-rendez-vous-pole-emploi.job.handler' -import { MajMailingListConseillerJobHandler } from './application/jobs/maj-mailing-list-conseiller.job.handler' -import { NotifierRecherchesServiceCiviqueJobHandler } from './application/jobs/notifier-recherches-service-civique.job.handler' -import { HandleJobGenererJDDCommandHandler } from './application/jobs/generer-jdd.job.handler' -import { MajSegmentsJobHandler } from './application/jobs/maj-segments.job.handler.db' -import { GetDetailSessionJeuneMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-jeune.milo.query.handler.db' -import { GetSessionsJeuneMiloQueryGetter } from 'src/application/queries/query-getters/milo/get-sessions-jeune.milo.query.getter.db' -import { EmargementSessionMiloCommandHandler } from 'src/application/commands/milo/emargement-session-milo.command.handler' -import { GetSessionsConseillerMiloQueryGetter } from './application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db' -import { ConseillerInterStructureMiloAuthorizer } from './application/authorizers/conseiller-inter-structure-milo-authorizer' -import { GetAgendaSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db' -import { GetSessionsConseillerMiloV2QueryGetter } from './application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db' -import { GetSessionsConseillerMiloV2QueryHandler } from './application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db' -import { ConseillersMiloControllerv2 } from './infrastructure/routes/v2/conseillers.milo.controller.v2' -import { MatomoClient } from './infrastructure/clients/matomo-client' -import { GetJeunesByStructureMiloQueryHandler } from './application/queries/milo/get-jeunes-by-structure-milo.query.handler.db' -import { StructuresMiloController } from './infrastructure/routes/structures-milo.controller' -import { GetJeunesEtablissementV2QueryHandler } from './application/queries/get-jeunes-etablissement-v2.query.handler.db' -import { GetJeunesByEtablissementQueryHandler } from './application/queries/get-jeunes-by-etablissement.query.handler.db' -import { AppMobileCacheControlMiddleware } from 'src/infrastructure/middlewares/app-mobile-cache-control.middleware' -import { EvenementMiloRepositoryToken } from './domain/milo/evenement.milo' -import { NotifierRappelInstanceSessionMiloJobHandler } from './application/jobs/notifier-rappel-instance-session-milo.job.handler' export const buildModuleMetadata = (): ModuleMetadata => ({ imports: [ @@ -797,7 +796,6 @@ export const JobHandlerProviders = [ EnvoyerEmailsMessagesConseillersJobHandler, NotifierRecherchesOffreEmploiJobHandler, RecupererSituationsJeunesMiloJobHandler, - MajAgenceAnimationCollectiveJobHandler, MajCodesEvenementsJobHandler, NotifierRappelInstanceSessionMiloJobHandler, NotifierRendezVousPEJobHandler, diff --git a/src/application/jobs/maj-agence-animation-collective.job.handler.db.ts b/src/application/jobs/maj-agence-animation-collective.job.handler.db.ts deleted file mode 100644 index dae3add90..000000000 --- a/src/application/jobs/maj-agence-animation-collective.job.handler.db.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { Inject, Injectable } from '@nestjs/common' -import { Op, Sequelize } from 'sequelize' -import { Job } from '../../building-blocks/types/job' -import { JobHandler } from '../../building-blocks/types/job-handler' -import { Planificateur, ProcessJobType } from '../../domain/planificateur' -import { SuiviJob, SuiviJobServiceToken } from '../../domain/suivi-job' -import { RendezVousSqlModel } from '../../infrastructure/sequelize/models/rendez-vous.sql-model' -import { SequelizeInjectionToken } from '../../infrastructure/sequelize/providers' -import { DateService } from '../../utils/date-service' -import { TYPES_ANIMATIONS_COLLECTIVES } from '../../domain/rendez-vous/rendez-vous' - -@Injectable() -@ProcessJobType(Planificateur.JobType.MAJ_AGENCE_AC) -export class MajAgenceAnimationCollectiveJobHandler extends JobHandler { - constructor( - @Inject(SequelizeInjectionToken) private readonly sequelize: Sequelize, - private dateService: DateService, - @Inject(SuiviJobServiceToken) - notificationSupportService: SuiviJob.Service - ) { - super(Planificateur.JobType.MAJ_AGENCE_AC, notificationSupportService) - } - - async handle(): Promise { - const debut = this.dateService.now() - const nombreTotalAnimationCollectives = await RendezVousSqlModel.count({ - where: { - type: { - [Op.in]: TYPES_ANIMATIONS_COLLECTIVES - } - } - }) - - const nombreAnimationCollectiveSansAgenceAvant = - await RendezVousSqlModel.count({ - where: { - idAgence: { - [Op.eq]: null - }, - type: { - [Op.in]: TYPES_ANIMATIONS_COLLECTIVES - } - } - }) - - // Requête en deux parties : - // Subquery : - // - récupérer les animations collectives qui n'ont pas d'agence - // - récupérer l'agence du conseiller créateur - // - si le conseiller n'a pas d'agence, ne pas remonter l'animation collective - // Update : - // - mettre à jour l'animation collective avec l'agence récupérée - await this.sequelize.query(` - with rendez_vous_agence as (select rendez_vous_jointure.id, conseiller.id_agence - from rendez_vous as rendez_vous_jointure - left join conseiller on rendez_vous_jointure.createur ->> 'id' = conseiller.id - where (type = 'ATELIER' OR type = 'INFORMATION_COLLECTIVE') - AND rendez_vous_jointure.id_agence is null - AND conseiller.id_agence is not null) - update rendez_vous - set id_agence = rendez_vous_agence.id_agence - from rendez_vous_agence - where rendez_vous.id = rendez_vous_agence.id;`) - - const nombreAnimationCollectiveSansAgenceApres = - await RendezVousSqlModel.count({ - where: { - idAgence: { - [Op.eq]: null - }, - type: { - [Op.in]: TYPES_ANIMATIONS_COLLECTIVES - } - } - }) - - return { - jobType: this.jobType, - nbErreurs: 0, - succes: true, - dateExecution: debut, - tempsExecution: DateService.calculerTempsExecution(debut), - resultat: { - nombreTotalAnimationCollectives, - nombreAnimationCollectiveSansAgenceAvant, - nombreAnimationCollectiveSansAgenceApres - } - } - } -} diff --git a/src/domain/planificateur.ts b/src/domain/planificateur.ts index 1d4c23abe..2063a6359 100644 --- a/src/domain/planificateur.ts +++ b/src/domain/planificateur.ts @@ -61,7 +61,6 @@ export namespace Planificateur { NOTIFIER_RENDEZVOUS_PE = 'NOTIFIER_RENDEZVOUS_PE', MAJ_CODES_EVENEMENTS = 'MAJ_CODES_EVENEMENTS', MAJ_SEGMENTS = 'MAJ_SEGMENTS', - MAJ_AGENCE_AC = 'MAJ_AGENCE_AC', MONITORER_JOBS = 'MONITORER_JOBS', GENERER_JDD = 'GENERER_JDD', SUIVRE_FILE_EVENEMENTS_MILO = 'SUIVRE_FILE_EVENEMENTS_MILO', @@ -172,12 +171,6 @@ export const listeCronJobs: Planificateur.CronJob[] = [ expression: '0 */2 * * *', description: 'Toutes les 2 heures.' }, - { - type: Planificateur.JobType.MAJ_AGENCE_AC, - expression: '0 3 * * *', - description: - 'Tous les jours à 3h. Cohérence AC avec agence du conseiller créateur.' - }, { type: Planificateur.JobType.MONITORER_JOBS, expression: '45 9 * * *', diff --git a/src/infrastructure/sequelize/seeders/2-referentiel-agences.js b/src/infrastructure/sequelize/seeders/1-referentiel-agences.js similarity index 100% rename from src/infrastructure/sequelize/seeders/2-referentiel-agences.js rename to src/infrastructure/sequelize/seeders/1-referentiel-agences.js diff --git a/src/infrastructure/sequelize/seeders/3-referentiel-communes-et-departements.js b/src/infrastructure/sequelize/seeders/1-referentiel-communes-et-departements.js similarity index 100% rename from src/infrastructure/sequelize/seeders/3-referentiel-communes-et-departements.js rename to src/infrastructure/sequelize/seeders/1-referentiel-communes-et-departements.js diff --git a/src/infrastructure/sequelize/seeders/4-referentiel-structures-milo.js b/src/infrastructure/sequelize/seeders/1-referentiel-structures-milo.js similarity index 100% rename from src/infrastructure/sequelize/seeders/4-referentiel-structures-milo.js rename to src/infrastructure/sequelize/seeders/1-referentiel-structures-milo.js diff --git a/src/infrastructure/sequelize/seeders/5-conseiller.js b/src/infrastructure/sequelize/seeders/2-conseiller.js similarity index 100% rename from src/infrastructure/sequelize/seeders/5-conseiller.js rename to src/infrastructure/sequelize/seeders/2-conseiller.js diff --git a/src/infrastructure/sequelize/seeders/6-jeune.js b/src/infrastructure/sequelize/seeders/3-jeune.js similarity index 100% rename from src/infrastructure/sequelize/seeders/6-jeune.js rename to src/infrastructure/sequelize/seeders/3-jeune.js diff --git a/src/infrastructure/sequelize/seeders/7-action.js b/src/infrastructure/sequelize/seeders/4-action.js similarity index 100% rename from src/infrastructure/sequelize/seeders/7-action.js rename to src/infrastructure/sequelize/seeders/4-action.js diff --git a/src/infrastructure/sequelize/seeders/9-recherche.js b/src/infrastructure/sequelize/seeders/4-recherche.js similarity index 100% rename from src/infrastructure/sequelize/seeders/9-recherche.js rename to src/infrastructure/sequelize/seeders/4-recherche.js diff --git a/src/infrastructure/sequelize/seeders/8-rendez-vous.js b/src/infrastructure/sequelize/seeders/4-rendez-vous.js similarity index 100% rename from src/infrastructure/sequelize/seeders/8-rendez-vous.js rename to src/infrastructure/sequelize/seeders/4-rendez-vous.js diff --git a/src/infrastructure/sequelize/seeders/data/agences_milo_170223.json b/src/infrastructure/sequelize/seeders/data/agences_milo_170223.json deleted file mode 100644 index f05538223..000000000 --- a/src/infrastructure/sequelize/seeders/data/agences_milo_170223.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "id": 1373, - "nom_agence": "6 - Mission Locale Cannes Pays de Lérins", - "nom_region": "Provence-Alpes-Côte d'Azur", - "code_departement": 6, - "structure": "MILO" - }, - { - "id": 1374, - "nom_agence": "978 - Mission Locale de Saint-Martin", - "nom_region": "Saint-Martin", - "code_departement": 978, - "structure": "MILO" - } -] diff --git a/test/application/jobs/maj-agence-animation-collective.job.handler.db.test.ts b/test/application/jobs/maj-agence-animation-collective.job.handler.db.test.ts deleted file mode 100644 index 0a7d1049f..000000000 --- a/test/application/jobs/maj-agence-animation-collective.job.handler.db.test.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { MajAgenceAnimationCollectiveJobHandler } from '../../../src/application/jobs/maj-agence-animation-collective.job.handler.db' -import { AgenceSqlModel } from '../../../src/infrastructure/sequelize/models/agence.sql-model' -import { uneAgenceMiloDto } from '../../fixtures/sql-models/agence.sql-model' -import { unConseillerDto } from '../../fixtures/sql-models/conseiller.sql-model' -import { ConseillerSqlModel } from '../../../src/infrastructure/sequelize/models/conseiller.sql-model' -import { - RendezVousDto, - RendezVousSqlModel -} from '../../../src/infrastructure/sequelize/models/rendez-vous.sql-model' -import { unRendezVousDto } from '../../fixtures/sql-models/rendez-vous.sql-model' -import { expect } from '../../utils' -import { CodeTypeRendezVous } from '../../../src/domain/rendez-vous/rendez-vous' -import { AsSql } from '../../../src/infrastructure/sequelize/types' -import { DateService } from '../../../src/utils/date-service' -import { StubbedType, stubInterface } from '@salesforce/ts-sinon' -import { createSandbox } from 'sinon' -import { SuiviJob } from '../../../src/domain/suivi-job' -import { - DatabaseForTesting, - getDatabase -} from '../../utils/database-for-testing' - -describe('HandleJobAgenceAnimationCollectiveCommand', () => { - let database: DatabaseForTesting - - before(async () => { - database = getDatabase() - }) - - let command: MajAgenceAnimationCollectiveJobHandler - - let atelierAvecAgence: AsSql - let atelierAvecAgenceARemplir: AsSql - let atelierSansAgenceARemplir: AsSql - let rendezVousIndividuel: AsSql - const agenceNantes = uneAgenceMiloDto({ id: '1', nomAgence: 'Nantes' }) - - beforeEach(async () => { - await database.cleanPG() - const notificationSupportService: StubbedType = - stubInterface(createSandbox()) - command = new MajAgenceAnimationCollectiveJobHandler( - database.sequelize, - new DateService(), - notificationSupportService - ) - - // Given - await AgenceSqlModel.bulkCreate([agenceNantes]) - - const conseillerNantais = unConseillerDto({ - id: '1', - idAgence: agenceNantes.id - }) - const conseillerSansAgence = unConseillerDto({ - id: '2', - idAgence: undefined - }) - await ConseillerSqlModel.bulkCreate([ - conseillerNantais, - conseillerSansAgence - ]) - - atelierAvecAgence = unRendezVousDto({ - idAgence: agenceNantes.id, - type: CodeTypeRendezVous.ATELIER, - createur: { - id: conseillerNantais.id, - nom: conseillerNantais.nom, - prenom: conseillerNantais.prenom - } - }) - - atelierAvecAgenceARemplir = unRendezVousDto({ - idAgence: null, - type: CodeTypeRendezVous.ATELIER, - createur: { - id: conseillerNantais.id, - nom: conseillerNantais.nom, - prenom: conseillerNantais.prenom - } - }) - - atelierSansAgenceARemplir = unRendezVousDto({ - idAgence: null, - type: CodeTypeRendezVous.ATELIER, - createur: { - id: conseillerSansAgence.id, - nom: conseillerSansAgence.nom, - prenom: conseillerSansAgence.prenom - } - }) - - rendezVousIndividuel = unRendezVousDto({ - idAgence: null, - type: CodeTypeRendezVous.ENTRETIEN_INDIVIDUEL_CONSEILLER, - createur: { - id: conseillerNantais.id, - nom: conseillerNantais.nom, - prenom: conseillerNantais.prenom - } - }) - - await RendezVousSqlModel.bulkCreate([ - atelierSansAgenceARemplir, - atelierAvecAgenceARemplir, - atelierAvecAgence, - rendezVousIndividuel - ]) - - // When - await command.handle() - }) - - it('ne met pas à jour les AC qui ont une agence', async () => { - // Then - const atelierAvecAgenceSql = await RendezVousSqlModel.findByPk( - atelierAvecAgence.id - ) - expect(atelierAvecAgenceSql?.get()).to.deep.equal(atelierAvecAgence) - }) - - it("ne met pas à jour l'agence quand le conseiller n'a pas d'agence", async () => { - const atelierSansAgenceARemplirSql = await RendezVousSqlModel.findByPk( - atelierSansAgenceARemplir.id - ) - expect(atelierSansAgenceARemplirSql?.get()).to.deep.equal( - atelierSansAgenceARemplir - ) - }) - - it("met à jour l'agence quand le conseiller a une agence", async () => { - const atelierAvecAgenceARemplirSql = await RendezVousSqlModel.findByPk( - atelierAvecAgenceARemplir.id - ) - expect(atelierAvecAgenceARemplirSql?.get()).to.deep.equal({ - ...atelierAvecAgenceARemplir, - idAgence: agenceNantes.id - }) - }) - - it('ne change pas les rendez vous', async () => { - const rendezVousIndividuelSql = await RendezVousSqlModel.findByPk( - rendezVousIndividuel.id - ) - expect(rendezVousIndividuelSql?.get()).to.deep.equal(rendezVousIndividuel) - }) -}) diff --git a/test/infrastructure/clients/suivi-job.service.db.test.ts b/test/infrastructure/clients/suivi-job.service.db.test.ts index 7be4b9f1a..9147a2d28 100644 --- a/test/infrastructure/clients/suivi-job.service.db.test.ts +++ b/test/infrastructure/clients/suivi-job.service.db.test.ts @@ -50,7 +50,7 @@ describe('SuiviJobService', () => { it('envoie une notif de succès quand le result est success', async () => { // Given const suivi: SuiviJob = { - jobType: Planificateur.JobType.MAJ_AGENCE_AC, + jobType: Planificateur.JobType.NETTOYER_LES_DONNEES, succes: true, dateExecution: uneDatetime(), tempsExecution: 0, @@ -58,7 +58,7 @@ describe('SuiviJobService', () => { resultat: { unChamp: 'present', unTableau: [], unObjet: {} } } const stringBody = - '{"username":"CEJ Lama","text":"### Résultat du job _MAJ_AGENCE_AC_\\n| Statut | :white_check_mark: |\\n |:------------------------|:------------|\\n | jobType | MAJ_AGENCE_AC |\\n| succes | true |\\n| dateExecution | 2020-04-06T14:00:00.000+02:00 |\\n| tempsExecution | 0 |\\n| nbErreurs | 0 |\\n| unChamp | present |"}' + '{"username":"CEJ Lama","text":"### Résultat du job _NETTOYER_LES_DONNEES_\\n| Statut | :white_check_mark: |\\n |:------------------------|:------------|\\n | jobType | NETTOYER_LES_DONNEES |\\n| succes | true |\\n| dateExecution | 2020-04-06T14:00:00.000+02:00 |\\n| tempsExecution | 0 |\\n| nbErreurs | 0 |\\n| unChamp | present |"}' const scope = nock(configService.get('mattermost').jobWebhookUrl) .post('', stringBody) @@ -73,7 +73,7 @@ describe('SuiviJobService', () => { it("envoie une notif d'erreur quand le result est error", async () => { // Given const suivi: SuiviJob = { - jobType: Planificateur.JobType.MAJ_AGENCE_AC, + jobType: Planificateur.JobType.NETTOYER_LES_DONNEES, succes: false, dateExecution: uneDatetime(), tempsExecution: 0, @@ -82,7 +82,7 @@ describe('SuiviJobService', () => { erreur: { message: "erreur d'e quoi" } } const heureParis = uneDatetime().setZone('Europe/Paris').toISO() - const stringBody = `{"username":"CEJ Lama","text":"### Résultat du job _MAJ_AGENCE_AC_\\n| Statut | :x: |\\n |:------------------------|:------------|\\n | jobType | MAJ_AGENCE_AC |\\n| succes | false |\\n| dateExecution | ${heureParis} |\\n| tempsExecution | 0 |\\n| nbErreurs | 0 |\\n| code | NON_TROUVE |\\n| message | test 1 non trouvé(e) |"}` + const stringBody = `{"username":"CEJ Lama","text":"### Résultat du job _NETTOYER_LES_DONNEES_\\n| Statut | :x: |\\n |:------------------------|:------------|\\n | jobType | NETTOYER_LES_DONNEES |\\n| succes | false |\\n| dateExecution | ${heureParis} |\\n| tempsExecution | 0 |\\n| nbErreurs | 0 |\\n| code | NON_TROUVE |\\n| message | test 1 non trouvé(e) |"}` const scope = nock(configService.get('mattermost').jobWebhookUrl) .post('', stringBody) From adf51f6f264ca03228166cf0c465c7cee9ee3ed4 Mon Sep 17 00:00:00 2001 From: Malek Zemni Date: Wed, 6 Dec 2023 23:03:56 +0100 Subject: [PATCH 2/4] feat(migration-structures-milo): rattacher animations collectives aux structures --- .../data-migrations/purger-sessions-milo.js | 15 - scripts/data-migrations/structures-milo-ac.js | 33 ++ src/app.module.ts | 416 +++++++++--------- src/domain/rendez-vous/rendez-vous.ts | 1 + src/infrastructure/jdd/rendez-vous.jdd.ts | 1 + .../mappers/rendez-vous.mappers.ts | 2 + ...20231206080808-ajout-structure-milo-rdv.js | 29 ++ .../sequelize/models/rendez-vous.sql-model.ts | 8 + test/fixtures/rendez-vous.fixture.ts | 1 + .../sql-models/rendez-vous.sql-model.ts | 1 + ...ation-collective-sql.repository.db.test.ts | 9 +- 11 files changed, 291 insertions(+), 225 deletions(-) delete mode 100644 scripts/data-migrations/purger-sessions-milo.js create mode 100644 scripts/data-migrations/structures-milo-ac.js create mode 100644 src/infrastructure/sequelize/migrations/20231206080808-ajout-structure-milo-rdv.js diff --git a/scripts/data-migrations/purger-sessions-milo.js b/scripts/data-migrations/purger-sessions-milo.js deleted file mode 100644 index ca27d8e12..000000000 --- a/scripts/data-migrations/purger-sessions-milo.js +++ /dev/null @@ -1,15 +0,0 @@ -require('dotenv').config() -const { Sequelize } = require('sequelize') - -const sequelize = new Sequelize(process.env.DATABASE_URL, { - dialect: 'postgres' -}) - -sequelize.transaction(async transaction => { - await sequelize.query( - `DELETE FROM rendez_vous WHERE rendez_vous.type = 'SESSION_MILO'`, - { - transaction - } - ) -}) diff --git a/scripts/data-migrations/structures-milo-ac.js b/scripts/data-migrations/structures-milo-ac.js new file mode 100644 index 000000000..29381fbee --- /dev/null +++ b/scripts/data-migrations/structures-milo-ac.js @@ -0,0 +1,33 @@ +require('dotenv').config() +const { Sequelize } = require('sequelize') +const sequelize = new Sequelize(process.env.DATABASE_URL, { + dialect: 'postgres' +}) + +sequelize.transaction(async transaction => { + const ACsRAW = await sequelize.query( + `SELECT * FROM rendez_vous WHERE rendez_vous.type = 'ATELIER' OR rendez_vous.type = 'INFORMATION_COLLECTIVE'` + ) + const ACs = ACsRAW[0] + for (const AC of ACs) { + const idStructureRaw = await sequelize.query( + `SELECT conseiller.id_structure_milo AS id_structure_milo FROM conseiller WHERE conseiller.id = '${AC.createur.id}'`, + { transaction } + ) + const idStructure = idStructureRaw[0][0].id_structure_milo + + if (idStructure) + await sequelize.query( + `UPDATE rendez_vous SET id_structure_milo = '${idStructure}' WHERE rendez_vous.id = '${AC.id}'` + ) + } + await sequelize.query( + `UPDATE rendez_vous SET date_suppression = NOW() WHERE (rendez_vous.type = 'ATELIER' OR rendez_vous.type = 'INFORMATION_COLLECTIVE') AND rendez_vous.id_structure_milo IS NULL` + ) + + await sequelize.query(`DELETE FROM rendez_vous_jeune_association WHERE id IN (SELECT rendez_vous_jeune_association.id FROM rendez_vous_jeune_association, jeune, rendez_vous + WHERE rendez_vous.id_structure_milo IS NOT null + AND rendez_vous.id = rendez_vous_jeune_association.id_rendez_vous + AND rendez_vous_jeune_association.id_jeune = jeune.id + AND jeune.id_structure_milo != rendez_vous.id_structure_milo)`) +}) diff --git a/src/app.module.ts b/src/app.module.ts index 8fdea9963..8b6585c78 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -11,195 +11,78 @@ import { import { ConfigModule } from '@nestjs/config' import { APP_GUARD } from '@nestjs/core' import { TerminusModule } from '@nestjs/terminus' -import { EmargementSessionMiloCommandHandler } from 'src/application/commands/milo/emargement-session-milo.command.handler' -import { GetAgendaSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db' -import { GetDetailSessionConseillerMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db' -import { GetDetailSessionJeuneMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-jeune.milo.query.handler.db' -import { GetSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db' -import { GetSessionsJeuneMiloQueryHandler } from 'src/application/queries/milo/get-sessions-jeune.milo.query.handler.db' -import { EvenementEmploiCodePostalQueryGetter } from 'src/application/queries/query-getters/evenement-emploi-code-postal.query.getter' -import { GetSessionsJeuneMiloQueryGetter } from 'src/application/queries/query-getters/milo/get-sessions-jeune.milo.query.getter.db' -import { AppMobileCacheControlMiddleware } from 'src/infrastructure/middlewares/app-mobile-cache-control.middleware' import { ActionAuthorizer } from './application/authorizers/action-authorizer' import { ConseillerAuthorizer } from './application/authorizers/conseiller-authorizer' -import { ConseillerInterAgenceAuthorizer } from './application/authorizers/conseiller-inter-agence-authorizer' -import { ConseillerInterStructureMiloAuthorizer } from './application/authorizers/conseiller-inter-structure-milo-authorizer' import { FavoriOffresEmploiAuthorizer } from './application/authorizers/favori-offres-emploi-authorizer' import { FavoriOffreServiceCiviqueAuthorizer } from './application/authorizers/favori-offres-engagement-authorizer' import { FavoriOffresImmersionAuthorizer } from './application/authorizers/favori-offres-immersion-authorizer' -import { FichierAuthorizer } from './application/authorizers/fichier-authorizer' import { JeuneAuthorizer } from './application/authorizers/jeune-authorizer' -import { ListeDeDiffusionAuthorizer } from './application/authorizers/liste-de-diffusion-authorizer' import { RechercheAuthorizer } from './application/authorizers/recherche-authorizer' import { RendezVousAuthorizer } from './application/authorizers/rendezvous-authorizer' -import { SuggestionAuthorizer } from './application/authorizers/suggestion-authorizer' import { SupportAuthorizer } from './application/authorizers/support-authorizer' -import { AddCommentaireActionCommandHandler } from './application/commands/action/add-commentaire-action.command.handler' -import { CreateActionCommandHandler } from './application/commands/action/create-action.command.handler' -import { DeleteActionCommandHandler } from './application/commands/action/delete-action.command.handler' -import { QualifierActionCommandHandler } from './application/commands/action/qualifier-action.command.handler' -import { UpdateStatutActionCommandHandler } from './application/commands/action/update-statut-action.command.handler' import { AddFavoriOffreEmploiCommandHandler } from './application/commands/add-favori-offre-emploi.command.handler' -import { AddFavoriOffreImmersionCommandHandler } from './application/commands/add-favori-offre-immersion.command.handler' import { AddFavoriOffreServiceCiviqueCommandHandler } from './application/commands/add-favori-offre-service-civique.command.handler' -import { ArchiverJeuneCommandHandler } from './application/commands/archiver-jeune.command.handler' -import { CreateCampagneCommandHandler } from './application/commands/campagne/create-campagne.command' -import { CreateEvaluationCommandHandler } from './application/commands/campagne/create-evaluation.command' -import { CloturerAnimationCollectiveCommandHandler } from './application/commands/cloturer-animation-collective.command.handler' -import { DeleteConseillerCommandHandler } from './application/commands/conseiller/delete-conseiller.command.handler' +import { AddFavoriOffreImmersionCommandHandler } from './application/commands/add-favori-offre-immersion.command.handler' +import { CreateActionCommandHandler } from './application/commands/action/create-action.command.handler' import { CreateEvenementCommandHandler } from './application/commands/create-evenement.command.handler' -import { CreateListeDeDiffusionCommandHandler } from './application/commands/create-liste-de-diffusion.command.handler' -import { CreateRechercheFromSuggestionCommandHandler } from './application/commands/create-recherche-from-suggestion.command.handler' import { CreateRechercheCommandHandler } from './application/commands/create-recherche.command.handler' import { CreateRendezVousCommandHandler } from './application/commands/create-rendez-vous.command.handler' -import { CreateSuggestionConseillerImmersionCommandHandler } from './application/commands/create-suggestion-conseiller-immersion.command.handler' -import { CreateSuggestionConseillerOffreEmploiCommandHandler } from './application/commands/create-suggestion-conseiller-offre-emploi.command.handler' -import { CreateSuggestionConseillerServiceCiviqueCommandHandler } from './application/commands/create-suggestion-conseiller-service-civique.command.handler' import { CreerJeuneMiloCommandHandler } from './application/commands/creer-jeune-milo.command.handler' import { CreerJeunePoleEmploiCommandHandler } from './application/commands/creer-jeune-pole-emploi.command.handler' import { CreerSuperviseursCommandHandler } from './application/commands/creer-superviseurs.command.handler' +import { DeleteActionCommandHandler } from './application/commands/action/delete-action.command.handler' import { DeleteFavoriOffreEmploiCommandHandler } from './application/commands/delete-favori-offre-emploi.command.handler' -import { DeleteFavoriOffreImmersionCommandHandler } from './application/commands/delete-favori-offre-immersion.command.handler' import { DeleteFavoriOffreServiceCiviqueCommandHandler } from './application/commands/delete-favori-offre-service-civique.command.handler' +import { DeleteFavoriOffreImmersionCommandHandler } from './application/commands/delete-favori-offre-immersion.command.handler' import { DeleteJeuneInactifCommandHandler } from './application/commands/delete-jeune-inactif.command.handler' -import { DeleteJeuneCommandHandler } from './application/commands/delete-jeune.command.handler' import { DeleteListeDeDiffusionCommandHandler } from './application/commands/delete-liste-de-diffusion.command.handler' import { DeleteRechercheCommandHandler } from './application/commands/delete-recherche.command.handler' import { DeleteRendezVousCommandHandler } from './application/commands/delete-rendez-vous.command.handler.db' import { DeleteSuperviseursCommandHandler } from './application/commands/delete-superviseurs.command.handler' -import { CreateDemarcheCommandHandler } from './application/commands/demarche/create-demarche.command.handler' -import { UpdateStatutDemarcheCommandHandler } from './application/commands/demarche/update-demarche.command.handler' import { EnvoyerMessageGroupeCommandHandler } from './application/commands/envoyer-message-groupe.command.handler' -import { EnvoyerFormulaireContactImmersionCommandHandler } from './application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' -import { MettreAJourLesJeunesCejPeCommandHandler } from './application/commands/mettre-a-jour-les-jeunes-cej-pe.command.handler' -import { UpdateSessionMiloCommandHandler } from './application/commands/milo/update-session-milo.command.handler' -import { ModifierConseillerCommandHandler } from './application/commands/modifier-conseiller.command.handler' -import { ModifierJeuneDuConseillerCommandHandler } from './application/commands/modifier-jeune-du-conseiller.command.handler' import { NotifierNouvellesImmersionsCommandHandler } from './application/commands/notifier-nouvelles-immersions.command.handler' -import { RafraichirSuggestionsCommandHandler } from './application/commands/rafraichir-suggestions.command.handler' -import { RecupererJeunesDuConseillerCommandHandler } from './application/commands/recuperer-jeunes-du-conseiller.command.handler' -import { RefreshJddCommandHandler } from './application/commands/refresh-jdd.command.handler' -import { RefuserSuggestionCommandHandler } from './application/commands/refuser-suggestion.command.handler' import { SendNotificationsNouveauxMessagesExternesCommandHandler } from './application/commands/send-notifications-nouveaux-messages-externes.command.handler' import { SendNotificationsNouveauxMessagesCommandHandler } from './application/commands/send-notifications-nouveaux-messages.command.handler' -import { ArchiverJeuneSupportCommandHandler } from './application/commands/support/archiver-jeune-support.command.handler' -import { UpdateAgenceConseillerCommandHandler } from './application/commands/support/update-agence-conseiller.command.handler' -import { SupprimerFichierCommandHandler } from './application/commands/supprimer-fichier.command.handler' -import { TeleverserFichierCommandHandler } from './application/commands/televerser-fichier.command.handler' +import { NettoyerEvenementsChargesAnalyticsJobHandler } from './application/jobs/analytics/1bis-nettoyer-les-evenements-charges.job.handler.db' +import { PlanifierExecutionCronCommandHandler } from './application/tasks/planifier-execution-cron.command.handler' +import { InitCronsCommandHandler } from './application/tasks/init-crons.command' +import { SynchronizeJobsCommandHandler } from './application/tasks/synchronize-jobs.command' import { TransfererJeunesConseillerCommandHandler } from './application/commands/transferer-jeunes-conseiller.command.handler' import { UpdateJeuneConfigurationApplicationCommandHandler } from './application/commands/update-jeune-configuration-application.command.handler' -import { UpdateListeDeDiffusionCommandHandler } from './application/commands/update-liste-de-diffusion.command.handler' -import { UpdateJeunePreferencesCommandHandler } from './application/commands/update-preferences-jeune.command.handler' -import { UpdateRendezVousCommandHandler } from './application/commands/update-rendez-vous.command.handler' +import { UpdateStatutActionCommandHandler } from './application/commands/action/update-statut-action.command.handler' import { UpdateUtilisateurCommandHandler } from './application/commands/update-utilisateur.command.handler' -import { DumpForAnalyticsJobHandler } from './application/jobs/analytics/0-dump-for-analytics.job' -import { ChargerEvenementsJobHandler } from './application/jobs/analytics/1-charger-les-evenements.job' -import { NettoyerEvenementsChargesAnalyticsJobHandler } from './application/jobs/analytics/1bis-nettoyer-les-evenements-charges.job.handler.db' -import { EnrichirEvenementsJobHandler } from './application/jobs/analytics/2-enrichir-les-evenements.job' -import { ChargerLesVuesJobHandler } from './application/jobs/analytics/3-charger-les-vues.job' -import { InitialiserLesVuesJobHandler } from './application/jobs/analytics/initialiser-les-vues.job' -import { EnvoyerEmailsMessagesConseillersJobHandler } from './application/jobs/envoyer-emails-messages-conseillers.job.handler' -import { FakeJobHandler } from './application/jobs/fake.job.handler' -import { HandleJobGenererJDDCommandHandler } from './application/jobs/generer-jdd.job.handler' -import { MajCodesEvenementsJobHandler } from './application/jobs/maj-codes-evenements.job.handler' -import { MajMailingListConseillerJobHandler } from './application/jobs/maj-mailing-list-conseiller.job.handler' -import { MajSegmentsJobHandler } from './application/jobs/maj-segments.job.handler.db' -import { MonitorJobsJobHandler } from './application/jobs/monitor-jobs.job.handler.db' -import { NettoyerLesDonneesJobHandler } from './application/jobs/nettoyer-les-donnees.job.handler.db' -import { NettoyerLesJobsJobHandler } from './application/jobs/nettoyer-les-jobs.job.handler' -import { NettoyerPiecesJointesJobHandler } from './application/jobs/nettoyer-pieces-jointes.job.handler' -import { NotifierRappelActionJobHandler } from './application/jobs/notifier-rappel-action.job.handler' -import { NotifierRappelInstanceSessionMiloJobHandler } from './application/jobs/notifier-rappel-instance-session-milo.job.handler' -import { NotifierRappelRendezVousJobHandler } from './application/jobs/notifier-rappel-rendez-vous.job.handler' -import { NotifierRecherchesOffreEmploiJobHandler } from './application/jobs/notifier-recherches-offre-emploi.job.handler' -import { NotifierRecherchesServiceCiviqueJobHandler } from './application/jobs/notifier-recherches-service-civique.job.handler' -import { NotifierRendezVousPEJobHandler } from './application/jobs/notifier-rendez-vous-pole-emploi.job.handler' -import { RecupererSituationsJeunesMiloJobHandler } from './application/jobs/recuperer-situations-jeunes-milo.job.handler' -import { SuivreEvenementsMiloCronJobHandler } from './application/jobs/suivre-file-evenements-milo.job.handler' -import { TraiterEvenementMiloJobHandler } from './application/jobs/traiter-evenement-milo.job.handler' -import { GetAccueilJeuneMiloQueryHandler } from './application/queries/accueil/get-accueil-jeune-milo.query.handler.db' -import { GetAccueilJeunePoleEmploiQueryHandler } from './application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db' -import { GetActionsConseillerV2QueryHandler } from './application/queries/action/get-actions-conseiller-v2.query.handler.db' -import { GetActionsJeuneQueryHandler } from './application/queries/action/get-actions-jeune.query.handler.db' +import { TeleverserFichierCommandHandler } from './application/commands/televerser-fichier.command.handler' import { GetActionsPredefiniesQueryHandler } from './application/queries/action/get-actions-predefinies.query.handler' -import { GetCommentairesActionQueryHandler } from './application/queries/action/get-commentaires-action.query.handler.db' -import { GetDetailActionQueryHandler } from './application/queries/action/get-detail-action.query.handler.db' -import { GetResumeActionsDesJeunesDuConseillerQueryHandlerDb } from './application/queries/action/get-resume-actions-des-jeunes-du-conseiller.query.handler.db' -import { GetTypesQualificationsQueryHandler } from './application/queries/action/get-types-qualifications.query.handler' -import { GetFavorisJeuneQueryHandler } from './application/queries/favoris/get-favoris-jeune.query.handler.db' -import { GetMetadonneesFavorisJeuneQueryHandler } from './application/queries/favoris/get-metadonnees-favoris-jeune.query.handler.db' -import { GetAgencesQueryHandler } from './application/queries/get-agences.query.handler.db' -import { GetCatalogueDemarchesQueryHandler } from './application/queries/get-catalogue-demarches.query.handler' +import { GetJeunesIdentitesQueryHandler } from './application/queries/get-jeunes-identites.query.handler.db' +import { Context } from './building-blocks/context' +import { GetActionsJeuneQueryHandler } from './application/queries/action/get-actions-jeune.query.handler.db' import { GetChatSecretsQueryHandler } from './application/queries/get-chat-secrets.query.handler' import { GetCommunesEtDepartementsQueryHandler } from './application/queries/get-communes-et-departements.query.handler.db' -import { GetConseillersJeuneQueryHandler } from './application/queries/get-conseillers-jeune.query.handler.db' import { GetConseillersQueryHandler } from './application/queries/get-conseillers.query.handler.db' -import { GetCVPoleEmploiQueryHandler } from './application/queries/get-cv-pole-emploi.query.handler' -import { GetDemarchesQueryHandler } from './application/queries/get-demarches.query.handler' +import { GetConseillersJeuneQueryHandler } from './application/queries/get-conseillers-jeune.query.handler.db' +import { GetDetailActionQueryHandler } from './application/queries/action/get-detail-action.query.handler.db' import { GetDetailConseillerQueryHandler } from './application/queries/get-detail-conseiller.query.handler.db' import { GetDetailJeuneQueryHandler } from './application/queries/get-detail-jeune.query.handler.db' -import { GetDetailListeDeDiffusionQueryHandler } from './application/queries/get-detail-liste-de-diffusion.query.handler.db' import { GetDetailOffreEmploiQueryHandler } from './application/queries/get-detail-offre-emploi.query.handler' import { GetDetailOffreImmersionQueryHandler } from './application/queries/get-detail-offre-immersion.query.handler' +import { GetDetailRendezVousQueryHandler } from './application/queries/rendez-vous/get-detail-rendez-vous.query.handler.db' import { GetDetailOffreServiceCiviqueQueryHandler } from './application/queries/get-detail-offre-service-civique.query.handler' -import { GetDiagorienteMetiersFavorisQueryHandler } from './application/queries/get-diagoriente-metiers-favoris.query.handler' -import { GetDiagorienteUrlsQueryHandler } from './application/queries/get-diagoriente-urls.query.handler' import { GetDossierMiloJeuneQueryHandler } from './application/queries/get-dossier-milo-jeune.query.handler' -import { GetEvenementEmploiQueryHandler } from './application/queries/get-evenement-emploi.query.handler' -import { GetEvenementsEmploiQueryHandler } from './application/queries/get-evenements-emploi.query.handler' import { GetFavorisOffresEmploiJeuneQueryHandler } from './application/queries/get-favoris-offres-emploi-jeune.query.handler.db' import { GetFavorisOffresImmersionJeuneQueryHandler } from './application/queries/get-favoris-offres-immersion-jeune.query.handler.db' -import { GetFavorisServiceCiviqueJeuneQueryHandler } from './application/queries/get-favoris-service-civique-jeune.query.handler.db' import { GetHomeJeuneHandler } from './application/queries/get-home-jeune.query.handler' -import { GetIndicateursPourConseillerQueryHandler } from './application/queries/get-indicateurs-pour-conseiller.query.handler.db' -import { GetJeuneHomeActionsQueryHandler } from './application/queries/get-jeune-home-actions.query.handler' -import { GetJeuneHomeAgendaQueryHandler } from './application/queries/get-jeune-home-agenda.query.handler.db' -import { GetJeuneHomeDemarchesQueryHandler } from './application/queries/get-jeune-home-demarches.query.handler' -import { GetJeuneMiloByDossierQueryHandler } from './application/queries/get-jeune-milo-by-dossier.query.handler.db' import { GetJeunesByConseillerQueryHandler } from './application/queries/get-jeunes-by-conseiller.query.handler.db' -import { GetJeunesByEtablissementQueryHandler } from './application/queries/get-jeunes-by-etablissement.query.handler.db' -import { GetJeunesEtablissementV2QueryHandler } from './application/queries/get-jeunes-etablissement-v2.query.handler.db' -import { GetJeunesIdentitesQueryHandler } from './application/queries/get-jeunes-identites.query.handler.db' -import { GetListesDeDiffusionDuConseillerQueryHandler } from './application/queries/get-listes-de-diffusion-du-conseiller.query.handler.db' -import { GetMetiersRomeQueryHandler } from './application/queries/get-metiers-rome.query.handler.db' -import { GetMotifsSuppressionJeuneQueryHandler } from './application/queries/get-motifs-suppression-jeune.query.handler' import { GetOffresEmploiQueryHandler } from './application/queries/get-offres-emploi.query.handler' import { GetOffresImmersionQueryHandler } from './application/queries/get-offres-immersion.query.handler' -import { GetOffresServicesCiviqueQueryHandler } from './application/queries/get-offres-services-civique.query.handler' -import { GetPreferencesJeuneQueryHandler } from './application/queries/get-preferences-jeune.handler.db' import { GetRecherchesQueryHandler } from './application/queries/get-recherches.query.handler.db' -import { GetSuggestionsQueryHandler } from './application/queries/get-suggestions.query.handler.db' -import { GetSuiviSemainePoleEmploiQueryHandler } from './application/queries/get-suivi-semaine-pole-emploi.query.handler' -import { GetJeunesByStructureMiloQueryHandler } from './application/queries/milo/get-jeunes-by-structure-milo.query.handler.db' -import { GetSessionsConseillerMiloV2QueryHandler } from './application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db' -import { GetFavorisAccueilQueryGetter } from './application/queries/query-getters/accueil/get-favoris.query.getter.db' -import { GetRecherchesSauvegardeesQueryGetter } from './application/queries/query-getters/accueil/get-recherches-sauvegardees.query.getter.db' -import { FindAllOffresEmploiQueryGetter } from './application/queries/query-getters/find-all-offres-emploi.query.getter' -import { FindAllOffresImmersionQueryGetter } from './application/queries/query-getters/find-all-offres-immersion.query.getter' -import { FindAllOffresServicesCiviqueQueryGetter } from './application/queries/query-getters/find-all-offres-services-civique.query.getter' -import { GetCampagneQueryGetter } from './application/queries/query-getters/get-campagne.query.getter' -import { GetSessionsConseillerMiloQueryGetter } from './application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db' -import { GetSessionsConseillerMiloV2QueryGetter } from './application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db' -import { GetDemarchesQueryGetter } from './application/queries/query-getters/pole-emploi/get-demarches.query.getter' -import { GetRendezVousJeunePoleEmploiQueryGetter } from './application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter' -import { RechercherTypesDemarcheQueryHandler } from './application/queries/rechercher-types-demarche.query.handler' -import { GetAnimationsCollectivesJeuneQueryHandler } from './application/queries/rendez-vous/get-animations-collectives-jeune.query.handler.db' -import { GetAnimationsCollectivesV2QueryHandler } from './application/queries/rendez-vous/get-animations-collectives-v2.query.handler.db' -import { GetAnimationsCollectivesQueryHandler } from './application/queries/rendez-vous/get-animations-collectives.query.handler.db' -import { GetDetailRendezVousQueryHandler } from './application/queries/rendez-vous/get-detail-rendez-vous.query.handler.db' -import { GetRendezVousConseillerPaginesQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-conseiller-pagines.query.handler.db' import { GetAllRendezVousConseillerQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-conseiller.query.handler.db' import { GetRendezVousJeunePoleEmploiQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-jeune-pole-emploi.query.handler' import { GetRendezVousJeuneQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-jeune.query.handler.db' +import { GetResumeActionsDesJeunesDuConseillerQueryHandlerDb } from './application/queries/action/get-resume-actions-des-jeunes-du-conseiller.query.handler.db' +import { GetOffresServicesCiviqueQueryHandler } from './application/queries/get-offres-services-civique.query.handler' import { GetTypesRendezVousQueryHandler } from './application/queries/rendez-vous/get-types-rendez-vous.query.handler' -import { GetUnRendezVousJeuneQueryHandler } from './application/queries/rendez-vous/get-un-rendez-vous-jeune.query.handler.db' -import { TelechargerFichierQueryHandler } from './application/queries/telecharger-fichier.query.handler' import { TaskService } from './application/task.service' -import { InitCronsCommandHandler } from './application/tasks/init-crons.command' -import { PlanifierExecutionCronCommandHandler } from './application/tasks/planifier-execution-cron.command.handler' -import { SynchronizeJobsCommandHandler } from './application/tasks/synchronize-jobs.command' import { WorkerService } from './application/worker.service.db' -import { Context } from './building-blocks/context' import configuration from './config/configuration' import { Action, @@ -207,20 +90,15 @@ import { ActionsRepositoryToken, CommentaireActionRepositoryToken } from './domain/action/action' -import { AgenceRepositoryToken } from './domain/agence' -import { ArchiveJeuneRepositoryToken } from './domain/archive-jeune' import { Authentification, AuthentificationRepositoryToken } from './domain/authentification' -import { Campagne, CampagneRepositoryToken } from './domain/campagne' import { ChatRepositoryToken } from './domain/chat' import { Conseiller, ConseillersRepositoryToken } from './domain/conseiller/conseiller' -import { ListeDeDiffusionRepositoryToken } from './domain/conseiller/liste-de-diffusion' -import { Demarche, DemarcheRepositoryToken } from './domain/demarche' import { EvenementService, EvenementsRepositoryToken } from './domain/evenement' import { Fichier, FichierRepositoryToken } from './domain/fichier' import { @@ -229,136 +107,258 @@ import { JeunePoleEmploiRepositoryToken, JeunesRepositoryToken } from './domain/jeune/jeune' -import { Mail, MailRepositoryToken, MailServiceToken } from './domain/mail' -import { ConseillerMiloRepositoryToken } from './domain/milo/conseiller.milo.db' -import { EvenementMiloRepositoryToken } from './domain/milo/evenement.milo' -import { MiloJeuneRepositoryToken } from './domain/milo/jeune.milo' -import { - RendezVousMilo, - RendezVousMiloRepositoryToken -} from './domain/milo/rendez-vous.milo' -import { SessionMiloRepositoryToken } from './domain/milo/session.milo' import { Notification, NotificationRepositoryToken } from './domain/notification/notification' import { OffresEmploiRepositoryToken } from './domain/offre/favori/offre-emploi' -import { FavorisOffresImmersionRepositoryToken } from './domain/offre/favori/offre-immersion' import { OffreServiceCiviqueRepositoryToken } from './domain/offre/favori/offre-service-civique' -import { - Recherche, - RecherchesRepositoryToken -} from './domain/offre/recherche/recherche' -import { SuggestionPoleEmploiService } from './domain/offre/recherche/suggestion/pole-emploi.service' -import { - Suggestion, - SuggestionsPoleEmploiRepositoryToken, - SuggestionsRepositoryToken -} from './domain/offre/recherche/suggestion/suggestion' +import { FavorisOffresImmersionRepositoryToken } from './domain/offre/favori/offre-immersion' import { PlanificateurRepositoryToken, PlanificateurService } from './domain/planificateur' -import { AnimationCollectiveRepositoryToken } from './domain/rendez-vous/animation-collective' -import { HistoriqueRendezVousRepositoryToken } from './domain/rendez-vous/historique' +import { + Recherche, + RecherchesRepositoryToken +} from './domain/offre/recherche/recherche' import { RendezVous, RendezVousRepositoryToken } from './domain/rendez-vous/rendez-vous' -import { SuiviJobServiceToken } from './domain/suivi-job' import { SuperviseursRepositoryToken } from './domain/superviseur' +import { SuiviJobServiceToken } from './domain/suivi-job' import { ApiKeyAuthGuard } from './infrastructure/auth/api-key.auth-guard' import { JwtService } from './infrastructure/auth/jwt.service' import { OidcAuthGuard } from './infrastructure/auth/oidc.auth-guard' -import { BigqueryClient } from './infrastructure/clients/bigquery.client' -import { DiagorienteClient } from './infrastructure/clients/diagoriente-client' import { EngagementClient } from './infrastructure/clients/engagement-client' import { FirebaseClient } from './infrastructure/clients/firebase-client' import { ImmersionClient } from './infrastructure/clients/immersion-client' -import { InvitationIcsClient } from './infrastructure/clients/invitation-ics.client' +import { DiagorienteClient } from './infrastructure/clients/diagoriente-client' import { KeycloakClient } from './infrastructure/clients/keycloak-client' import { MailSendinblueService } from './infrastructure/clients/mail-sendinblue.service' -import { MatomoClient } from './infrastructure/clients/matomo-client' -import { MiloClient } from './infrastructure/clients/milo-client' import { ObjectStorageClient } from './infrastructure/clients/object-storage.client' import { PoleEmploiClient } from './infrastructure/clients/pole-emploi-client' -import { - PoleEmploiPartenaireClient, - PoleEmploiPartenaireClientToken, - PoleEmploiPartenaireInMemoryClient -} from './infrastructure/clients/pole-emploi-partenaire-client' import { SuiviJobService } from './infrastructure/clients/suivi-job.service.db' -import { ActionMiloHttpRepository } from './infrastructure/repositories/action/action-milo-http-sql.repository' import { ActionSqlRepository } from './infrastructure/repositories/action/action-sql.repository.db' -import { CommentaireActionSqlRepositoryDb } from './infrastructure/repositories/action/commentaire-action-sql.repository.db' -import { AgenceSqlRepository } from './infrastructure/repositories/agence-sql.repository.db' -import { ArchiveJeuneSqlRepository } from './infrastructure/repositories/archive-jeune-sql.repository.db' import { AuthentificationSqlRepository } from './infrastructure/repositories/authentification-sql.repository.db' -import { CampagneSqlRepository } from './infrastructure/repositories/campagne-sql.repository.db' import { ChatFirebaseRepository } from './infrastructure/repositories/chat-firebase.repository' import { ConseillerSqlRepository } from './infrastructure/repositories/conseiller-sql.repository.db' -import { ListeDeDiffusionSqlRepository } from './infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db' -import { DemarcheHttpRepository } from './infrastructure/repositories/demarche-http.repository' import { EvenementSqlRepository } from './infrastructure/repositories/evenement-sql.repository.db' import { FichierSqlS3Repository } from './infrastructure/repositories/fichier-sql-s3.repository.db' import { JeuneConfigurationApplicationSqlRepository } from './infrastructure/repositories/jeune/jeune-configuration-application-sql.repository.db' -import { JeunePoleEmploiSqlRepository } from './infrastructure/repositories/jeune/jeune-pole-emploi-sql.repository.db' import { JeuneSqlRepository } from './infrastructure/repositories/jeune/jeune-sql.repository.db' import { MailSqlRepository } from './infrastructure/repositories/mail-sql.repository.db' -import { ConseillerMiloSqlRepository } from './infrastructure/repositories/milo/conseiller.milo.repository.db' -import { EvenementMiloHttpRepository } from './infrastructure/repositories/milo/evenement-milo-http.repository' import { MiloJeuneHttpSqlRepository } from './infrastructure/repositories/milo/jeune-milo-http-sql.repository.db' -import { RendezVousMiloHttpRepository } from './infrastructure/repositories/milo/rendez-vous-milo-http.repository' -import { SessionMiloHttpSqlRepository } from './infrastructure/repositories/milo/session-milo-http-sql.repository.db' import { NotificationFirebaseRepository } from './infrastructure/repositories/notification-firebase.repository' import { OffresEmploiHttpSqlRepository } from './infrastructure/repositories/offre/offre-emploi-http-sql.repository.db' -import { FavorisOffresImmersionSqlRepository } from './infrastructure/repositories/offre/offre-immersion-http-sql.repository.db' import { OffreServiceCiviqueHttpSqlRepository } from './infrastructure/repositories/offre/offre-service-civique-http.repository.db' -import { RechercheSqlRepository } from './infrastructure/repositories/offre/recherche/recherche-sql.repository.db' -import { SuggestionPeHttpRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-pe-http.repository.db' -import { SuggestionSqlRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-sql.repository.db' +import { FavorisOffresImmersionSqlRepository } from './infrastructure/repositories/offre/offre-immersion-http-sql.repository.db' import { PlanificateurRedisRepository } from './infrastructure/repositories/planificateur-redis.repository.db' -import { AnimationCollectiveSqlRepository } from './infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db' -import { HistoriqueRendezVousRepositorySql } from './infrastructure/repositories/rendez-vous/historique-rendez-vous.repository.db' +import { RechercheSqlRepository } from './infrastructure/repositories/offre/recherche/recherche-sql.repository.db' import { RendezVousRepositorySql } from './infrastructure/repositories/rendez-vous/rendez-vous-sql.repository.db' import { SuperviseurSqlRepository } from './infrastructure/repositories/superviseur-sql.repository.db' import { ActionsController } from './infrastructure/routes/actions.controller' import { AuthentificationController } from './infrastructure/routes/authentification.controller' -import { CampagnesController } from './infrastructure/routes/campagnes.controller' import { ConseillersController } from './infrastructure/routes/conseillers.controller' -import { ConseillersMiloController } from './infrastructure/routes/conseillers.milo.controller' import { ConseillersPoleEmploiController } from './infrastructure/routes/conseillers.pole-emploi.controller' -import { DiagorienteController } from './infrastructure/routes/diagoriente.controller' -import { EtablissementsController } from './infrastructure/routes/etablissements.controller' -import { EvenementsEmploiController } from './infrastructure/routes/evenements-emploi.controller' import { EvenementsController } from './infrastructure/routes/evenements.controller' import { FavorisController } from './infrastructure/routes/favoris.controller' -import { FilesController } from './infrastructure/routes/fichiers.controller' import { HealthController } from './infrastructure/routes/health.controller' import { JeunesController } from './infrastructure/routes/jeunes.controller' import { JeunesMiloController } from './infrastructure/routes/jeunes.milo.controller' -import { JeunesPoleEmploiController } from './infrastructure/routes/jeunes.pole-emploi.controller' -import { ListesDeDiffusionController } from './infrastructure/routes/listes-de-diffusion.controller' -import { MessagesController } from './infrastructure/routes/messages.controller' +import { JeunesControllerV2 } from './infrastructure/routes/v2/jeunes.controller.v2' +import { ConseillersControllerV2 } from './infrastructure/routes/v2/conseillers.controller.v2' import { OffresEmploiController } from './infrastructure/routes/offres-emploi.controller' import { OffresImmersionController } from './infrastructure/routes/offres-immersion.controller' -import { RecherchesConseillersController } from './infrastructure/routes/recherches-conseillers.controller' import { RecherchesJeunesController } from './infrastructure/routes/recherches-jeunes.controller' +import { RecherchesConseillersController } from './infrastructure/routes/recherches-conseillers.controller' import { ReferentielsController } from './infrastructure/routes/referentiels.controller' import { RendezVousController } from './infrastructure/routes/rendez-vous.controller' import { ServicesCiviqueController } from './infrastructure/routes/services-civique.controller' -import { StructuresMiloController } from './infrastructure/routes/structures-milo.controller' -import { SupportController } from './infrastructure/routes/support.controller' -import { ConseillersControllerV2 } from './infrastructure/routes/v2/conseillers.controller.v2' -import { ConseillersMiloControllerv2 } from './infrastructure/routes/v2/conseillers.milo.controller.v2' -import { EtablissementsControllerV2 } from './infrastructure/routes/v2/etablissements.controller.v2' -import { JeunesControllerV2 } from './infrastructure/routes/v2/jeunes.controller.v2' import { databaseProviders } from './infrastructure/sequelize/providers' -import { ChatCryptoService } from './utils/chat-crypto-service' import { DateService } from './utils/date-service' import { IdService } from './utils/id-service' import { configureLoggerModule } from './utils/logger.module' +import { + PoleEmploiPartenaireClient, + PoleEmploiPartenaireClientToken, + PoleEmploiPartenaireInMemoryClient +} from './infrastructure/clients/pole-emploi-partenaire-client' +import { GetDemarchesQueryHandler } from './application/queries/get-demarches.query.handler' +import { GetCatalogueDemarchesQueryHandler } from './application/queries/get-catalogue-demarches.query.handler' +import { GetJeuneMiloByDossierQueryHandler } from './application/queries/get-jeune-milo-by-dossier.query.handler.db' +import { UpdateRendezVousCommandHandler } from './application/commands/update-rendez-vous.command.handler' +import { InvitationIcsClient } from './infrastructure/clients/invitation-ics.client' +import { Mail, MailRepositoryToken, MailServiceToken } from './domain/mail' +import { ChatCryptoService } from './utils/chat-crypto-service' +import { DeleteJeuneCommandHandler } from './application/commands/delete-jeune.command.handler' +import { AgenceRepositoryToken } from './domain/agence' +import { AgenceSqlRepository } from './infrastructure/repositories/agence-sql.repository.db' +import { GetAgencesQueryHandler } from './application/queries/get-agences.query.handler.db' +import { ModifierConseillerCommandHandler } from './application/commands/modifier-conseiller.command.handler' +import { GetFavorisServiceCiviqueJeuneQueryHandler } from './application/queries/get-favoris-service-civique-jeune.query.handler.db' +import { RecupererSituationsJeunesMiloJobHandler } from './application/jobs/recuperer-situations-jeunes-milo.job.handler' +import { CampagnesController } from './infrastructure/routes/campagnes.controller' +import { Campagne, CampagneRepositoryToken } from './domain/campagne' +import { CampagneSqlRepository } from './infrastructure/repositories/campagne-sql.repository.db' +import { CreateCampagneCommandHandler } from './application/commands/campagne/create-campagne.command' +import { GetJeuneHomeDemarchesQueryHandler } from './application/queries/get-jeune-home-demarches.query.handler' +import { GetJeuneHomeActionsQueryHandler } from './application/queries/get-jeune-home-actions.query.handler' +import { GetCampagneQueryGetter } from './application/queries/query-getters/get-campagne.query.getter' +import { CreateEvaluationCommandHandler } from './application/commands/campagne/create-evaluation.command' +import { DemarcheHttpRepository } from './infrastructure/repositories/demarche-http.repository' +import { Demarche, DemarcheRepositoryToken } from './domain/demarche' +import { UpdateStatutDemarcheCommandHandler } from './application/commands/demarche/update-demarche.command.handler' +import { CreateDemarcheCommandHandler } from './application/commands/demarche/create-demarche.command.handler' +import { RechercherTypesDemarcheQueryHandler } from './application/queries/rechercher-types-demarche.query.handler' +import { FilesController } from './infrastructure/routes/fichiers.controller' +import { TelechargerFichierQueryHandler } from './application/queries/telecharger-fichier.query.handler' +import { SupprimerFichierCommandHandler } from './application/commands/supprimer-fichier.command.handler' +import { FichierAuthorizer } from './application/authorizers/fichier-authorizer' +import { FindAllOffresEmploiQueryGetter } from './application/queries/query-getters/find-all-offres-emploi.query.getter' +import { FindAllOffresImmersionQueryGetter } from './application/queries/query-getters/find-all-offres-immersion.query.getter' +import { FindAllOffresServicesCiviqueQueryGetter } from './application/queries/query-getters/find-all-offres-services-civique.query.getter' +import { RecupererJeunesDuConseillerCommandHandler } from './application/commands/recuperer-jeunes-du-conseiller.command.handler' +import { ArchiverJeuneCommandHandler } from './application/commands/archiver-jeune.command.handler' +import { ArchiveJeuneRepositoryToken } from './domain/archive-jeune' +import { ArchiveJeuneSqlRepository } from './infrastructure/repositories/archive-jeune-sql.repository.db' +import { GetMotifsSuppressionJeuneQueryHandler } from './application/queries/get-motifs-suppression-jeune.query.handler' import { RateLimiterService } from './utils/rate-limiter.service' +import { UpdateJeunePreferencesCommandHandler } from './application/commands/update-preferences-jeune.command.handler' +import { GetPreferencesJeuneQueryHandler } from './application/queries/get-preferences-jeune.handler.db' +import { GetRendezVousConseillerPaginesQueryHandler } from './application/queries/rendez-vous/get-rendez-vous-conseiller-pagines.query.handler.db' +import { GetFavorisJeuneQueryHandler } from './application/queries/favoris/get-favoris-jeune.query.handler.db' +import { GetMetadonneesFavorisJeuneQueryHandler } from './application/queries/favoris/get-metadonnees-favoris-jeune.query.handler.db' +import { AddCommentaireActionCommandHandler } from './application/commands/action/add-commentaire-action.command.handler' +import { ModifierJeuneDuConseillerCommandHandler } from './application/commands/modifier-jeune-du-conseiller.command.handler' +import { CommentaireActionSqlRepositoryDb } from './infrastructure/repositories/action/commentaire-action-sql.repository.db' +import { GetCommentairesActionQueryHandler } from './application/queries/action/get-commentaires-action.query.handler.db' +import { GetJeuneHomeAgendaQueryHandler } from './application/queries/get-jeune-home-agenda.query.handler.db' +import { JeunePoleEmploiSqlRepository } from './infrastructure/repositories/jeune/jeune-pole-emploi-sql.repository.db' +import { GetTypesQualificationsQueryHandler } from './application/queries/action/get-types-qualifications.query.handler' +import { ActionMiloHttpRepository } from './infrastructure/repositories/action/action-milo-http-sql.repository' +import { QualifierActionCommandHandler } from './application/commands/action/qualifier-action.command.handler' +import { GetSuiviSemainePoleEmploiQueryHandler } from './application/queries/get-suivi-semaine-pole-emploi.query.handler' +import { GetDemarchesQueryGetter } from './application/queries/query-getters/pole-emploi/get-demarches.query.getter' +import { GetRecherchesSauvegardeesQueryGetter } from './application/queries/query-getters/accueil/get-recherches-sauvegardees.query.getter.db' +import { GetRendezVousJeunePoleEmploiQueryGetter } from './application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter' +import { GetIndicateursPourConseillerQueryHandler } from './application/queries/get-indicateurs-pour-conseiller.query.handler.db' +import { NettoyerLesDonneesJobHandler } from './application/jobs/nettoyer-les-donnees.job.handler.db' +import { RafraichirSuggestionsCommandHandler } from './application/commands/rafraichir-suggestions.command.handler' +import { SuggestionPeHttpRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-pe-http.repository.db' +import { + Suggestion, + SuggestionsPoleEmploiRepositoryToken, + SuggestionsRepositoryToken +} from './domain/offre/recherche/suggestion/suggestion' +import { SuggestionSqlRepository } from './infrastructure/repositories/offre/recherche/suggestion/suggestion-sql.repository.db' +import { GetSuggestionsQueryHandler } from './application/queries/get-suggestions.query.handler.db' +import { SuggestionPoleEmploiService } from './domain/offre/recherche/suggestion/pole-emploi.service' +import { RefuserSuggestionCommandHandler } from './application/commands/refuser-suggestion.command.handler' +import { CreateRechercheFromSuggestionCommandHandler } from './application/commands/create-recherche-from-suggestion.command.handler' +import { SuggestionAuthorizer } from './application/authorizers/suggestion-authorizer' +import { GetMetiersRomeQueryHandler } from './application/queries/get-metiers-rome.query.handler.db' +import { CreateSuggestionConseillerOffreEmploiCommandHandler } from './application/commands/create-suggestion-conseiller-offre-emploi.command.handler' +import { CreateSuggestionConseillerServiceCiviqueCommandHandler } from './application/commands/create-suggestion-conseiller-service-civique.command.handler' +import { CreateSuggestionConseillerImmersionCommandHandler } from './application/commands/create-suggestion-conseiller-immersion.command.handler' +import { EtablissementsController } from './infrastructure/routes/etablissements.controller' +import { EtablissementsControllerV2 } from './infrastructure/routes/v2/etablissements.controller.v2' +import { ConseillerInterAgenceAuthorizer } from './application/authorizers/conseiller-inter-agence-authorizer' +import { AnimationCollectiveSqlRepository } from './infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db' +import { HistoriqueRendezVousRepositorySql } from './infrastructure/repositories/rendez-vous/historique-rendez-vous.repository.db' +import { CloturerAnimationCollectiveCommandHandler } from './application/commands/cloturer-animation-collective.command.handler' +import { GetAnimationsCollectivesQueryHandler } from './application/queries/rendez-vous/get-animations-collectives.query.handler.db' +import { GetAnimationsCollectivesV2QueryHandler } from './application/queries/rendez-vous/get-animations-collectives-v2.query.handler.db' +import { AnimationCollectiveRepositoryToken } from './domain/rendez-vous/animation-collective' +import { HistoriqueRendezVousRepositoryToken } from './domain/rendez-vous/historique' +import { GetAnimationsCollectivesJeuneQueryHandler } from './application/queries/rendez-vous/get-animations-collectives-jeune.query.handler.db' +import { GetUnRendezVousJeuneQueryHandler } from './application/queries/rendez-vous/get-un-rendez-vous-jeune.query.handler.db' +import { CreateListeDeDiffusionCommandHandler } from './application/commands/create-liste-de-diffusion.command.handler' +import { ListeDeDiffusionSqlRepository } from './infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db' +import { ListeDeDiffusionRepositoryToken } from './domain/conseiller/liste-de-diffusion' +import { GetListesDeDiffusionDuConseillerQueryHandler } from './application/queries/get-listes-de-diffusion-du-conseiller.query.handler.db' +import { ListesDeDiffusionController } from './infrastructure/routes/listes-de-diffusion.controller' +import { ListeDeDiffusionAuthorizer } from './application/authorizers/liste-de-diffusion-authorizer' +import { UpdateListeDeDiffusionCommandHandler } from './application/commands/update-liste-de-diffusion.command.handler' +import { GetDetailListeDeDiffusionQueryHandler } from './application/queries/get-detail-liste-de-diffusion.query.handler.db' +import { BigqueryClient } from './infrastructure/clients/bigquery.client' +import { MessagesController } from './infrastructure/routes/messages.controller' +import { SupportController } from './infrastructure/routes/support.controller' +import { RefreshJddCommandHandler } from './application/commands/refresh-jdd.command.handler' +import { RendezVousMiloHttpRepository } from './infrastructure/repositories/milo/rendez-vous-milo-http.repository' +import { EvenementMiloHttpRepository } from './infrastructure/repositories/milo/evenement-milo-http.repository' +import { TraiterEvenementMiloJobHandler } from './application/jobs/traiter-evenement-milo.job.handler' +import { + RendezVousMiloRepositoryToken, + RendezVousMilo +} from './domain/milo/rendez-vous.milo' +import { MiloJeuneRepositoryToken } from './domain/milo/jeune.milo' +import { MettreAJourLesJeunesCejPeCommandHandler } from './application/commands/mettre-a-jour-les-jeunes-cej-pe.command.handler' +import { UpdateAgenceConseillerCommandHandler } from './application/commands/support/update-agence-conseiller.command.handler' +import { GetActionsConseillerV2QueryHandler } from './application/queries/action/get-actions-conseiller-v2.query.handler.db' +import { DiagorienteController } from './infrastructure/routes/diagoriente.controller' +import { GetDiagorienteUrlsQueryHandler } from './application/queries/get-diagoriente-urls.query.handler' +import { ArchiverJeuneSupportCommandHandler } from './application/commands/support/archiver-jeune-support.command.handler' +import { GetDiagorienteMetiersFavorisQueryHandler } from './application/queries/get-diagoriente-metiers-favoris.query.handler' +import { EnvoyerFormulaireContactImmersionCommandHandler } from './application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' +import { GetAccueilJeuneMiloQueryHandler } from './application/queries/accueil/get-accueil-jeune-milo.query.handler.db' +import { GetAccueilJeunePoleEmploiQueryHandler } from './application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db' +import { JeunesPoleEmploiController } from './infrastructure/routes/jeunes.pole-emploi.controller' +import { DumpForAnalyticsJobHandler } from './application/jobs/analytics/0-dump-for-analytics.job' +import { EnrichirEvenementsJobHandler } from './application/jobs/analytics/2-enrichir-les-evenements.job' +import { ChargerLesVuesJobHandler } from './application/jobs/analytics/3-charger-les-vues.job' +import { ChargerEvenementsJobHandler } from './application/jobs/analytics/1-charger-les-evenements.job' +import { InitialiserLesVuesJobHandler } from './application/jobs/analytics/initialiser-les-vues.job' +import { DeleteConseillerCommandHandler } from './application/commands/conseiller/delete-conseiller.command.handler' +import { GetFavorisAccueilQueryGetter } from './application/queries/query-getters/accueil/get-favoris.query.getter.db' +import { GetCVPoleEmploiQueryHandler } from './application/queries/get-cv-pole-emploi.query.handler' +import { EvenementsEmploiController } from './infrastructure/routes/evenements-emploi.controller' +import { GetEvenementsEmploiQueryHandler } from './application/queries/get-evenements-emploi.query.handler' +import { GetEvenementEmploiQueryHandler } from './application/queries/get-evenement-emploi.query.handler' +import { GetSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db' +import { MiloClient } from './infrastructure/clients/milo-client' +import { ConseillerMiloRepositoryToken } from './domain/milo/conseiller.milo.db' +import { ConseillerMiloSqlRepository } from './infrastructure/repositories/milo/conseiller.milo.repository.db' +import { ConseillersMiloController } from './infrastructure/routes/conseillers.milo.controller' +import { EvenementEmploiCodePostalQueryGetter } from 'src/application/queries/query-getters/evenement-emploi-code-postal.query.getter' +import { GetDetailSessionConseillerMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db' +import { UpdateSessionMiloCommandHandler } from './application/commands/milo/update-session-milo.command.handler' +import { SessionMiloRepositoryToken } from './domain/milo/session.milo' +import { SessionMiloHttpSqlRepository } from './infrastructure/repositories/milo/session-milo-http-sql.repository.db' +import { GetSessionsJeuneMiloQueryHandler } from 'src/application/queries/milo/get-sessions-jeune.milo.query.handler.db' +import { SuivreEvenementsMiloCronJobHandler } from './application/jobs/suivre-file-evenements-milo.job.handler' +import { MonitorJobsJobHandler } from './application/jobs/monitor-jobs.job.handler.db' +import { NettoyerPiecesJointesJobHandler } from './application/jobs/nettoyer-pieces-jointes.job.handler' +import { NettoyerLesJobsJobHandler } from './application/jobs/nettoyer-les-jobs.job.handler' +import { FakeJobHandler } from './application/jobs/fake.job.handler' +import { NotifierRappelRendezVousJobHandler } from './application/jobs/notifier-rappel-rendez-vous.job.handler' +import { NotifierRappelActionJobHandler } from './application/jobs/notifier-rappel-action.job.handler' +import { EnvoyerEmailsMessagesConseillersJobHandler } from './application/jobs/envoyer-emails-messages-conseillers.job.handler' +import { NotifierRecherchesOffreEmploiJobHandler } from './application/jobs/notifier-recherches-offre-emploi.job.handler' +import { MajCodesEvenementsJobHandler } from './application/jobs/maj-codes-evenements.job.handler' +import { NotifierRendezVousPEJobHandler } from './application/jobs/notifier-rendez-vous-pole-emploi.job.handler' +import { MajMailingListConseillerJobHandler } from './application/jobs/maj-mailing-list-conseiller.job.handler' +import { NotifierRecherchesServiceCiviqueJobHandler } from './application/jobs/notifier-recherches-service-civique.job.handler' +import { HandleJobGenererJDDCommandHandler } from './application/jobs/generer-jdd.job.handler' +import { MajSegmentsJobHandler } from './application/jobs/maj-segments.job.handler.db' +import { GetDetailSessionJeuneMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-jeune.milo.query.handler.db' +import { GetSessionsJeuneMiloQueryGetter } from 'src/application/queries/query-getters/milo/get-sessions-jeune.milo.query.getter.db' +import { EmargementSessionMiloCommandHandler } from 'src/application/commands/milo/emargement-session-milo.command.handler' +import { GetSessionsConseillerMiloQueryGetter } from './application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db' +import { ConseillerInterStructureMiloAuthorizer } from './application/authorizers/conseiller-inter-structure-milo-authorizer' +import { GetAgendaSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db' +import { GetSessionsConseillerMiloV2QueryGetter } from './application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db' +import { GetSessionsConseillerMiloV2QueryHandler } from './application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db' +import { ConseillersMiloControllerv2 } from './infrastructure/routes/v2/conseillers.milo.controller.v2' +import { MatomoClient } from './infrastructure/clients/matomo-client' +import { GetJeunesByStructureMiloQueryHandler } from './application/queries/milo/get-jeunes-by-structure-milo.query.handler.db' +import { StructuresMiloController } from './infrastructure/routes/structures-milo.controller' +import { GetJeunesEtablissementV2QueryHandler } from './application/queries/get-jeunes-etablissement-v2.query.handler.db' +import { GetJeunesByEtablissementQueryHandler } from './application/queries/get-jeunes-by-etablissement.query.handler.db' +import { AppMobileCacheControlMiddleware } from 'src/infrastructure/middlewares/app-mobile-cache-control.middleware' +import { EvenementMiloRepositoryToken } from './domain/milo/evenement.milo' +import { NotifierRappelInstanceSessionMiloJobHandler } from './application/jobs/notifier-rappel-instance-session-milo.job.handler' export const buildModuleMetadata = (): ModuleMetadata => ({ imports: [ diff --git a/src/domain/rendez-vous/rendez-vous.ts b/src/domain/rendez-vous/rendez-vous.ts index 2c048e834..7562198db 100644 --- a/src/domain/rendez-vous/rendez-vous.ts +++ b/src/domain/rendez-vous/rendez-vous.ts @@ -123,6 +123,7 @@ export interface RendezVous { icsSequence?: number createur: Createur idAgence?: string + idStructureMilo?: string dateCloture?: DateTime informationsPartenaire?: RendezVous.InformationsPartenaire nombreMaxParticipants?: number diff --git a/src/infrastructure/jdd/rendez-vous.jdd.ts b/src/infrastructure/jdd/rendez-vous.jdd.ts index 3a9124471..a6663fd21 100644 --- a/src/infrastructure/jdd/rendez-vous.jdd.ts +++ b/src/infrastructure/jdd/rendez-vous.jdd.ts @@ -29,6 +29,7 @@ export function unRendezVousJDD( icsSequence: null, dateCloture: null, idAgence: null, + idStructureMilo: null, createur: { id: '1', nom: 'Tavernier', prenom: 'Nils' }, typePartenaire: null, idPartenaire: null, diff --git a/src/infrastructure/repositories/mappers/rendez-vous.mappers.ts b/src/infrastructure/repositories/mappers/rendez-vous.mappers.ts index c32bef446..250ff5b8b 100644 --- a/src/infrastructure/repositories/mappers/rendez-vous.mappers.ts +++ b/src/infrastructure/repositories/mappers/rendez-vous.mappers.ts @@ -32,6 +32,7 @@ export function toRendezVousDto(rendezVous: RendezVous): AsSql { icsSequence: rendezVous.icsSequence ?? null, createur: rendezVous.createur, idAgence: rendezVous.idAgence ?? null, + idStructureMilo: rendezVous.idStructureMilo ?? null, typePartenaire: rendezVous.informationsPartenaire?.type ?? null, idPartenaire: rendezVous.informationsPartenaire?.id ?? null, nombreMaxParticipants: rendezVous.nombreMaxParticipants ?? null @@ -59,6 +60,7 @@ export function toRendezVous(rendezVousSql: RendezVousSqlModel): RendezVous { createur: rendezVousSql.createur, dateCloture: DateService.fromJSDateToDateTime(rendezVousSql.dateCloture), idAgence: rendezVousSql.idAgence ?? undefined, + idStructureMilo: rendezVousSql.idStructureMilo ?? undefined, informationsPartenaire: buildInformationsPartenaire(rendezVousSql), nombreMaxParticipants: rendezVousSql.nombreMaxParticipants ?? undefined } diff --git a/src/infrastructure/sequelize/migrations/20231206080808-ajout-structure-milo-rdv.js b/src/infrastructure/sequelize/migrations/20231206080808-ajout-structure-milo-rdv.js new file mode 100644 index 000000000..2f777fc33 --- /dev/null +++ b/src/infrastructure/sequelize/migrations/20231206080808-ajout-structure-milo-rdv.js @@ -0,0 +1,29 @@ +'use strict' + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.sequelize.transaction(async transaction => { + await queryInterface.addColumn( + 'rendez_vous', + 'id_structure_milo', + { + type: Sequelize.STRING, + references: { + model: 'structure_milo', + key: 'id' + }, + allowNull: true + }, + { transaction } + ) + }) + }, + + down: async queryInterface => { + await queryInterface.sequelize.transaction(async transaction => { + await queryInterface.removeColumn('rendez_vous', 'id_structure_milo', { + transaction + }) + }) + } +} diff --git a/src/infrastructure/sequelize/models/rendez-vous.sql-model.ts b/src/infrastructure/sequelize/models/rendez-vous.sql-model.ts index 4e4ce7ae3..47c560a4c 100644 --- a/src/infrastructure/sequelize/models/rendez-vous.sql-model.ts +++ b/src/infrastructure/sequelize/models/rendez-vous.sql-model.ts @@ -16,6 +16,7 @@ import { AgenceSqlModel } from './agence.sql-model' import { JeuneSqlModel } from './jeune.sql-model' import { RendezVousJeuneAssociationSqlModel } from './rendez-vous-jeune-association.sql-model' import { LogModificationRendezVousSqlModel } from './log-modification-rendez-vous-sql.model' +import { StructureMiloSqlModel } from './structure-milo.sql-model' export class RendezVousDto extends Model { @PrimaryKey @@ -84,6 +85,13 @@ export class RendezVousDto extends Model { }) idAgence: string | null + @ForeignKey(() => StructureMiloSqlModel) + @Column({ + field: 'id_structure_milo', + type: DataType.STRING + }) + idStructureMilo: string | null + @Column({ field: 'type_partenaire', type: DataType.STRING diff --git a/test/fixtures/rendez-vous.fixture.ts b/test/fixtures/rendez-vous.fixture.ts index 23ce10434..8f4c16e62 100644 --- a/test/fixtures/rendez-vous.fixture.ts +++ b/test/fixtures/rendez-vous.fixture.ts @@ -29,6 +29,7 @@ export const unRendezVous = (args: Partial = {}): RendezVous => { icsSequence: undefined, dateCloture: undefined, idAgence: undefined, + idStructureMilo: undefined, precision: 'Ceci est une précision', createur: { id: '1', diff --git a/test/fixtures/sql-models/rendez-vous.sql-model.ts b/test/fixtures/sql-models/rendez-vous.sql-model.ts index 7a4cc57b8..8271f76b0 100644 --- a/test/fixtures/sql-models/rendez-vous.sql-model.ts +++ b/test/fixtures/sql-models/rendez-vous.sql-model.ts @@ -29,6 +29,7 @@ export function unRendezVousDto( icsSequence: null, dateCloture: null, idAgence: null, + idStructureMilo: null, createur: { id: '1', nom: 'Tavernier', prenom: 'Nils' }, source: RendezVous.Source.PASS_EMPLOI, typePartenaire: null, diff --git a/test/infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db.test.ts b/test/infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db.test.ts index f39b4e3e2..164be4eac 100644 --- a/test/infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db.test.ts +++ b/test/infrastructure/repositories/rendez-vous/animation-collective-sql.repository.db.test.ts @@ -174,6 +174,7 @@ describe('AnimationsCollectivesSqlRepository', () => { createur: uneACAVenir.createur, dateCloture: DateService.fromJSDateToDateTime(uneACAVenir.dateCloture), idAgence: uneACAVenir.idAgence!, + idStructureMilo: undefined, source: RendezVous.Source.PASS_EMPLOI, informationsPartenaire: undefined, nombreMaxParticipants: undefined @@ -279,6 +280,7 @@ describe('AnimationsCollectivesSqlRepository', () => { createur: uneACAVenir.createur, dateCloture: DateService.fromJSDateToDateTime(uneACAVenir.dateCloture), idAgence: uneACAVenir.idAgence!, + idStructureMilo: undefined, source: RendezVous.Source.PASS_EMPLOI, informationsPartenaire: undefined, nombreMaxParticipants: undefined @@ -337,6 +339,7 @@ describe('AnimationsCollectivesSqlRepository', () => { const animationCollectiveAvecUnJeuneDePlus: RendezVous.AnimationCollective = { ...uneAnimationCollectiveTest, + idStructureMilo: undefined, informationsPartenaire: undefined, jeunes: uneAnimationCollectiveTest.jeunes.concat(nouveauJeune) } @@ -353,11 +356,12 @@ describe('AnimationsCollectivesSqlRepository', () => { }) describe('quand on enlève un jeune du rendez-vous', () => { - it('met à jour les informations du animationCollective en supprimant une association quand on supprime un jeune', async () => { + it("met à jour les informations de l'animation collective en supprimant une association quand on supprime un jeune", async () => { // Given const rendezVousAvecUnJeuneDeMoins: RendezVous.AnimationCollective = { ...uneAnimationCollectiveTest, informationsPartenaire: undefined, + idStructureMilo: undefined, jeunes: uneAnimationCollectiveTest.jeunes.filter( jeune => jeune.id !== unAutreJeune.id ) @@ -375,7 +379,7 @@ describe('AnimationsCollectivesSqlRepository', () => { }) describe('quand on ne change pas le nombre de jeunes', () => { - it('met à jour les informations du animationCollective en ne rajoutant pas une association supplémentaire et en mettant à jour les informations de presence des jeunes', async () => { + it("met à jour les informations de l'animation collective en ne rajoutant pas une association supplémentaire et en mettant à jour les informations de presence des jeunes", async () => { // Given const uneAnimationCollectiveModifiee: RendezVous.AnimationCollective = { @@ -405,6 +409,7 @@ describe('AnimationsCollectivesSqlRepository', () => { expect(actual).to.deep.equal({ ...uneAnimationCollectiveModifiee, informationsPartenaire: undefined, + idStructureMilo: undefined, jeunes: [jeune, unAutreJeune] }) }) From c548d3cf241a08000a576f1168714bee5449ddb3 Mon Sep 17 00:00:00 2001 From: Malek Zemni Date: Mon, 11 Dec 2023 09:41:32 +0100 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20d=C3=A9placer=20les=20routes=20?= =?UTF-8?q?et=20les=20commandes=20Milo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.module.ts | 16 +- ...e-contact-immersion.command.handler.db.ts} | 0 .../creer-jeune-milo.command.handler.ts | 24 +- ...> emarger-session-milo.command.handler.ts} | 10 +- .../get-dossier-milo-jeune.query.handler.ts | 16 +- ...-jeune-milo-by-dossier.query.handler.db.ts | 18 +- .../action.milo.repository.ts} | 0 .../routes/conseillers.controller.ts | 97 +------- .../routes/conseillers.milo.controller.ts | 116 +++++++++- .../routes/jeunes.milo.controller.ts | 2 +- .../routes/jeunes.pole-emploi.controller.ts | 2 +- .../routes/offres-immersion.controller.ts | 2 +- ...tact-immersion.command.handler.db.test.ts} | 2 +- .../creer-jeune-milo.command.handler.test.ts | 34 +-- ...ement-session-milo.command.handler.test.ts | 18 +- ...t-dossier-milo-jeune.query.handler.test.ts | 14 +- ...e-milo-by-dossier.query.handler.db.test.ts | 20 +- .../action.milo.repository.test.ts} | 2 +- .../routes/conseillers.controller.test.ts | 217 +----------------- .../conseillers.milo.controller.test.ts | 208 +++++++++++++++++ .../offres-immersion.controller.test.ts | 2 +- 21 files changed, 410 insertions(+), 410 deletions(-) rename src/application/commands/immersion/{envoyer-formulaire-contact-immersion.command.handler.ts => envoyer-formulaire-contact-immersion.command.handler.db.ts} (100%) rename src/application/commands/{ => milo}/creer-jeune-milo.command.handler.ts (86%) rename src/application/commands/milo/{emargement-session-milo.command.handler.ts => emarger-session-milo.command.handler.ts} (90%) rename src/application/queries/{ => milo}/get-dossier-milo-jeune.query.handler.ts (66%) rename src/application/queries/{ => milo}/get-jeune-milo-by-dossier.query.handler.db.ts (68%) rename src/infrastructure/repositories/{action/action-milo-http-sql.repository.ts => milo/action.milo.repository.ts} (100%) rename test/application/commands/immersion/{envoyer-formulaire-contact-immersion.command.handler.test.ts => envoyer-formulaire-contact-immersion.command.handler.db.test.ts} (99%) rename test/application/commands/{ => milo}/creer-jeune-milo.command.handler.test.ts (89%) rename test/application/queries/{ => milo}/get-dossier-milo-jeune.query.handler.test.ts (79%) rename test/application/queries/{ => milo}/get-jeune-milo-by-dossier.query.handler.db.test.ts (77%) rename test/infrastructure/repositories/{action/action-milo-http-sql.repository.test.ts => milo/action.milo.repository.test.ts} (96%) diff --git a/src/app.module.ts b/src/app.module.ts index 8b6585c78..d86664fbb 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -27,7 +27,7 @@ import { CreateActionCommandHandler } from './application/commands/action/create import { CreateEvenementCommandHandler } from './application/commands/create-evenement.command.handler' import { CreateRechercheCommandHandler } from './application/commands/create-recherche.command.handler' import { CreateRendezVousCommandHandler } from './application/commands/create-rendez-vous.command.handler' -import { CreerJeuneMiloCommandHandler } from './application/commands/creer-jeune-milo.command.handler' +import { CreerJeuneMiloCommandHandler } from './application/commands/milo/creer-jeune-milo.command.handler' import { CreerJeunePoleEmploiCommandHandler } from './application/commands/creer-jeune-pole-emploi.command.handler' import { CreerSuperviseursCommandHandler } from './application/commands/creer-superviseurs.command.handler' import { DeleteActionCommandHandler } from './application/commands/action/delete-action.command.handler' @@ -67,7 +67,7 @@ import { GetDetailOffreEmploiQueryHandler } from './application/queries/get-deta import { GetDetailOffreImmersionQueryHandler } from './application/queries/get-detail-offre-immersion.query.handler' import { GetDetailRendezVousQueryHandler } from './application/queries/rendez-vous/get-detail-rendez-vous.query.handler.db' import { GetDetailOffreServiceCiviqueQueryHandler } from './application/queries/get-detail-offre-service-civique.query.handler' -import { GetDossierMiloJeuneQueryHandler } from './application/queries/get-dossier-milo-jeune.query.handler' +import { GetDossierMiloJeuneQueryHandler } from './application/queries/milo/get-dossier-milo-jeune.query.handler' import { GetFavorisOffresEmploiJeuneQueryHandler } from './application/queries/get-favoris-offres-emploi-jeune.query.handler.db' import { GetFavorisOffresImmersionJeuneQueryHandler } from './application/queries/get-favoris-offres-immersion-jeune.query.handler.db' import { GetHomeJeuneHandler } from './application/queries/get-home-jeune.query.handler' @@ -187,7 +187,7 @@ import { } from './infrastructure/clients/pole-emploi-partenaire-client' import { GetDemarchesQueryHandler } from './application/queries/get-demarches.query.handler' import { GetCatalogueDemarchesQueryHandler } from './application/queries/get-catalogue-demarches.query.handler' -import { GetJeuneMiloByDossierQueryHandler } from './application/queries/get-jeune-milo-by-dossier.query.handler.db' +import { GetJeuneMiloByDossierQueryHandler } from './application/queries/milo/get-jeune-milo-by-dossier.query.handler.db' import { UpdateRendezVousCommandHandler } from './application/commands/update-rendez-vous.command.handler' import { InvitationIcsClient } from './infrastructure/clients/invitation-ics.client' import { Mail, MailRepositoryToken, MailServiceToken } from './domain/mail' @@ -237,7 +237,7 @@ import { GetCommentairesActionQueryHandler } from './application/queries/action/ import { GetJeuneHomeAgendaQueryHandler } from './application/queries/get-jeune-home-agenda.query.handler.db' import { JeunePoleEmploiSqlRepository } from './infrastructure/repositories/jeune/jeune-pole-emploi-sql.repository.db' import { GetTypesQualificationsQueryHandler } from './application/queries/action/get-types-qualifications.query.handler' -import { ActionMiloHttpRepository } from './infrastructure/repositories/action/action-milo-http-sql.repository' +import { ActionMiloHttpRepository } from './infrastructure/repositories/milo/action.milo.repository' import { QualifierActionCommandHandler } from './application/commands/action/qualifier-action.command.handler' import { GetSuiviSemainePoleEmploiQueryHandler } from './application/queries/get-suivi-semaine-pole-emploi.query.handler' import { GetDemarchesQueryGetter } from './application/queries/query-getters/pole-emploi/get-demarches.query.getter' @@ -301,7 +301,7 @@ import { DiagorienteController } from './infrastructure/routes/diagoriente.contr import { GetDiagorienteUrlsQueryHandler } from './application/queries/get-diagoriente-urls.query.handler' import { ArchiverJeuneSupportCommandHandler } from './application/commands/support/archiver-jeune-support.command.handler' import { GetDiagorienteMetiersFavorisQueryHandler } from './application/queries/get-diagoriente-metiers-favoris.query.handler' -import { EnvoyerFormulaireContactImmersionCommandHandler } from './application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' +import { EnvoyerFormulaireContactImmersionCommandHandler } from './application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db' import { GetAccueilJeuneMiloQueryHandler } from './application/queries/accueil/get-accueil-jeune-milo.query.handler.db' import { GetAccueilJeunePoleEmploiQueryHandler } from './application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db' import { JeunesPoleEmploiController } from './infrastructure/routes/jeunes.pole-emploi.controller' @@ -344,7 +344,7 @@ import { HandleJobGenererJDDCommandHandler } from './application/jobs/generer-jd import { MajSegmentsJobHandler } from './application/jobs/maj-segments.job.handler.db' import { GetDetailSessionJeuneMiloQueryHandler } from 'src/application/queries/milo/get-detail-session-jeune.milo.query.handler.db' import { GetSessionsJeuneMiloQueryGetter } from 'src/application/queries/query-getters/milo/get-sessions-jeune.milo.query.getter.db' -import { EmargementSessionMiloCommandHandler } from 'src/application/commands/milo/emargement-session-milo.command.handler' +import { EmargerSessionMiloCommandHandler } from 'src/application/commands/milo/emarger-session-milo.command.handler' import { GetSessionsConseillerMiloQueryGetter } from './application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db' import { ConseillerInterStructureMiloAuthorizer } from './application/authorizers/conseiller-inter-structure-milo-authorizer' import { GetAgendaSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db' @@ -377,9 +377,9 @@ export const buildModuleMetadata = (): ModuleMetadata => ({ // De base ActionsController, JeunesController, + JeunesControllerV2, JeunesMiloController, JeunesPoleEmploiController, - JeunesControllerV2, ConseillersController, ConseillersControllerV2, ConseillersMiloController, @@ -778,7 +778,7 @@ export function buildQueryCommandsProviders(): Provider[] { GetDetailSessionConseillerMiloQueryHandler, GetDetailSessionJeuneMiloQueryHandler, UpdateSessionMiloCommandHandler, - EmargementSessionMiloCommandHandler, + EmargerSessionMiloCommandHandler, EvenementEmploiCodePostalQueryGetter, GetCatalogueDemarchesQueryHandler ] diff --git a/src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.ts b/src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db.ts similarity index 100% rename from src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.ts rename to src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db.ts diff --git a/src/application/commands/creer-jeune-milo.command.handler.ts b/src/application/commands/milo/creer-jeune-milo.command.handler.ts similarity index 86% rename from src/application/commands/creer-jeune-milo.command.handler.ts rename to src/application/commands/milo/creer-jeune-milo.command.handler.ts index b33e836b8..0305ecfe0 100644 --- a/src/application/commands/creer-jeune-milo.command.handler.ts +++ b/src/application/commands/milo/creer-jeune-milo.command.handler.ts @@ -1,36 +1,36 @@ import { Inject, Injectable } from '@nestjs/common' -import { Command } from '../../building-blocks/types/command' -import { CommandHandler } from '../../building-blocks/types/command-handler' +import { Command } from '../../../building-blocks/types/command' +import { CommandHandler } from '../../../building-blocks/types/command-handler' import { DossierExisteDejaError, EmailExisteDejaError, MauvaiseCommandeError, NonTrouveError -} from '../../building-blocks/types/domain-error' +} from '../../../building-blocks/types/domain-error' import { Result, failure, isFailure, isSuccess, success -} from '../../building-blocks/types/result' +} from '../../../building-blocks/types/result' import { Authentification, AuthentificationRepositoryToken -} from '../../domain/authentification' -import { Chat, ChatRepositoryToken } from '../../domain/chat' +} from '../../../domain/authentification' +import { Chat, ChatRepositoryToken } from '../../../domain/chat' import { Conseiller, ConseillersRepositoryToken -} from '../../domain/conseiller/conseiller' -import { Core, estMilo } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +} from '../../../domain/conseiller/conseiller' +import { Core, estMilo } from '../../../domain/core' +import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' import { JeuneMilo, MiloJeuneRepositoryToken -} from '../../domain/milo/jeune.milo' -import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' -import { IdentiteJeuneQueryModel } from '../queries/query-models/jeunes.query-model' +} from '../../../domain/milo/jeune.milo' +import { ConseillerAuthorizer } from '../../authorizers/conseiller-authorizer' +import { IdentiteJeuneQueryModel } from '../../queries/query-models/jeunes.query-model' export interface CreerJeuneMiloCommand extends Command { idPartenaire: string diff --git a/src/application/commands/milo/emargement-session-milo.command.handler.ts b/src/application/commands/milo/emarger-session-milo.command.handler.ts similarity index 90% rename from src/application/commands/milo/emargement-session-milo.command.handler.ts rename to src/application/commands/milo/emarger-session-milo.command.handler.ts index 80cf088b2..c5ce372d9 100644 --- a/src/application/commands/milo/emargement-session-milo.command.handler.ts +++ b/src/application/commands/milo/emarger-session-milo.command.handler.ts @@ -18,7 +18,7 @@ import { Conseiller } from '../../../domain/conseiller/conseiller' import { KeycloakClient } from '../../../infrastructure/clients/keycloak-client' import { DateService } from 'src/utils/date-service' -export interface EmargementSessionMiloCommand extends Command { +export interface EmargerSessionMiloCommand extends Command { idSession: string idConseiller: string accessToken: string @@ -26,8 +26,8 @@ export interface EmargementSessionMiloCommand extends Command { } @Injectable() -export class EmargementSessionMiloCommandHandler extends CommandHandler< - EmargementSessionMiloCommand, +export class EmargerSessionMiloCommandHandler extends CommandHandler< + EmargerSessionMiloCommand, void > { constructor( @@ -42,7 +42,7 @@ export class EmargementSessionMiloCommandHandler extends CommandHandler< super('UpdateSessionMiloCommandHandler') } - async handle(command: EmargementSessionMiloCommand): Promise { + async handle(command: EmargerSessionMiloCommand): Promise { const conseillerMiloResult = await this.conseillerMiloRepository.get( command.idConseiller ) @@ -84,7 +84,7 @@ export class EmargementSessionMiloCommandHandler extends CommandHandler< } async authorize( - command: EmargementSessionMiloCommand, + command: EmargerSessionMiloCommand, utilisateur: Authentification.Utilisateur ): Promise { return this.conseillerAuthorizer.autoriserLeConseiller( diff --git a/src/application/queries/get-dossier-milo-jeune.query.handler.ts b/src/application/queries/milo/get-dossier-milo-jeune.query.handler.ts similarity index 66% rename from src/application/queries/get-dossier-milo-jeune.query.handler.ts rename to src/application/queries/milo/get-dossier-milo-jeune.query.handler.ts index 6013158ee..a048729bf 100644 --- a/src/application/queries/get-dossier-milo-jeune.query.handler.ts +++ b/src/application/queries/milo/get-dossier-milo-jeune.query.handler.ts @@ -1,15 +1,15 @@ import { Inject, Injectable } from '@nestjs/common' -import { Query } from '../../building-blocks/types/query' -import { QueryHandler } from '../../building-blocks/types/query-handler' -import { Result } from '../../building-blocks/types/result' -import { Authentification } from '../../domain/authentification' -import { estMilo } from '../../domain/core' +import { Query } from '../../../building-blocks/types/query' +import { QueryHandler } from '../../../building-blocks/types/query-handler' +import { Result } from '../../../building-blocks/types/result' +import { Authentification } from '../../../domain/authentification' +import { estMilo } from '../../../domain/core' import { JeuneMilo, MiloJeuneRepositoryToken -} from '../../domain/milo/jeune.milo' -import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' -import { DossierJeuneMiloQueryModel } from './query-models/milo.query-model' +} from '../../../domain/milo/jeune.milo' +import { ConseillerAuthorizer } from '../../authorizers/conseiller-authorizer' +import { DossierJeuneMiloQueryModel } from '../query-models/milo.query-model' export interface GetDossierMiloJeuneQuery extends Query { idDossier: string diff --git a/src/application/queries/get-jeune-milo-by-dossier.query.handler.db.ts b/src/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db.ts similarity index 68% rename from src/application/queries/get-jeune-milo-by-dossier.query.handler.db.ts rename to src/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db.ts index 5acb64ac6..6619250e9 100644 --- a/src/application/queries/get-jeune-milo-by-dossier.query.handler.db.ts +++ b/src/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db.ts @@ -1,13 +1,13 @@ import { Injectable } from '@nestjs/common' -import { NonTrouveError } from '../../building-blocks/types/domain-error' -import { Query } from '../../building-blocks/types/query' -import { QueryHandler } from '../../building-blocks/types/query-handler' -import { Result, failure, success } from '../../building-blocks/types/result' -import { Authentification } from '../../domain/authentification' -import { estMilo } from '../../domain/core' -import { JeuneSqlModel } from '../../infrastructure/sequelize/models/jeune.sql-model' -import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' -import { JeuneQueryModel } from './query-models/jeunes.query-model' +import { NonTrouveError } from '../../../building-blocks/types/domain-error' +import { Query } from '../../../building-blocks/types/query' +import { QueryHandler } from '../../../building-blocks/types/query-handler' +import { Result, failure, success } from '../../../building-blocks/types/result' +import { Authentification } from '../../../domain/authentification' +import { estMilo } from '../../../domain/core' +import { JeuneSqlModel } from '../../../infrastructure/sequelize/models/jeune.sql-model' +import { ConseillerAuthorizer } from '../../authorizers/conseiller-authorizer' +import { JeuneQueryModel } from '../query-models/jeunes.query-model' export interface GetJeuneMiloByDossierQuery extends Query { idDossier: string diff --git a/src/infrastructure/repositories/action/action-milo-http-sql.repository.ts b/src/infrastructure/repositories/milo/action.milo.repository.ts similarity index 100% rename from src/infrastructure/repositories/action/action-milo-http-sql.repository.ts rename to src/infrastructure/repositories/milo/action.milo.repository.ts diff --git a/src/infrastructure/routes/conseillers.controller.ts b/src/infrastructure/routes/conseillers.controller.ts index 273827486..6c49481a7 100644 --- a/src/infrastructure/routes/conseillers.controller.ts +++ b/src/infrastructure/routes/conseillers.controller.ts @@ -4,7 +4,6 @@ import { Delete, Get, HttpCode, - HttpException, HttpStatus, Param, Post, @@ -33,10 +32,6 @@ import { CreateRendezVousCommand, CreateRendezVousCommandHandler } from '../../application/commands/create-rendez-vous.command.handler' -import { - CreerJeuneMiloCommand, - CreerJeuneMiloCommandHandler -} from '../../application/commands/creer-jeune-milo.command.handler' import { ModifierConseillerCommandHandler } from '../../application/commands/modifier-conseiller.command.handler' import { ModifierJeuneDuConseillerCommandHandler } from '../../application/commands/modifier-jeune-du-conseiller.command.handler' import { RecupererJeunesDuConseillerCommandHandler } from '../../application/commands/recuperer-jeunes-du-conseiller.command.handler' @@ -47,12 +42,10 @@ import { import { GetResumeActionsDesJeunesDuConseillerQueryHandlerDb } from '../../application/queries/action/get-resume-actions-des-jeunes-du-conseiller.query.handler.db' import { GetConseillersQueryHandler } from '../../application/queries/get-conseillers.query.handler.db' import { GetDetailConseillerQueryHandler } from '../../application/queries/get-detail-conseiller.query.handler.db' -import { GetDossierMiloJeuneQueryHandler } from '../../application/queries/get-dossier-milo-jeune.query.handler' import { GetIndicateursPourConseillerExclusionQuery, GetIndicateursPourConseillerQueryHandler } from '../../application/queries/get-indicateurs-pour-conseiller.query.handler.db' -import { GetJeuneMiloByDossierQueryHandler } from '../../application/queries/get-jeune-milo-by-dossier.query.handler.db' import { GetJeunesByConseillerQueryHandler } from '../../application/queries/get-jeunes-by-conseiller.query.handler.db' import { GetJeunesIdentitesQueryHandler } from '../../application/queries/get-jeunes-identites.query.handler.db' import { @@ -63,17 +56,14 @@ import { IndicateursPourConseillerQueryModel } from '../../application/queries/q import { DetailJeuneConseillerQueryModel, IdentiteJeuneQueryModel, - JeuneQueryModel, ResumeActionsDuJeuneQueryModel } from '../../application/queries/query-models/jeunes.query-model' -import { DossierJeuneMiloQueryModel } from '../../application/queries/query-models/milo.query-model' import { RendezVousConseillerFutursEtPassesQueryModel } from '../../application/queries/query-models/rendez-vous.query-model' import { GetAllRendezVousConseillerQueryHandler } from '../../application/queries/rendez-vous/get-rendez-vous-conseiller.query.handler.db' -import { ErreurHttp } from '../../building-blocks/types/domain-error' import { + Result, isFailure, - isSuccess, - Result + isSuccess } from '../../building-blocks/types/result' import { Action } from '../../domain/action/action' import { Authentification } from '../../domain/authentification' @@ -84,7 +74,6 @@ import { handleFailure } from './result.handler' import { CreateActionPayload } from './validation/actions.inputs' import { CreateListeDeDiffusionPayload, - CreerJeuneMiloPayload, DetailConseillerPayload, EnvoyerNotificationsPayload, GetConseillersQueryParams, @@ -109,9 +98,6 @@ export class ConseillersController { private readonly sendNotificationsNouveauxMessages: SendNotificationsNouveauxMessagesCommandHandler, private readonly getAllRendezVousConseillerQueryHandler: GetAllRendezVousConseillerQueryHandler, private readonly createRendezVousCommandHandler: CreateRendezVousCommandHandler, - private readonly getDossierMiloJeuneQueryHandler: GetDossierMiloJeuneQueryHandler, - private readonly getJeuneMiloByDossierQueryHandler: GetJeuneMiloByDossierQueryHandler, - private readonly creerJeuneMiloCommandHandler: CreerJeuneMiloCommandHandler, private readonly modifierConseillerCommandHandler: ModifierConseillerCommandHandler, private readonly recupererJeunesDuConseillerCommandHandler: RecupererJeunesDuConseillerCommandHandler, private readonly modifierJeuneDuConseillerCommandHandler: ModifierJeuneDuConseillerCommandHandler, @@ -360,85 +346,6 @@ export class ConseillersController { throw handleFailure(result) } - @ApiOperation({ - summary: "Récupère le dossier Milo d'un jeune", - description: 'Autorisé pour un conseiller du jeune' - }) - @Get('/milo/dossiers/:idDossier') - @ApiResponse({ - type: DossierJeuneMiloQueryModel - }) - async getDossierMilo( - @Param('idDossier') idDossier: string, - @Utilisateur() utilisateur: Authentification.Utilisateur - ): Promise { - const result = await this.getDossierMiloJeuneQueryHandler.execute( - { idDossier }, - utilisateur - ) - - if (isFailure(result)) { - if (result.error.code === ErreurHttp.CODE) { - throw new HttpException( - result.error.message, - (result.error as ErreurHttp).statusCode - ) - } - throw new RuntimeException(result.error.message) - } - - return result.data - } - - @ApiOperation({ - summary: 'Récupère un jeune par son idDossier Milo', - description: 'Autorisé pour un conseiller du jeune' - }) - @Get('milo/jeunes/:idDossier') - @ApiResponse({ - type: JeuneQueryModel - }) - async getJeuneMiloByDossier( - @Param('idDossier') idDossier: string, - @Utilisateur() utilisateur: Authentification.Utilisateur - ): Promise { - const result = await this.getJeuneMiloByDossierQueryHandler.execute( - { idDossier }, - utilisateur - ) - - if (isSuccess(result)) { - return result.data - } - throw handleFailure(result) - } - - @ApiOperation({ - summary: 'Crée un jeune Milo', - description: 'Autorisé pour un conseiller Milo' - }) - @Post('milo/jeunes') - async postJeuneMilo( - @Body() creerJeuneMiloPayload: CreerJeuneMiloPayload, - @Utilisateur() utilisateur: Authentification.Utilisateur - ): Promise { - const command: CreerJeuneMiloCommand = { - idConseiller: creerJeuneMiloPayload.idConseiller, - email: creerJeuneMiloPayload.email, - nom: creerJeuneMiloPayload.nom, - prenom: creerJeuneMiloPayload.prenom, - idPartenaire: creerJeuneMiloPayload.idDossier - } - const result = await this.creerJeuneMiloCommandHandler.execute( - command, - utilisateur - ) - if (isSuccess(result)) { - return result.data - } - throw handleFailure(result) - } - @ApiOperation({ summary: "Permet d'ajouter l'agence ou de modifier les notifications sonores ou la date de signature des CGU d'un conseiller", diff --git a/src/infrastructure/routes/conseillers.milo.controller.ts b/src/infrastructure/routes/conseillers.milo.controller.ts index 5160c11dd..fb1441fca 100644 --- a/src/infrastructure/routes/conseillers.milo.controller.ts +++ b/src/infrastructure/routes/conseillers.milo.controller.ts @@ -2,6 +2,7 @@ import { Body, Controller, Get, + HttpException, Param, Patch, Post, @@ -19,23 +20,37 @@ import { DetailSessionConseillerMiloQueryModel, SessionConseillerMiloQueryModel } from 'src/application/queries/query-models/sessions.milo.query.model' -import { isSuccess } from 'src/building-blocks/types/result' +import { isFailure, isSuccess } from 'src/building-blocks/types/result' import { Authentification } from 'src/domain/authentification' import { DateService } from 'src/utils/date-service' import { - EmargementSessionMiloCommand, - EmargementSessionMiloCommandHandler -} from '../../application/commands/milo/emargement-session-milo.command.handler' + EmargerSessionMiloCommand, + EmargerSessionMiloCommandHandler +} from '../../application/commands/milo/emarger-session-milo.command.handler' import { AccessToken, Utilisateur } from '../decorators/authenticated.decorator' import { handleFailure } from './result.handler' import { - EmargementsSessionMiloPayload, + EmargementsSessionMiloPayload as EmargerSessionMiloPayload, GetAgendaSessionsQueryParams, GetSessionsQueryParams, UpdateSessionMiloPayload } from './validation/conseiller-milo.inputs' import { GetAgendaSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db' import { DateTime } from 'luxon' +import { RuntimeException } from '@nestjs/core/errors/exceptions/runtime.exception' +import { + CreerJeuneMiloCommandHandler, + CreerJeuneMiloCommand +} from '../../application/commands/milo/creer-jeune-milo.command.handler' +import { GetDossierMiloJeuneQueryHandler } from '../../application/queries/milo/get-dossier-milo-jeune.query.handler' +import { GetJeuneMiloByDossierQueryHandler } from '../../application/queries/milo/get-jeune-milo-by-dossier.query.handler.db' +import { + JeuneQueryModel, + IdentiteJeuneQueryModel +} from '../../application/queries/query-models/jeunes.query-model' +import { DossierJeuneMiloQueryModel } from '../../application/queries/query-models/milo.query-model' +import { ErreurHttp } from '../../building-blocks/types/domain-error' +import { CreerJeuneMiloPayload } from './validation/conseillers.inputs' @Controller('conseillers/milo') @ApiOAuth2([]) @@ -46,8 +61,89 @@ export class ConseillersMiloController { private readonly getDetailSessionQueryHandler: GetDetailSessionConseillerMiloQueryHandler, private readonly getAgendaSessionsQueryHandler: GetAgendaSessionsConseillerMiloQueryHandler, private readonly updateSessionCommandHandler: UpdateSessionMiloCommandHandler, - private readonly emargementSessionCommandHandler: EmargementSessionMiloCommandHandler + private readonly emargerSessionCommandHandler: EmargerSessionMiloCommandHandler, + private readonly getDossierMiloJeuneQueryHandler: GetDossierMiloJeuneQueryHandler, + private readonly getJeuneMiloByDossierQueryHandler: GetJeuneMiloByDossierQueryHandler, + private readonly creerJeuneMiloCommandHandler: CreerJeuneMiloCommandHandler ) {} + @ApiOperation({ + summary: "Récupère le dossier Milo d'un jeune", + description: 'Autorisé pour un conseiller du jeune' + }) + @Get('/dossiers/:idDossier') + @ApiResponse({ + type: DossierJeuneMiloQueryModel + }) + async getDossierMilo( + @Param('idDossier') idDossier: string, + @Utilisateur() utilisateur: Authentification.Utilisateur + ): Promise { + const result = await this.getDossierMiloJeuneQueryHandler.execute( + { idDossier }, + utilisateur + ) + + if (isFailure(result)) { + if (result.error.code === ErreurHttp.CODE) { + throw new HttpException( + result.error.message, + (result.error as ErreurHttp).statusCode + ) + } + throw new RuntimeException(result.error.message) + } + + return result.data + } + + @ApiOperation({ + summary: 'Récupère un jeune par son idDossier Milo', + description: 'Autorisé pour un conseiller du jeune' + }) + @Get('/jeunes/:idDossier') + @ApiResponse({ + type: JeuneQueryModel + }) + async getJeuneMiloByDossier( + @Param('idDossier') idDossier: string, + @Utilisateur() utilisateur: Authentification.Utilisateur + ): Promise { + const result = await this.getJeuneMiloByDossierQueryHandler.execute( + { idDossier }, + utilisateur + ) + + if (isSuccess(result)) { + return result.data + } + throw handleFailure(result) + } + + @ApiOperation({ + summary: 'Crée un jeune Milo', + description: 'Autorisé pour un conseiller Milo' + }) + @Post('/jeunes') + async postJeuneMilo( + @Body() creerJeuneMiloPayload: CreerJeuneMiloPayload, + @Utilisateur() utilisateur: Authentification.Utilisateur + ): Promise { + const command: CreerJeuneMiloCommand = { + idConseiller: creerJeuneMiloPayload.idConseiller, + email: creerJeuneMiloPayload.email, + nom: creerJeuneMiloPayload.nom, + prenom: creerJeuneMiloPayload.prenom, + idPartenaire: creerJeuneMiloPayload.idDossier + } + const result = await this.creerJeuneMiloCommandHandler.execute( + command, + utilisateur + ) + if (isSuccess(result)) { + return result.data + } + throw handleFailure(result) + } @ApiOperation({ summary: 'Récupère la liste des sessions de sa structure MILO', @@ -152,18 +248,18 @@ export class ConseillersMiloController { async emargerSession( @Param('idConseiller') idConseiller: string, @Param('idSession') idSession: string, - @Body() emargementSessionMiloPayload: EmargementsSessionMiloPayload, + @Body() emargerSessionMiloPayload: EmargerSessionMiloPayload, @Utilisateur() utilisateur: Authentification.Utilisateur, @AccessToken() accessToken: string ): Promise { - const command: EmargementSessionMiloCommand = { + const command: EmargerSessionMiloCommand = { idSession, idConseiller, accessToken: accessToken, - emargements: emargementSessionMiloPayload.emargements + emargements: emargerSessionMiloPayload.emargements } - const result = await this.emargementSessionCommandHandler.execute( + const result = await this.emargerSessionCommandHandler.execute( command, utilisateur ) diff --git a/src/infrastructure/routes/jeunes.milo.controller.ts b/src/infrastructure/routes/jeunes.milo.controller.ts index 6f6d4818a..7d87ae35f 100644 --- a/src/infrastructure/routes/jeunes.milo.controller.ts +++ b/src/infrastructure/routes/jeunes.milo.controller.ts @@ -20,7 +20,7 @@ import { DateService } from '../../utils/date-service' @Controller('jeunes') @ApiOAuth2([]) -@ApiTags('Jeunes') +@ApiTags('Jeunes Milo') export class JeunesMiloController { constructor( private readonly getAccueilQueryHandler: GetAccueilJeuneMiloQueryHandler, diff --git a/src/infrastructure/routes/jeunes.pole-emploi.controller.ts b/src/infrastructure/routes/jeunes.pole-emploi.controller.ts index 01c719fe5..74b45766a 100644 --- a/src/infrastructure/routes/jeunes.pole-emploi.controller.ts +++ b/src/infrastructure/routes/jeunes.pole-emploi.controller.ts @@ -16,7 +16,7 @@ import { GetCVPoleEmploiQueryHandler } from '../../application/queries/get-cv-po @Controller('jeunes') @ApiOAuth2([]) -@ApiTags('Jeunes') +@ApiTags('Jeunes Pole Emploi') export class JeunesPoleEmploiController { constructor( private readonly getAccueilJeunePoleEmploiQueryHandler: GetAccueilJeunePoleEmploiQueryHandler, diff --git a/src/infrastructure/routes/offres-immersion.controller.ts b/src/infrastructure/routes/offres-immersion.controller.ts index 9cf4e8add..d0e911f18 100644 --- a/src/infrastructure/routes/offres-immersion.controller.ts +++ b/src/infrastructure/routes/offres-immersion.controller.ts @@ -10,7 +10,7 @@ import { UseGuards } from '@nestjs/common' import { ApiOAuth2, ApiResponse, ApiSecurity, ApiTags } from '@nestjs/swagger' -import { EnvoyerFormulaireContactImmersionCommandHandler } from '../../application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' +import { EnvoyerFormulaireContactImmersionCommandHandler } from '../../application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db' import { NotifierNouvellesImmersionsCommandHandler } from '../../application/commands/notifier-nouvelles-immersions.command.handler' import { GetDetailOffreImmersionQuery, diff --git a/test/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.test.ts b/test/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db.test.ts similarity index 99% rename from test/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.test.ts rename to test/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db.test.ts index 2da7bc18a..e88db4453 100644 --- a/test/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.test.ts +++ b/test/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db.test.ts @@ -1,7 +1,7 @@ import { EnvoyerFormulaireContactImmersionCommand, EnvoyerFormulaireContactImmersionCommandHandler -} from 'src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' +} from 'src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db' import { emptySuccess, failure } from 'src/building-blocks/types/result' import { Evenement, EvenementService } from 'src/domain/evenement' import { ImmersionClient } from 'src/infrastructure/clients/immersion-client' diff --git a/test/application/commands/creer-jeune-milo.command.handler.test.ts b/test/application/commands/milo/creer-jeune-milo.command.handler.test.ts similarity index 89% rename from test/application/commands/creer-jeune-milo.command.handler.test.ts rename to test/application/commands/milo/creer-jeune-milo.command.handler.test.ts index e50110e38..05c0cdb7c 100644 --- a/test/application/commands/creer-jeune-milo.command.handler.test.ts +++ b/test/application/commands/milo/creer-jeune-milo.command.handler.test.ts @@ -1,37 +1,37 @@ import { StubbedType, stubInterface } from '@salesforce/ts-sinon' import { DateTime } from 'luxon' import { SinonSandbox } from 'sinon' -import { ConseillerAuthorizer } from '../../../src/application/authorizers/conseiller-authorizer' +import { ConseillerAuthorizer } from '../../../../src/application/authorizers/conseiller-authorizer' import { CreerJeuneMiloCommand, CreerJeuneMiloCommandHandler -} from '../../../src/application/commands/creer-jeune-milo.command.handler' +} from '../../../../src/application/commands/milo/creer-jeune-milo.command.handler' import { DossierExisteDejaError, EmailExisteDejaError, ErreurHttp, MauvaiseCommandeError, NonTrouveError -} from '../../../src/building-blocks/types/domain-error' +} from '../../../../src/building-blocks/types/domain-error' import { failure, isSuccess, success -} from '../../../src/building-blocks/types/result' -import { Authentification } from '../../../src/domain/authentification' -import { Chat } from '../../../src/domain/chat' -import { Conseiller } from '../../../src/domain/conseiller/conseiller' -import { Core, estMilo } from '../../../src/domain/core' -import { Jeune } from '../../../src/domain/jeune/jeune' -import { JeuneMilo } from '../../../src/domain/milo/jeune.milo' -import { DateService } from '../../../src/utils/date-service' -import { IdService } from '../../../src/utils/id-service' -import { unUtilisateurConseiller } from '../../fixtures/authentification.fixture' -import { unConseiller } from '../../fixtures/conseiller.fixture' -import { unJeune } from '../../fixtures/jeune.fixture' -import { StubbedClass, createSandbox, expect, stubClass } from '../../utils' -import { unDossierMilo } from '../../fixtures/milo.fixture' +} from '../../../../src/building-blocks/types/result' +import { Authentification } from '../../../../src/domain/authentification' +import { Chat } from '../../../../src/domain/chat' +import { Conseiller } from '../../../../src/domain/conseiller/conseiller' +import { Core, estMilo } from '../../../../src/domain/core' +import { Jeune } from '../../../../src/domain/jeune/jeune' +import { JeuneMilo } from '../../../../src/domain/milo/jeune.milo' +import { DateService } from '../../../../src/utils/date-service' +import { IdService } from '../../../../src/utils/id-service' +import { unUtilisateurConseiller } from '../../../fixtures/authentification.fixture' +import { unConseiller } from '../../../fixtures/conseiller.fixture' +import { unJeune } from '../../../fixtures/jeune.fixture' +import { StubbedClass, createSandbox, expect, stubClass } from '../../../utils' +import { unDossierMilo } from '../../../fixtures/milo.fixture' const idPartenaire = 'idDossier' describe('CreerJeuneMiloCommandHandler', () => { diff --git a/test/application/commands/milo/emargement-session-milo.command.handler.test.ts b/test/application/commands/milo/emargement-session-milo.command.handler.test.ts index 702738d1c..fe34b225e 100644 --- a/test/application/commands/milo/emargement-session-milo.command.handler.test.ts +++ b/test/application/commands/milo/emargement-session-milo.command.handler.test.ts @@ -22,13 +22,13 @@ import { KeycloakClient } from 'src/infrastructure/clients/keycloak-client' import { DateService } from 'src/utils/date-service' import { uneSessionMilo } from '../../../fixtures/sessions.fixture' import { - EmargementSessionMiloCommand, - EmargementSessionMiloCommandHandler -} from 'src/application/commands/milo/emargement-session-milo.command.handler' + EmargerSessionMiloCommand, + EmargerSessionMiloCommandHandler +} from 'src/application/commands/milo/emarger-session-milo.command.handler' import Utilisateur = Authentification.Utilisateur -describe('EmargementSessionMiloCommandHandler', () => { - let emargementCommandHandler: EmargementSessionMiloCommandHandler +describe('EmargerSessionMiloCommandHandler', () => { + let emargementCommandHandler: EmargerSessionMiloCommandHandler let conseillerMiloRepository: StubbedType let sessionMiloRepository: StubbedType let keycloakClient: StubbedClass @@ -43,7 +43,7 @@ describe('EmargementSessionMiloCommandHandler', () => { keycloakClient = stubClass(KeycloakClient) conseillerAuthorizer = stubClass(ConseillerAuthorizer) dateService = stubClass(DateService) - emargementCommandHandler = new EmargementSessionMiloCommandHandler( + emargementCommandHandler = new EmargerSessionMiloCommandHandler( conseillerMiloRepository, sessionMiloRepository, keycloakClient, @@ -53,7 +53,7 @@ describe('EmargementSessionMiloCommandHandler', () => { }) describe('handle', () => { - const commandSansEmargement: EmargementSessionMiloCommand = { + const commandSansEmargement: EmargerSessionMiloCommand = { idSession: 'idSession', idConseiller: conseiller.id, accessToken: 'token', @@ -107,7 +107,7 @@ describe('EmargementSessionMiloCommandHandler', () => { describe('quand le conseiller a accès à la session', () => { const idpToken = 'idpToken' - const commandAvecEmargements: EmargementSessionMiloCommand = { + const commandAvecEmargements: EmargerSessionMiloCommand = { idSession: 'idSession', idConseiller: conseiller.id, accessToken: 'token', @@ -214,7 +214,7 @@ describe('EmargementSessionMiloCommandHandler', () => { describe('authorize', () => { it('authorize le conseiller', async () => { // Given - const command: EmargementSessionMiloCommand = { + const command: EmargerSessionMiloCommand = { idSession: 'idSession', idConseiller: conseiller.id, accessToken: 'token', diff --git a/test/application/queries/get-dossier-milo-jeune.query.handler.test.ts b/test/application/queries/milo/get-dossier-milo-jeune.query.handler.test.ts similarity index 79% rename from test/application/queries/get-dossier-milo-jeune.query.handler.test.ts rename to test/application/queries/milo/get-dossier-milo-jeune.query.handler.test.ts index cf21b8d26..d88cfe630 100644 --- a/test/application/queries/get-dossier-milo-jeune.query.handler.test.ts +++ b/test/application/queries/milo/get-dossier-milo-jeune.query.handler.test.ts @@ -1,15 +1,15 @@ import { StubbedType, stubInterface } from '@salesforce/ts-sinon' import { SinonSandbox } from 'sinon' -import { ConseillerAuthorizer } from '../../../src/application/authorizers/conseiller-authorizer' +import { ConseillerAuthorizer } from '../../../../src/application/authorizers/conseiller-authorizer' import { GetDossierMiloJeuneQuery, GetDossierMiloJeuneQueryHandler -} from '../../../src/application/queries/get-dossier-milo-jeune.query.handler' -import { estMilo } from '../../../src/domain/core' -import { JeuneMilo } from '../../../src/domain/milo/jeune.milo' -import { unUtilisateurConseiller } from '../../fixtures/authentification.fixture' -import { unDossierMilo } from '../../fixtures/milo.fixture' -import { StubbedClass, createSandbox, expect, stubClass } from '../../utils' +} from '../../../../src/application/queries/milo/get-dossier-milo-jeune.query.handler' +import { estMilo } from '../../../../src/domain/core' +import { JeuneMilo } from '../../../../src/domain/milo/jeune.milo' +import { unUtilisateurConseiller } from '../../../fixtures/authentification.fixture' +import { unDossierMilo } from '../../../fixtures/milo.fixture' +import { StubbedClass, createSandbox, expect, stubClass } from '../../../utils' describe('GetDossierMiloJeuneQueryHandler', () => { let miloRepository: StubbedType diff --git a/test/application/queries/get-jeune-milo-by-dossier.query.handler.db.test.ts b/test/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db.test.ts similarity index 77% rename from test/application/queries/get-jeune-milo-by-dossier.query.handler.db.test.ts rename to test/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db.test.ts index ed7443652..75964f4eb 100644 --- a/test/application/queries/get-jeune-milo-by-dossier.query.handler.db.test.ts +++ b/test/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db.test.ts @@ -1,16 +1,16 @@ import { SinonSandbox } from 'sinon' import { ConseillerAuthorizer } from 'src/application/authorizers/conseiller-authorizer' -import { GetJeuneMiloByDossierQueryHandler } from 'src/application/queries/get-jeune-milo-by-dossier.query.handler.db' +import { GetJeuneMiloByDossierQueryHandler } from 'src/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db' import { unJeuneQueryModel } from 'test/fixtures/query-models/jeunes.query-model.fixtures' -import { createSandbox, expect, StubbedClass, stubClass } from '../../utils' -import { ConseillerSqlModel } from '../../../src/infrastructure/sequelize/models/conseiller.sql-model' -import { unConseillerDto } from '../../fixtures/sql-models/conseiller.sql-model' -import { JeuneSqlModel } from '../../../src/infrastructure/sequelize/models/jeune.sql-model' -import { unJeuneDto } from '../../fixtures/sql-models/jeune.sql-model' -import { unUtilisateurConseiller } from '../../fixtures/authentification.fixture' -import { failure, success } from '../../../src/building-blocks/types/result' -import { NonTrouveError } from '../../../src/building-blocks/types/domain-error' -import { getDatabase } from '../../utils/database-for-testing' +import { createSandbox, expect, StubbedClass, stubClass } from '../../../utils' +import { ConseillerSqlModel } from '../../../../src/infrastructure/sequelize/models/conseiller.sql-model' +import { unConseillerDto } from '../../../fixtures/sql-models/conseiller.sql-model' +import { JeuneSqlModel } from '../../../../src/infrastructure/sequelize/models/jeune.sql-model' +import { unJeuneDto } from '../../../fixtures/sql-models/jeune.sql-model' +import { unUtilisateurConseiller } from '../../../fixtures/authentification.fixture' +import { failure, success } from '../../../../src/building-blocks/types/result' +import { NonTrouveError } from '../../../../src/building-blocks/types/domain-error' +import { getDatabase } from '../../../utils/database-for-testing' describe('GetJeuneMiloByDossierQueryHandler', () => { let conseillerAuthorizer: StubbedClass diff --git a/test/infrastructure/repositories/action/action-milo-http-sql.repository.test.ts b/test/infrastructure/repositories/milo/action.milo.repository.test.ts similarity index 96% rename from test/infrastructure/repositories/action/action-milo-http-sql.repository.test.ts rename to test/infrastructure/repositories/milo/action.milo.repository.test.ts index 360798030..460fa56f0 100644 --- a/test/infrastructure/repositories/action/action-milo-http-sql.repository.test.ts +++ b/test/infrastructure/repositories/milo/action.milo.repository.test.ts @@ -1,6 +1,6 @@ import { testConfig } from '../../../utils/module-for-testing' import { HttpService } from '@nestjs/axios' -import { ActionMiloHttpRepository } from '../../../../src/infrastructure/repositories/action/action-milo-http-sql.repository' +import { ActionMiloHttpRepository } from '../../../../src/infrastructure/repositories/milo/action.milo.repository' import { expect } from '../../../utils' import { uneActionMilo } from '../../../fixtures/action.fixture' import { diff --git a/test/infrastructure/routes/conseillers.controller.test.ts b/test/infrastructure/routes/conseillers.controller.test.ts index 1b5f79e77..cee50a2e2 100644 --- a/test/infrastructure/routes/conseillers.controller.test.ts +++ b/test/infrastructure/routes/conseillers.controller.test.ts @@ -1,9 +1,9 @@ import { HttpStatus, INestApplication } from '@nestjs/common' import { CreateRendezVousCommandHandler } from 'src/application/commands/create-rendez-vous.command.handler' import { RecupererJeunesDuConseillerCommandHandler } from 'src/application/commands/recuperer-jeunes-du-conseiller.command.handler' -import { GetJeuneMiloByDossierQueryHandler } from 'src/application/queries/get-jeune-milo-by-dossier.query.handler.db' import { GetAllRendezVousConseillerQueryHandler } from 'src/application/queries/rendez-vous/get-rendez-vous-conseiller.query.handler.db' import { Action } from 'src/domain/action/action' +import { Qualification } from 'src/domain/action/qualification' import { CodeTypeRendezVous } from 'src/domain/rendez-vous/rendez-vous' import { CreateActionPayload } from 'src/infrastructure/routes/validation/actions.inputs' import { CreateRendezVousPayload } from 'src/infrastructure/routes/validation/rendez-vous.inputs' @@ -12,10 +12,6 @@ import { uneDatetime, uneDatetimeAvecOffset } from 'test/fixtures/date.fixture' import { unRendezVousConseillerFutursEtPassesQueryModel } from 'test/fixtures/rendez-vous.fixture' import { CreateActionCommandHandler } from '../../../src/application/commands/action/create-action.command.handler' import { DeleteConseillerCommandHandler } from '../../../src/application/commands/conseiller/delete-conseiller.command.handler' -import { - CreerJeuneMiloCommand, - CreerJeuneMiloCommandHandler -} from '../../../src/application/commands/creer-jeune-milo.command.handler' import { ModifierConseillerCommand, ModifierConseillerCommandHandler @@ -27,15 +23,11 @@ import { import { SendNotificationsNouveauxMessagesCommandHandler } from '../../../src/application/commands/send-notifications-nouveaux-messages.command.handler' import { GetConseillersQueryHandler } from '../../../src/application/queries/get-conseillers.query.handler.db' import { GetDetailConseillerQueryHandler } from '../../../src/application/queries/get-detail-conseiller.query.handler.db' -import { GetDossierMiloJeuneQueryHandler } from '../../../src/application/queries/get-dossier-milo-jeune.query.handler' import { GetIndicateursPourConseillerQueryHandler } from '../../../src/application/queries/get-indicateurs-pour-conseiller.query.handler.db' import { GetJeunesByConseillerQueryHandler } from '../../../src/application/queries/get-jeunes-by-conseiller.query.handler.db' import { GetJeunesIdentitesQueryHandler } from '../../../src/application/queries/get-jeunes-identites.query.handler.db' import { - DossierExisteDejaError, DroitsInsuffisants, - EmailExisteDejaError, - ErreurHttp, JeuneNonLieAuConseillerError, NonTrouveError } from '../../../src/building-blocks/types/domain-error' @@ -45,10 +37,7 @@ import { success } from '../../../src/building-blocks/types/result' import { Core } from '../../../src/domain/core' -import { - CreerJeuneMiloPayload, - EnvoyerNotificationsPayload -} from '../../../src/infrastructure/routes/validation/conseillers.inputs' +import { EnvoyerNotificationsPayload } from '../../../src/infrastructure/routes/validation/conseillers.inputs' import { uneAgence } from '../../fixtures/agence.fixture' import { unHeaderAuthorization, @@ -56,13 +45,10 @@ import { } from '../../fixtures/authentification.fixture' import { unConseiller } from '../../fixtures/conseiller.fixture' import { unJeune } from '../../fixtures/jeune.fixture' -import { unDossierMilo } from '../../fixtures/milo.fixture' import { detailConseillerQueryModel } from '../../fixtures/query-models/conseiller.query-model.fixtures' -import { unJeuneQueryModel } from '../../fixtures/query-models/jeunes.query-model.fixtures' -import { expect, StubbedClass } from '../../utils' +import { StubbedClass, expect } from '../../utils' import { ensureUserAuthenticationFailsIfInvalid } from '../../utils/ensure-user-authentication-fails-if-invalid' import { getApplicationWithStubbedDependencies } from '../../utils/module-for-testing' -import { Qualification } from 'src/domain/action/qualification' import Code = Qualification.Code describe('ConseillersController', () => { @@ -71,11 +57,8 @@ describe('ConseillersController', () => { let createActionCommandHandler: StubbedClass let getJeunesByConseillerQueryHandler: StubbedClass let sendNotificationsNouveauxMessages: StubbedClass - let getDossierMiloJeuneQueryHandler: StubbedClass - let getJeuneMiloByDossierQueryHandler: StubbedClass let getAllRendezVousConseillerQueryHandler: StubbedClass let createRendezVousCommandHandler: StubbedClass - let creerJeuneMiloCommandHandler: StubbedClass let deleteConseillerCommandHandler: StubbedClass let modifierConseillerCommandHandler: StubbedClass let recupererJeunesDuConseillerCommandHandler: StubbedClass @@ -98,15 +81,10 @@ describe('ConseillersController', () => { sendNotificationsNouveauxMessages = app.get( SendNotificationsNouveauxMessagesCommandHandler ) - getDossierMiloJeuneQueryHandler = app.get(GetDossierMiloJeuneQueryHandler) - getJeuneMiloByDossierQueryHandler = app.get( - GetJeuneMiloByDossierQueryHandler - ) getAllRendezVousConseillerQueryHandler = app.get( GetAllRendezVousConseillerQueryHandler ) createRendezVousCommandHandler = app.get(CreateRendezVousCommandHandler) - creerJeuneMiloCommandHandler = app.get(CreerJeuneMiloCommandHandler) deleteConseillerCommandHandler = app.get(DeleteConseillerCommandHandler) modifierConseillerCommandHandler = app.get(ModifierConseillerCommandHandler) recupererJeunesDuConseillerCommandHandler = app.get( @@ -859,195 +837,6 @@ describe('ConseillersController', () => { }) }) - describe('GET /conseillers/milo/dossiers/:idDossier', () => { - describe('quand le dossier existe', () => { - it('renvoie le dossier', async () => { - // Given - getDossierMiloJeuneQueryHandler.execute - .withArgs({ idDossier: '1' }, unUtilisateurDecode()) - .resolves(success(unDossierMilo())) - - // When - Then - await request(app.getHttpServer()) - .get('/conseillers/milo/dossiers/1') - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.OK) - .expect(JSON.stringify(unDossierMilo())) - }) - }) - - describe("quand le dossier n'existe pas", () => { - it('renvoie 404', async () => { - // Given - // Given - getDossierMiloJeuneQueryHandler.execute - .withArgs({ idDossier: '2' }, unUtilisateurDecode()) - .resolves(failure(new ErreurHttp('Pas trouvé', 404))) - - // When - Then - await request(app.getHttpServer()) - .get('/conseillers/milo/dossiers/2') - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.NOT_FOUND) - }) - }) - - ensureUserAuthenticationFailsIfInvalid( - 'get', - '/conseillers/milo/dossiers/2' - ) - }) - - describe('GET /conseillers/milo/jeunes/:idDossier', () => { - describe('quand le dossier existe', () => { - it('renvoie le jeune', async () => { - // Given - getJeuneMiloByDossierQueryHandler.execute - .withArgs({ idDossier: '1' }, unUtilisateurDecode()) - .resolves(success(unJeuneQueryModel())) - - // When - Then - await request(app.getHttpServer()) - .get('/conseillers/milo/jeunes/1') - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.OK) - .expect(JSON.stringify(unJeuneQueryModel())) - }) - }) - - describe("quand le dossier n'existe pas", () => { - it('renvoie 404', async () => { - // Given - // Given - getJeuneMiloByDossierQueryHandler.execute - .withArgs({ idDossier: '2' }, unUtilisateurDecode()) - .resolves(failure(new ErreurHttp('Pas trouvé', 404))) - - // When - Then - await request(app.getHttpServer()) - .get('/conseillers/milo/jeunes/2') - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.NOT_FOUND) - }) - }) - - ensureUserAuthenticationFailsIfInvalid( - 'get', - '/conseillers/milo/dossiers/2' - ) - }) - - describe('POST /conseillers/milo/jeunes', () => { - describe('quand le jeune est nouveau', () => { - it('renvoie 201', async () => { - // Given - const command: CreerJeuneMiloCommand = { - idPartenaire: 'idDossier', - nom: 'nom', - prenom: 'prenom', - email: 'email', - idConseiller: 'idConseiller' - } - - const payload: CreerJeuneMiloPayload = { - idDossier: 'idDossier', - nom: 'nom', - prenom: 'prenom', - email: 'email', - idConseiller: 'idConseiller' - } - - creerJeuneMiloCommandHandler.execute - .withArgs(command, unUtilisateurDecode()) - .resolves(success({ id: 'idJeune', prenom: 'prenom', nom: 'nom' })) - - // When - Then - await request(app.getHttpServer()) - .post('/conseillers/milo/jeunes') - .send(payload) - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.CREATED) - .expect({ id: 'idJeune', prenom: 'prenom', nom: 'nom' }) - }) - }) - - describe('quand le jeune est déjà chez nous', () => { - it('renvoie 400', async () => { - // Given - const command: CreerJeuneMiloCommand = { - idPartenaire: 'ID400', - nom: 'nom', - prenom: 'prenom', - email: 'email', - idConseiller: 'idConseiller' - } - creerJeuneMiloCommandHandler.execute.resolves( - failure(new ErreurHttp('email pas bon', 400)) - ) - - // When - Then - await request(app.getHttpServer()) - .post('/conseillers/milo/jeunes') - .send({ ...command, idDossier: command.idPartenaire }) - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.BAD_REQUEST) - }) - }) - - describe('quand le mail existe déja', () => { - it('renvoie 409', async () => { - // Given - const command: CreerJeuneMiloCommand = { - idPartenaire: 'ID409', - nom: 'nom', - prenom: 'prenom', - email: 'email', - idConseiller: 'idConseiller' - } - - creerJeuneMiloCommandHandler.execute.resolves( - failure(new EmailExisteDejaError('test@test.fr')) - ) - - // When - Then - await request(app.getHttpServer()) - .post('/conseillers/milo/jeunes') - .send({ ...command, idDossier: command.idPartenaire }) - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.CONFLICT) - }) - }) - - describe("quand l'id dossier existe déja", () => { - it('renvoie 409', async () => { - // Given - const command: CreerJeuneMiloCommand = { - idPartenaire: 'ID409', - nom: 'nom', - prenom: 'prenom', - email: 'email', - idConseiller: 'idConseiller' - } - - creerJeuneMiloCommandHandler.execute.resolves( - failure(new DossierExisteDejaError('ID409')) - ) - - // When - Then - await request(app.getHttpServer()) - .post('/conseillers/milo/jeunes') - .send({ ...command, idDossier: command.idPartenaire }) - .set('authorization', unHeaderAuthorization()) - .expect(HttpStatus.CONFLICT) - }) - }) - - ensureUserAuthenticationFailsIfInvalid( - 'get', - '/conseillers/milo/dossiers/2' - ) - }) - describe('PUT /conseillers/{idConseiller}', () => { const conseiller = unConseiller() const agence = uneAgence() diff --git a/test/infrastructure/routes/conseillers.milo.controller.test.ts b/test/infrastructure/routes/conseillers.milo.controller.test.ts index 728a68cca..34e7c6f88 100644 --- a/test/infrastructure/routes/conseillers.milo.controller.test.ts +++ b/test/infrastructure/routes/conseillers.milo.controller.test.ts @@ -14,6 +14,8 @@ import { } from 'src/building-blocks/types/result' import * as request from 'supertest' import { + DossierExisteDejaError, + EmailExisteDejaError, ErreurHttp, NonTrouveError } from 'src/building-blocks/types/domain-error' @@ -30,18 +32,35 @@ import { import { SessionMilo } from 'src/domain/milo/session.milo' import { GetAgendaSessionsConseillerMiloQueryHandler } from 'src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db' import { DateTime } from 'luxon' +import { + CreerJeuneMiloCommandHandler, + CreerJeuneMiloCommand +} from '../../../src/application/commands/milo/creer-jeune-milo.command.handler' +import { GetDossierMiloJeuneQueryHandler } from '../../../src/application/queries/milo/get-dossier-milo-jeune.query.handler' +import { GetJeuneMiloByDossierQueryHandler } from '../../../src/application/queries/milo/get-jeune-milo-by-dossier.query.handler.db' +import { CreerJeuneMiloPayload } from '../../../src/infrastructure/routes/validation/conseillers.inputs' +import { unDossierMilo } from '../../fixtures/milo.fixture' +import { unJeuneQueryModel } from '../../fixtures/query-models/jeunes.query-model.fixtures' describe('ConseillersMiloController', () => { let getSessionsQueryHandler: StubbedClass let getDetailSessionQueryHandler: StubbedClass let getAgendaSessionsQueryHandler: StubbedClass let updateSessionCommandHandler: StubbedClass + let getDossierMiloJeuneQueryHandler: StubbedClass + let getJeuneMiloByDossierQueryHandler: StubbedClass + let creerJeuneMiloCommandHandler: StubbedClass let app: INestApplication before(async () => { app = await getApplicationWithStubbedDependencies() + getDossierMiloJeuneQueryHandler = app.get(GetDossierMiloJeuneQueryHandler) + getJeuneMiloByDossierQueryHandler = app.get( + GetJeuneMiloByDossierQueryHandler + ) + creerJeuneMiloCommandHandler = app.get(CreerJeuneMiloCommandHandler) getSessionsQueryHandler = app.get(GetSessionsConseillerMiloQueryHandler) getDetailSessionQueryHandler = app.get( GetDetailSessionConseillerMiloQueryHandler @@ -52,6 +71,195 @@ describe('ConseillersMiloController', () => { updateSessionCommandHandler = app.get(UpdateSessionMiloCommandHandler) }) + describe('GET /conseillers/milo/dossiers/:idDossier', () => { + describe('quand le dossier existe', () => { + it('renvoie le dossier', async () => { + // Given + getDossierMiloJeuneQueryHandler.execute + .withArgs({ idDossier: '1' }, unUtilisateurDecode()) + .resolves(success(unDossierMilo())) + + // When - Then + await request(app.getHttpServer()) + .get('/conseillers/milo/dossiers/1') + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.OK) + .expect(JSON.stringify(unDossierMilo())) + }) + }) + + describe("quand le dossier n'existe pas", () => { + it('renvoie 404', async () => { + // Given + // Given + getDossierMiloJeuneQueryHandler.execute + .withArgs({ idDossier: '2' }, unUtilisateurDecode()) + .resolves(failure(new ErreurHttp('Pas trouvé', 404))) + + // When - Then + await request(app.getHttpServer()) + .get('/conseillers/milo/dossiers/2') + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.NOT_FOUND) + }) + }) + + ensureUserAuthenticationFailsIfInvalid( + 'get', + '/conseillers/milo/dossiers/2' + ) + }) + + describe('GET /conseillers/milo/jeunes/:idDossier', () => { + describe('quand le dossier existe', () => { + it('renvoie le jeune', async () => { + // Given + getJeuneMiloByDossierQueryHandler.execute + .withArgs({ idDossier: '1' }, unUtilisateurDecode()) + .resolves(success(unJeuneQueryModel())) + + // When - Then + await request(app.getHttpServer()) + .get('/conseillers/milo/jeunes/1') + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.OK) + .expect(JSON.stringify(unJeuneQueryModel())) + }) + }) + + describe("quand le dossier n'existe pas", () => { + it('renvoie 404', async () => { + // Given + // Given + getJeuneMiloByDossierQueryHandler.execute + .withArgs({ idDossier: '2' }, unUtilisateurDecode()) + .resolves(failure(new ErreurHttp('Pas trouvé', 404))) + + // When - Then + await request(app.getHttpServer()) + .get('/conseillers/milo/jeunes/2') + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.NOT_FOUND) + }) + }) + + ensureUserAuthenticationFailsIfInvalid( + 'get', + '/conseillers/milo/dossiers/2' + ) + }) + + describe('POST /conseillers/milo/jeunes', () => { + describe('quand le jeune est nouveau', () => { + it('renvoie 201', async () => { + // Given + const command: CreerJeuneMiloCommand = { + idPartenaire: 'idDossier', + nom: 'nom', + prenom: 'prenom', + email: 'email', + idConseiller: 'idConseiller' + } + + const payload: CreerJeuneMiloPayload = { + idDossier: 'idDossier', + nom: 'nom', + prenom: 'prenom', + email: 'email', + idConseiller: 'idConseiller' + } + + creerJeuneMiloCommandHandler.execute + .withArgs(command, unUtilisateurDecode()) + .resolves(success({ id: 'idJeune', prenom: 'prenom', nom: 'nom' })) + + // When - Then + await request(app.getHttpServer()) + .post('/conseillers/milo/jeunes') + .send(payload) + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.CREATED) + .expect({ id: 'idJeune', prenom: 'prenom', nom: 'nom' }) + }) + }) + + describe('quand le jeune est déjà chez nous', () => { + it('renvoie 400', async () => { + // Given + const command: CreerJeuneMiloCommand = { + idPartenaire: 'ID400', + nom: 'nom', + prenom: 'prenom', + email: 'email', + idConseiller: 'idConseiller' + } + creerJeuneMiloCommandHandler.execute.resolves( + failure(new ErreurHttp('email pas bon', 400)) + ) + + // When - Then + await request(app.getHttpServer()) + .post('/conseillers/milo/jeunes') + .send({ ...command, idDossier: command.idPartenaire }) + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.BAD_REQUEST) + }) + }) + + describe('quand le mail existe déja', () => { + it('renvoie 409', async () => { + // Given + const command: CreerJeuneMiloCommand = { + idPartenaire: 'ID409', + nom: 'nom', + prenom: 'prenom', + email: 'email', + idConseiller: 'idConseiller' + } + + creerJeuneMiloCommandHandler.execute.resolves( + failure(new EmailExisteDejaError('test@test.fr')) + ) + + // When - Then + await request(app.getHttpServer()) + .post('/conseillers/milo/jeunes') + .send({ ...command, idDossier: command.idPartenaire }) + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.CONFLICT) + }) + }) + + describe("quand l'id dossier existe déja", () => { + it('renvoie 409', async () => { + // Given + const command: CreerJeuneMiloCommand = { + idPartenaire: 'ID409', + nom: 'nom', + prenom: 'prenom', + email: 'email', + idConseiller: 'idConseiller' + } + + creerJeuneMiloCommandHandler.execute.resolves( + failure(new DossierExisteDejaError('ID409')) + ) + + // When - Then + await request(app.getHttpServer()) + .post('/conseillers/milo/jeunes') + .send({ ...command, idDossier: command.idPartenaire }) + .set('authorization', unHeaderAuthorization()) + .expect(HttpStatus.CONFLICT) + }) + }) + + ensureUserAuthenticationFailsIfInvalid( + 'get', + '/conseillers/milo/dossiers/2' + ) + }) + describe('GET /conseillers/milo/:idConseiller/sessions', () => { describe('quand le conseiller a une structure milo renseignée', () => { it('renvoie une 200', async () => { diff --git a/test/infrastructure/routes/offres-immersion.controller.test.ts b/test/infrastructure/routes/offres-immersion.controller.test.ts index 02f8ae21a..c3e265afc 100644 --- a/test/infrastructure/routes/offres-immersion.controller.test.ts +++ b/test/infrastructure/routes/offres-immersion.controller.test.ts @@ -1,6 +1,6 @@ import { HttpStatus, INestApplication } from '@nestjs/common' import * as request from 'supertest' -import { EnvoyerFormulaireContactImmersionCommandHandler } from '../../../src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler' +import { EnvoyerFormulaireContactImmersionCommandHandler } from '../../../src/application/commands/immersion/envoyer-formulaire-contact-immersion.command.handler.db' import { NotifierNouvellesImmersionsCommand, NotifierNouvellesImmersionsCommandHandler From 208547be38ba9638aecb7a3e597e9881d18faebd Mon Sep 17 00:00:00 2001 From: Malek Zemni Date: Mon, 11 Dec 2023 14:47:10 +0100 Subject: [PATCH 4/4] =?UTF-8?q?feat(migration-structures-milo):=20ajout=20?= =?UTF-8?q?id=20lors=20de=20la=20cr=C3=A9ation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.module.ts | 18 +-- .../authorizers/conseiller-authorizer.ts | 8 +- .../conseiller-inter-agence-authorizer.ts | 8 +- ...seiller-inter-structure-milo-authorizer.ts | 5 +- .../authorizers/fichier-authorizer.ts | 4 +- .../authorizers/jeune-authorizer.ts | 4 +- .../authorizers/rendezvous-authorizer.ts | 8 +- .../action/create-action.command.handler.ts | 4 +- .../qualifier-action.command.handler.ts | 4 +- .../archiver-jeune.command.handler.ts | 4 +- .../campagne/create-evaluation.command.ts | 4 +- .../delete-conseiller.command.handler.ts | 8 +- ...on-conseiller-immersion.command.handler.ts | 4 +- ...conseiller-offre-emploi.command.handler.ts | 4 +- ...seiller-service-civique.command.handler.ts | 4 +- ...creer-jeune-pole-emploi.command.handler.ts | 8 +- .../delete-jeune-inactif.command.handler.ts | 8 +- .../commands/delete-jeune.command.handler.ts | 4 +- .../delete-rendez-vous.command.handler.db.ts | 4 +- .../envoyer-message-groupe.command.handler.ts | 4 +- .../milo/creer-jeune-milo.command.handler.ts | 8 +- .../emarger-session-milo.command.handler.ts | 2 +- .../update-session-milo.command.handler.ts | 6 +- .../modifier-conseiller.command.handler.ts | 4 +- ...ier-jeune-du-conseiller.command.handler.ts | 4 +- .../rafraichir-suggestions.command.handler.ts | 4 +- ...er-jeunes-du-conseiller.command.handler.ts | 8 +- .../creer-rendez-vous.command.handler.ts} | 82 +++++++---- .../modifier-rendez-vous.command.handler.ts} | 66 +++++---- ...veaux-messages-externes.command.handler.ts | 4 +- ...tions-nouveaux-messages.command.handler.ts | 4 +- .../archiver-jeune-support.command.handler.ts | 4 +- ...pdate-agence-conseiller.command.handler.ts | 4 +- ...ferer-jeunes-conseiller.command.handler.ts | 8 +- ...nfiguration-application.command.handler.ts | 4 +- ...pdate-preferences-jeune.command.handler.ts | 4 +- ...emails-messages-conseillers.job.handler.ts | 4 +- .../traiter-evenement-milo.job.handler.ts | 2 +- ...ueil-jeune-pole-emploi.query.handler.db.ts | 4 +- .../get-cv-pole-emploi.query.handler.ts | 4 +- ...agoriente-metiers-favoris.query.handler.ts | 4 +- .../get-diagoriente-urls.query.handler.ts | 4 +- .../queries/get-home-jeune.query.handler.ts | 4 +- ...t-jeunes-by-conseiller.query.handler.db.ts | 4 +- ...eunes-by-etablissement.query.handler.db.ts | 4 +- ...suivi-semaine-pole-emploi.query.handler.ts | 4 +- ...ssions-conseiller.milo.query.handler.db.ts | 2 +- ...ession-conseiller.milo.query.handler.db.ts | 2 +- ...ssions-conseiller.milo.query.handler.db.ts | 2 +- ...ons-conseiller.milo.v2.query.handler.db.ts | 2 +- .../pole-emploi/get-demarches.query.getter.ts | 4 +- ...dez-vous-jeune-pole-emploi.query.getter.ts | 4 +- src/building-blocks/types/domain-error.ts | 20 +-- src/domain/conseiller/conseiller.ts | 2 +- src/domain/jeune/jeune.ts | 2 +- src/domain/milo/conseiller.milo.db.ts | 5 +- src/domain/milo/jeune.milo.ts | 1 + src/domain/milo/rendez-vous.milo.ts | 2 +- src/domain/rendez-vous/rendez-vous.ts | 67 +++++---- .../liste-de-diffusion-sql.repository.db.ts | 16 +- .../milo/conseiller.milo.repository.db.ts | 5 +- .../milo/jeune-milo-http-sql.repository.db.ts | 16 ++ .../routes/conseillers.controller.ts | 46 +++--- .../routes/rendez-vous.controller.ts | 12 +- src/infrastructure/routes/result.handler.ts | 6 +- .../routes/validation/rendez-vous.inputs.ts | 4 +- src/utils/feature-flip-session-helper.ts | 5 +- ...er-inter-structure-milo-authorizer.test.ts | 4 +- ...ement-session-milo.command.handler.test.ts | 4 +- ...pdate-session-milo.command.handler.test.ts | 2 +- ...creer-rendez-vous.command.handler.test.ts} | 107 +++++++------- ...ifier-rendez-vous.command.handler.test.ts} | 86 +++++------ ...-jeunes-conseiller.command.handler.test.ts | 4 +- ...traiter-evenement-milo.job.handler.test.ts | 8 +- ...s-conseiller.milo.query.handler.db.test.ts | 6 +- ...s-conseiller.milo.query.handler.db.test.ts | 8 +- ...onseiller.milo.v2.query.handler.db.test.ts | 16 +- ...ns-conseiller.milo.query.getter.db.test.ts | 24 +-- ...conseiller.milo.v2.query.getter.db.test.ts | 40 ++--- test/domain/milo/rendez-vous.milo.test.ts | 10 +- test/domain/rendez-vous/rendez-vous.test.ts | 137 ++++++++++-------- test/fixtures/conseiller-milo.fixture.ts | 4 +- test/fixtures/jeune.fixture.ts | 14 ++ test/fixtures/rendez-vous.fixture.ts | 12 ++ ...ste-de-diffusion-sql.repository.db.test.ts | 28 ++-- .../conseiller.milo.repository.db.test.ts | 9 +- .../routes/conseillers.controller.test.ts | 56 ++++--- .../routes/rendez-vous.controller.test.ts | 20 +-- 88 files changed, 657 insertions(+), 540 deletions(-) rename src/application/commands/{create-rendez-vous.command.handler.ts => rendez-vous/creer-rendez-vous.command.handler.ts} (55%) rename src/application/commands/{update-rendez-vous.command.handler.ts => rendez-vous/modifier-rendez-vous.command.handler.ts} (74%) rename src/infrastructure/repositories/{conseiller => }/liste-de-diffusion-sql.repository.db.ts (85%) rename test/application/commands/{create-rendez-vous.command.handler.test.ts => rendez-vous/creer-rendez-vous.command.handler.test.ts} (81%) rename test/application/commands/{update-rendez-vous.command.handler.test.ts => rendez-vous/modifier-rendez-vous.command.handler.test.ts} (82%) rename test/infrastructure/repositories/{conseiller => }/liste-de-diffusion-sql.repository.db.test.ts (81%) diff --git a/src/app.module.ts b/src/app.module.ts index d86664fbb..c0952ac35 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -26,7 +26,7 @@ import { AddFavoriOffreImmersionCommandHandler } from './application/commands/ad import { CreateActionCommandHandler } from './application/commands/action/create-action.command.handler' import { CreateEvenementCommandHandler } from './application/commands/create-evenement.command.handler' import { CreateRechercheCommandHandler } from './application/commands/create-recherche.command.handler' -import { CreateRendezVousCommandHandler } from './application/commands/create-rendez-vous.command.handler' +import { CreerRendezVousCommandHandler } from './application/commands/rendez-vous/creer-rendez-vous.command.handler' import { CreerJeuneMiloCommandHandler } from './application/commands/milo/creer-jeune-milo.command.handler' import { CreerJeunePoleEmploiCommandHandler } from './application/commands/creer-jeune-pole-emploi.command.handler' import { CreerSuperviseursCommandHandler } from './application/commands/creer-superviseurs.command.handler' @@ -97,7 +97,7 @@ import { import { ChatRepositoryToken } from './domain/chat' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from './domain/conseiller/conseiller' import { EvenementService, EvenementsRepositoryToken } from './domain/evenement' import { Fichier, FichierRepositoryToken } from './domain/fichier' @@ -105,7 +105,7 @@ import { Jeune, JeuneConfigurationApplicationRepositoryToken, JeunePoleEmploiRepositoryToken, - JeunesRepositoryToken + JeuneRepositoryToken } from './domain/jeune/jeune' import { Notification, @@ -188,7 +188,7 @@ import { import { GetDemarchesQueryHandler } from './application/queries/get-demarches.query.handler' import { GetCatalogueDemarchesQueryHandler } from './application/queries/get-catalogue-demarches.query.handler' import { GetJeuneMiloByDossierQueryHandler } from './application/queries/milo/get-jeune-milo-by-dossier.query.handler.db' -import { UpdateRendezVousCommandHandler } from './application/commands/update-rendez-vous.command.handler' +import { ModifierRendezVousCommandHandler } from './application/commands/rendez-vous/modifier-rendez-vous.command.handler' import { InvitationIcsClient } from './infrastructure/clients/invitation-ics.client' import { Mail, MailRepositoryToken, MailServiceToken } from './domain/mail' import { ChatCryptoService } from './utils/chat-crypto-service' @@ -275,7 +275,7 @@ import { HistoriqueRendezVousRepositoryToken } from './domain/rendez-vous/histor import { GetAnimationsCollectivesJeuneQueryHandler } from './application/queries/rendez-vous/get-animations-collectives-jeune.query.handler.db' import { GetUnRendezVousJeuneQueryHandler } from './application/queries/rendez-vous/get-un-rendez-vous-jeune.query.handler.db' import { CreateListeDeDiffusionCommandHandler } from './application/commands/create-liste-de-diffusion.command.handler' -import { ListeDeDiffusionSqlRepository } from './infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db' +import { ListeDeDiffusionSqlRepository } from './infrastructure/repositories/liste-de-diffusion-sql.repository.db' import { ListeDeDiffusionRepositoryToken } from './domain/conseiller/liste-de-diffusion' import { GetListesDeDiffusionDuConseillerQueryHandler } from './application/queries/get-listes-de-diffusion-du-conseiller.query.handler.db' import { ListesDeDiffusionController } from './infrastructure/routes/listes-de-diffusion.controller' @@ -466,11 +466,11 @@ export const buildModuleMetadata = (): ModuleMetadata => ({ useClass: ActionSqlRepository }, { - provide: JeunesRepositoryToken, + provide: JeuneRepositoryToken, useClass: JeuneSqlRepository }, { - provide: ConseillersRepositoryToken, + provide: ConseillerRepositoryToken, useClass: ConseillerSqlRepository }, { @@ -656,7 +656,7 @@ export function buildQueryCommandsProviders(): Provider[] { GetResumeActionsDesJeunesDuConseillerQueryHandlerDb, UpdateJeuneConfigurationApplicationCommandHandler, UpdateStatutActionCommandHandler, - CreateRendezVousCommandHandler, + CreerRendezVousCommandHandler, DeleteRendezVousCommandHandler, GetAllRendezVousConseillerQueryHandler, GetRendezVousJeuneQueryHandler, @@ -693,7 +693,7 @@ export function buildQueryCommandsProviders(): Provider[] { GetDetailRendezVousQueryHandler, GetDemarchesQueryHandler, GetJeuneMiloByDossierQueryHandler, - UpdateRendezVousCommandHandler, + ModifierRendezVousCommandHandler, GetConseillersJeuneQueryHandler, GetAgencesQueryHandler, ModifierConseillerCommandHandler, diff --git a/src/application/authorizers/conseiller-authorizer.ts b/src/application/authorizers/conseiller-authorizer.ts index 078cefbbf..010bc7f2e 100644 --- a/src/application/authorizers/conseiller-authorizer.ts +++ b/src/application/authorizers/conseiller-authorizer.ts @@ -11,18 +11,18 @@ import { import { Authentification } from '../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { Core } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import Structure = Core.Structure @Injectable() export class ConseillerAuthorizer { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository ) {} async autoriserLeConseiller( diff --git a/src/application/authorizers/conseiller-inter-agence-authorizer.ts b/src/application/authorizers/conseiller-inter-agence-authorizer.ts index a2cfb2e95..4996713dc 100644 --- a/src/application/authorizers/conseiller-inter-agence-authorizer.ts +++ b/src/application/authorizers/conseiller-inter-agence-authorizer.ts @@ -9,10 +9,10 @@ import { Action, ActionsRepositoryToken } from '../../domain/action/action' import { Authentification } from '../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { Core, estMiloPassEmploi } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { RendezVous, RendezVousRepositoryToken @@ -21,9 +21,9 @@ import { @Injectable() export class ConseillerInterAgenceAuthorizer { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(ActionsRepositoryToken) private actionRepository: Action.Repository, diff --git a/src/application/authorizers/conseiller-inter-structure-milo-authorizer.ts b/src/application/authorizers/conseiller-inter-structure-milo-authorizer.ts index 07a2a7b36..942f61b44 100644 --- a/src/application/authorizers/conseiller-inter-structure-milo-authorizer.ts +++ b/src/application/authorizers/conseiller-inter-structure-milo-authorizer.ts @@ -32,7 +32,7 @@ export class ConseillerInterStructureMiloAuthorizer { if ( isSuccess(conseiller) && - conseiller.data.structure.id === idStructureMilo + conseiller.data.structureMilo.id === idStructureMilo ) { return emptySuccess() } @@ -55,7 +55,8 @@ export class ConseillerInterStructureMiloAuthorizer { if ( isSuccess(jeuneMilo) && jeuneMilo.data.idStructureMilo && - jeuneMilo.data.idStructureMilo === conseillerMilo.data.structure.id + jeuneMilo.data.idStructureMilo === + conseillerMilo.data.structureMilo.id ) { return emptySuccess() } diff --git a/src/application/authorizers/fichier-authorizer.ts b/src/application/authorizers/fichier-authorizer.ts index 8218af1ca..bee03ec88 100644 --- a/src/application/authorizers/fichier-authorizer.ts +++ b/src/application/authorizers/fichier-authorizer.ts @@ -7,14 +7,14 @@ import { } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' import { Fichier, FichierRepositoryToken } from '../../domain/fichier' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' @Injectable() export class FichierAuthorizer { constructor( @Inject(FichierRepositoryToken) private fichierRepository: Fichier.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository ) {} diff --git a/src/application/authorizers/jeune-authorizer.ts b/src/application/authorizers/jeune-authorizer.ts index 9141d4e2b..9ac6210ac 100644 --- a/src/application/authorizers/jeune-authorizer.ts +++ b/src/application/authorizers/jeune-authorizer.ts @@ -6,12 +6,12 @@ import { failure } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' @Injectable() export class JeuneAuthorizer { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository ) {} diff --git a/src/application/authorizers/rendezvous-authorizer.ts b/src/application/authorizers/rendezvous-authorizer.ts index 1e3efb15a..77d1bd699 100644 --- a/src/application/authorizers/rendezvous-authorizer.ts +++ b/src/application/authorizers/rendezvous-authorizer.ts @@ -11,9 +11,9 @@ import { import { Authentification } from '../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { RendezVous, RendezVousRepositoryToken @@ -24,9 +24,9 @@ export class RendezVousAuthorizer { constructor( @Inject(RendezVousRepositoryToken) private rendezVousRepository: RendezVous.Repository, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository ) {} diff --git a/src/application/commands/action/create-action.command.handler.ts b/src/application/commands/action/create-action.command.handler.ts index 8a1c342e4..799861a37 100644 --- a/src/application/commands/action/create-action.command.handler.ts +++ b/src/application/commands/action/create-action.command.handler.ts @@ -12,7 +12,7 @@ import { import { Action, ActionsRepositoryToken } from '../../../domain/action/action' import { Authentification } from '../../../domain/authentification' import { Evenement, EvenementService } from '../../../domain/evenement' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' import { Notification } from '../../../domain/notification/notification' import { PlanificateurService } from '../../../domain/planificateur' import { buildError } from '../../../utils/logger.module' @@ -39,7 +39,7 @@ export class CreateActionCommandHandler extends CommandHandler< constructor( @Inject(ActionsRepositoryToken) private readonly actionRepository: Action.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, private readonly notificationService: Notification.Service, private readonly actionFactory: Action.Factory, diff --git a/src/application/commands/action/qualifier-action.command.handler.ts b/src/application/commands/action/qualifier-action.command.handler.ts index c26cdf3b0..9261d7cdb 100644 --- a/src/application/commands/action/qualifier-action.command.handler.ts +++ b/src/application/commands/action/qualifier-action.command.handler.ts @@ -17,7 +17,7 @@ import { } from '../../../domain/action/action' import { Authentification } from '../../../domain/authentification' import { ActionAuthorizer } from '../../authorizers/action-authorizer' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' import { QualificationActionQueryModel } from '../../queries/query-models/actions.query-model' import { Evenement, EvenementService } from '../../../domain/evenement' import { Command } from '../../../building-blocks/types/command' @@ -45,7 +45,7 @@ export class QualifierActionCommandHandler extends CommandHandler< @Inject(ActionMiloRepositoryToken) private readonly actionMiloRepository: ActionMilo.Repository, private readonly actionAuthorizer: ActionAuthorizer, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, private readonly evenementService: EvenementService ) { diff --git a/src/application/commands/archiver-jeune.command.handler.ts b/src/application/commands/archiver-jeune.command.handler.ts index 0432caa36..b896b9418 100644 --- a/src/application/commands/archiver-jeune.command.handler.ts +++ b/src/application/commands/archiver-jeune.command.handler.ts @@ -19,7 +19,7 @@ import { Evenement, EvenementService } from '../../domain/evenement' import { Chat, ChatRepositoryToken } from '../../domain/chat' import { NonTrouveError } from '../../building-blocks/types/domain-error' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Mail, MailServiceToken } from '../../domain/mail' import { DateService } from '../../utils/date-service' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' @@ -36,7 +36,7 @@ export class ArchiverJeuneCommandHandler extends CommandHandler< void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, @Inject(ArchiveJeuneRepositoryToken) private readonly archiveJeuneRepository: ArchiveJeune.Repository, diff --git a/src/application/commands/campagne/create-evaluation.command.ts b/src/application/commands/campagne/create-evaluation.command.ts index 5de19854b..b635a6c09 100644 --- a/src/application/commands/campagne/create-evaluation.command.ts +++ b/src/application/commands/campagne/create-evaluation.command.ts @@ -9,7 +9,7 @@ import { import { JeuneAuthorizer } from '../../authorizers/jeune-authorizer' import { Campagne, CampagneRepositoryToken } from '../../../domain/campagne' import { Inject } from '@nestjs/common' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' export interface CreateEvaluationCommand extends Command { idCampagne: string @@ -29,7 +29,7 @@ export class CreateEvaluationCommandHandler extends CommandHandler< private campagneFactory: Campagne.Factory, @Inject(CampagneRepositoryToken) private campagneRepository: Campagne.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private jeuneAuthorizer: JeuneAuthorizer ) { diff --git a/src/application/commands/conseiller/delete-conseiller.command.handler.ts b/src/application/commands/conseiller/delete-conseiller.command.handler.ts index a9df18736..38a4a1fbf 100644 --- a/src/application/commands/conseiller/delete-conseiller.command.handler.ts +++ b/src/application/commands/conseiller/delete-conseiller.command.handler.ts @@ -17,10 +17,10 @@ import { Evenement, EvenementService } from '../../../domain/evenement' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../../domain/conseiller/conseiller' import { estPoleEmploiBRSA } from '../../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' import { ConseillerAuthorizer } from '../../authorizers/conseiller-authorizer' export interface DeleteConseillerCommand { @@ -33,9 +33,9 @@ export class DeleteConseillerCommandHandler extends CommandHandler< void > { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private readonly conseillerRepository: Conseiller.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, @Inject(AuthentificationRepositoryToken) private readonly authentificationRepository: Authentification.Repository, diff --git a/src/application/commands/create-suggestion-conseiller-immersion.command.handler.ts b/src/application/commands/create-suggestion-conseiller-immersion.command.handler.ts index d7b68d9ae..8754fe84d 100644 --- a/src/application/commands/create-suggestion-conseiller-immersion.command.handler.ts +++ b/src/application/commands/create-suggestion-conseiller-immersion.command.handler.ts @@ -8,7 +8,7 @@ import { Result } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Recherche } from '../../domain/offre/recherche/recherche' import { SuggestionsRepositoryToken, @@ -35,7 +35,7 @@ export class CreateSuggestionConseillerImmersionCommandHandler extends CommandHa @Inject(SuggestionsRepositoryToken) private suggestionRepository: Suggestion.Repository, private suggestionFactory: Suggestion.Factory, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private evenementService: EvenementService ) { diff --git a/src/application/commands/create-suggestion-conseiller-offre-emploi.command.handler.ts b/src/application/commands/create-suggestion-conseiller-offre-emploi.command.handler.ts index 69428f6b9..bf13370ed 100644 --- a/src/application/commands/create-suggestion-conseiller-offre-emploi.command.handler.ts +++ b/src/application/commands/create-suggestion-conseiller-offre-emploi.command.handler.ts @@ -13,7 +13,7 @@ import { import { Authentification } from '../../domain/authentification' import { estBRSA } from '../../domain/core' import { Evenement, EvenementService } from '../../domain/evenement' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Recherche } from '../../domain/offre/recherche/recherche' import { Suggestion, @@ -39,7 +39,7 @@ export class CreateSuggestionConseillerOffreEmploiCommandHandler extends Command @Inject(SuggestionsRepositoryToken) private suggestionRepository: Suggestion.Repository, private suggestionFactory: Suggestion.Factory, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private evenementService: EvenementService ) { diff --git a/src/application/commands/create-suggestion-conseiller-service-civique.command.handler.ts b/src/application/commands/create-suggestion-conseiller-service-civique.command.handler.ts index 337f23669..17f60a66e 100644 --- a/src/application/commands/create-suggestion-conseiller-service-civique.command.handler.ts +++ b/src/application/commands/create-suggestion-conseiller-service-civique.command.handler.ts @@ -10,7 +10,7 @@ import { import { Authentification } from '../../domain/authentification' import { estNonBRSA } from '../../domain/core' import { Evenement, EvenementService } from '../../domain/evenement' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Recherche } from '../../domain/offre/recherche/recherche' import { Suggestion, @@ -37,7 +37,7 @@ export class CreateSuggestionConseillerServiceCiviqueCommandHandler extends Comm @Inject(SuggestionsRepositoryToken) private suggestionRepository: Suggestion.Repository, private suggestionFactory: Suggestion.Factory, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private evenementService: EvenementService ) { diff --git a/src/application/commands/creer-jeune-pole-emploi.command.handler.ts b/src/application/commands/creer-jeune-pole-emploi.command.handler.ts index 5cb70580a..32553ec35 100644 --- a/src/application/commands/creer-jeune-pole-emploi.command.handler.ts +++ b/src/application/commands/creer-jeune-pole-emploi.command.handler.ts @@ -10,10 +10,10 @@ import { Authentification } from '../../domain/authentification' import { Chat, ChatRepositoryToken } from '../../domain/chat' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { estPoleEmploiBRSA } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' export interface CreateJeuneCommand extends Command { @@ -29,9 +29,9 @@ export class CreerJeunePoleEmploiCommandHandler extends CommandHandler< Jeune > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, @Inject(ChatRepositoryToken) private chatRepository: Chat.Repository, diff --git a/src/application/commands/delete-jeune-inactif.command.handler.ts b/src/application/commands/delete-jeune-inactif.command.handler.ts index fd3092306..91ea4489e 100644 --- a/src/application/commands/delete-jeune-inactif.command.handler.ts +++ b/src/application/commands/delete-jeune-inactif.command.handler.ts @@ -14,9 +14,9 @@ import { Authentification } from '../../domain/authentification' import { Chat, ChatRepositoryToken } from '../../domain/chat' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' export interface DeleteJeuneInactifCommand { @@ -30,9 +30,9 @@ export class DeleteJeuneInactifCommandHandler extends CommandHandler< void > { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private readonly conseillerRepository: Conseiller.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, @Inject(ChatRepositoryToken) private readonly chatRepository: Chat.Repository, diff --git a/src/application/commands/delete-jeune.command.handler.ts b/src/application/commands/delete-jeune.command.handler.ts index faa89200c..43529d343 100644 --- a/src/application/commands/delete-jeune.command.handler.ts +++ b/src/application/commands/delete-jeune.command.handler.ts @@ -16,7 +16,7 @@ import { Mail, MailServiceToken } from '../../domain/mail' import { Chat, ChatRepositoryToken } from '../../domain/chat' import { Core } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { JeuneAuthorizer } from '../authorizers/jeune-authorizer' import { SupportAuthorizer } from '../authorizers/support-authorizer' @@ -37,7 +37,7 @@ export class DeleteJeuneCommandHandler extends CommandHandler< void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, @Inject(ChatRepositoryToken) private readonly chatRepository: Chat.Repository, diff --git a/src/application/commands/delete-rendez-vous.command.handler.db.ts b/src/application/commands/delete-rendez-vous.command.handler.db.ts index 15b3cecd0..f641b64d2 100644 --- a/src/application/commands/delete-rendez-vous.command.handler.db.ts +++ b/src/application/commands/delete-rendez-vous.command.handler.db.ts @@ -13,7 +13,7 @@ import { import { Authentification } from '../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { Evenement, EvenementService } from '../../domain/evenement' import { Mail, MailServiceToken } from '../../domain/mail' @@ -41,7 +41,7 @@ export class DeleteRendezVousCommandHandler extends CommandHandler< constructor( @Inject(RendezVousRepositoryToken) private rendezVousRepository: RendezVous.Repository, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, private notificationService: Notification.Service, private rendezVousAuthorizer: RendezVousAuthorizer, diff --git a/src/application/commands/envoyer-message-groupe.command.handler.ts b/src/application/commands/envoyer-message-groupe.command.handler.ts index d79ef5948..6e46e8fb4 100644 --- a/src/application/commands/envoyer-message-groupe.command.handler.ts +++ b/src/application/commands/envoyer-message-groupe.command.handler.ts @@ -16,7 +16,7 @@ import { ListeDeDiffusionRepositoryToken } from '../../domain/conseiller/liste-de-diffusion' import { Evenement, EvenementService } from '../../domain/evenement' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Notification } from '../../domain/notification/notification' import { ListeDeDiffusionAuthorizer } from '../authorizers/liste-de-diffusion-authorizer' import Code = Evenement.Code @@ -42,7 +42,7 @@ export class EnvoyerMessageGroupeCommandHandler extends CommandHandler< constructor( @Inject(ChatRepositoryToken) private chatRepository: Chat.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(ListeDeDiffusionRepositoryToken) private listeDeDiffusionRepository: Conseiller.ListeDeDiffusion.Repository, diff --git a/src/application/commands/milo/creer-jeune-milo.command.handler.ts b/src/application/commands/milo/creer-jeune-milo.command.handler.ts index 0305ecfe0..e035cf282 100644 --- a/src/application/commands/milo/creer-jeune-milo.command.handler.ts +++ b/src/application/commands/milo/creer-jeune-milo.command.handler.ts @@ -21,10 +21,10 @@ import { import { Chat, ChatRepositoryToken } from '../../../domain/chat' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../../domain/conseiller/conseiller' import { Core, estMilo } from '../../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' import { JeuneMilo, MiloJeuneRepositoryToken @@ -49,10 +49,10 @@ export class CreerJeuneMiloCommandHandler extends CommandHandler< private conseillerAuthorizer: ConseillerAuthorizer, @Inject(MiloJeuneRepositoryToken) private miloJeuneRepository: JeuneMilo.Repository, - @Inject(JeunesRepositoryToken) private jeuneRepository: Jeune.Repository, + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(AuthentificationRepositoryToken) private authentificationRepository: Authentification.Repository, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, @Inject(ChatRepositoryToken) private chatRepository: Chat.Repository, private jeuneFactory: Jeune.Factory diff --git a/src/application/commands/milo/emarger-session-milo.command.handler.ts b/src/application/commands/milo/emarger-session-milo.command.handler.ts index c5ce372d9..b93cb2d99 100644 --- a/src/application/commands/milo/emarger-session-milo.command.handler.ts +++ b/src/application/commands/milo/emarger-session-milo.command.handler.ts @@ -47,7 +47,7 @@ export class EmargerSessionMiloCommandHandler extends CommandHandler< command.idConseiller ) if (isFailure(conseillerMiloResult)) return conseillerMiloResult - const { structure: structureConseiller } = conseillerMiloResult.data + const { structureMilo: structureConseiller } = conseillerMiloResult.data const idpToken = await this.keycloakClient.exchangeTokenConseillerMilo( command.accessToken diff --git a/src/application/commands/milo/update-session-milo.command.handler.ts b/src/application/commands/milo/update-session-milo.command.handler.ts index 3d8f1410b..168fb0c33 100644 --- a/src/application/commands/milo/update-session-milo.command.handler.ts +++ b/src/application/commands/milo/update-session-milo.command.handler.ts @@ -15,7 +15,7 @@ import { SessionMiloRepositoryToken } from 'src/domain/milo/session.milo' import { KeycloakClient } from 'src/infrastructure/clients/keycloak-client' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' import { Notification } from '../../../domain/notification/notification' import { DateService } from '../../../utils/date-service' import { ConseillerAuthorizer } from '../../authorizers/conseiller-authorizer' @@ -39,7 +39,7 @@ export class UpdateSessionMiloCommandHandler extends CommandHandler< private conseillerMiloRepository: Conseiller.Milo.Repository, @Inject(SessionMiloRepositoryToken) private sessionMiloRepository: SessionMilo.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private keycloakClient: KeycloakClient, private dateService: DateService, @@ -54,7 +54,7 @@ export class UpdateSessionMiloCommandHandler extends CommandHandler< command.idConseiller ) if (isFailure(conseillerMiloResult)) return conseillerMiloResult - const { structure: structureConseiller } = conseillerMiloResult.data + const { structureMilo: structureConseiller } = conseillerMiloResult.data const idpToken = await this.keycloakClient.exchangeTokenConseillerMilo( command.accessToken diff --git a/src/application/commands/modifier-conseiller.command.handler.ts b/src/application/commands/modifier-conseiller.command.handler.ts index 713643cb6..a78de0c7d 100644 --- a/src/application/commands/modifier-conseiller.command.handler.ts +++ b/src/application/commands/modifier-conseiller.command.handler.ts @@ -12,7 +12,7 @@ import { Agence, AgenceRepositoryToken } from '../../domain/agence' import { Authentification } from '../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' import { DateTime } from 'luxon' @@ -30,7 +30,7 @@ export class ModifierConseillerCommandHandler extends CommandHandler< void > { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, @Inject(AgenceRepositoryToken) private agencesRepository: Agence.Repository, diff --git a/src/application/commands/modifier-jeune-du-conseiller.command.handler.ts b/src/application/commands/modifier-jeune-du-conseiller.command.handler.ts index 78cc36de8..38a2416a4 100644 --- a/src/application/commands/modifier-jeune-du-conseiller.command.handler.ts +++ b/src/application/commands/modifier-jeune-du-conseiller.command.handler.ts @@ -9,7 +9,7 @@ import { } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' import { estPoleEmploiBRSAPassEmploi } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' export interface ModifierJeuneDuConseillerCommand extends Command { @@ -23,7 +23,7 @@ export class ModifierJeuneDuConseillerCommandHandler extends CommandHandler< void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private conseillerAuthorizer: ConseillerAuthorizer ) { diff --git a/src/application/commands/rafraichir-suggestions.command.handler.ts b/src/application/commands/rafraichir-suggestions.command.handler.ts index 631ab97a6..e20183735 100644 --- a/src/application/commands/rafraichir-suggestions.command.handler.ts +++ b/src/application/commands/rafraichir-suggestions.command.handler.ts @@ -17,7 +17,7 @@ import { import { SuggestionPoleEmploiService } from '../../domain/offre/recherche/suggestion/pole-emploi.service' import { Core, estPoleEmploiBRSA } from '../../domain/core' import { NonTrouveError } from '../../building-blocks/types/domain-error' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { DiagorienteClient } from 'src/infrastructure/clients/diagoriente-client' import { buildError } from '../../utils/logger.module' @@ -34,7 +34,7 @@ export class RafraichirSuggestionsCommandHandler extends CommandHandler< void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private jeuneAuthorizer: JeuneAuthorizer, private suggestionFactory: Suggestion.Factory, diff --git a/src/application/commands/recuperer-jeunes-du-conseiller.command.handler.ts b/src/application/commands/recuperer-jeunes-du-conseiller.command.handler.ts index df9d57fa8..2c845dc85 100644 --- a/src/application/commands/recuperer-jeunes-du-conseiller.command.handler.ts +++ b/src/application/commands/recuperer-jeunes-du-conseiller.command.handler.ts @@ -1,6 +1,6 @@ import { Inject, Injectable } from '@nestjs/common' import { NonTrouveError } from '../../building-blocks/types/domain-error' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Command } from '../../building-blocks/types/command' import { CommandHandler } from '../../building-blocks/types/command-handler' import { @@ -11,7 +11,7 @@ import { import { Authentification } from '../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' import { Chat, ChatRepositoryToken } from '../../domain/chat' @@ -26,9 +26,9 @@ export class RecupererJeunesDuConseillerCommandHandler extends CommandHandler< void > { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(ChatRepositoryToken) private chatRepository: Chat.Repository, diff --git a/src/application/commands/create-rendez-vous.command.handler.ts b/src/application/commands/rendez-vous/creer-rendez-vous.command.handler.ts similarity index 55% rename from src/application/commands/create-rendez-vous.command.handler.ts rename to src/application/commands/rendez-vous/creer-rendez-vous.command.handler.ts index fa9964b40..05d943f7b 100644 --- a/src/application/commands/create-rendez-vous.command.handler.ts +++ b/src/application/commands/rendez-vous/creer-rendez-vous.command.handler.ts @@ -1,34 +1,40 @@ import { Inject, Injectable } from '@nestjs/common' -import { Evenement, EvenementService } from '../../domain/evenement' -import { Command } from '../../building-blocks/types/command' -import { CommandHandler } from '../../building-blocks/types/command-handler' -import { NonTrouveError } from '../../building-blocks/types/domain-error' +import { Evenement, EvenementService } from '../../../domain/evenement' +import { Command } from '../../../building-blocks/types/command' +import { CommandHandler } from '../../../building-blocks/types/command-handler' +import { NonTrouveError } from '../../../building-blocks/types/domain-error' import { failure, isFailure, Result, success -} from '../../building-blocks/types/result' -import { Authentification } from '../../domain/authentification' +} from '../../../building-blocks/types/result' +import { Authentification } from '../../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken -} from '../../domain/conseiller/conseiller' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' -import { Mail, MailServiceToken } from '../../domain/mail' -import { Notification } from '../../domain/notification/notification' + ConseillerRepositoryToken +} from '../../../domain/conseiller/conseiller' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' +import { Mail, MailServiceToken } from '../../../domain/mail' +import { Notification } from '../../../domain/notification/notification' import { PlanificateurService, planifierLesRappelsDeRendezVous -} from '../../domain/planificateur' +} from '../../../domain/planificateur' import { + CodeTypeRendezVous, RendezVous, RendezVousRepositoryToken -} from '../../domain/rendez-vous/rendez-vous' -import { buildError } from '../../utils/logger.module' -import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' +} from '../../../domain/rendez-vous/rendez-vous' +import { buildError } from '../../../utils/logger.module' +import { ConseillerAuthorizer } from '../../authorizers/conseiller-authorizer' +import { ConseillerMiloRepositoryToken } from '../../../domain/milo/conseiller.milo.db' +import { + JeuneMilo, + MiloJeuneRepositoryToken +} from '../../../domain/milo/jeune.milo' -export interface CreateRendezVousCommand extends Command { +export interface CreerRendezVousCommand extends Command { idsJeunes: string[] idConseiller: string commentaire?: string @@ -36,7 +42,7 @@ export interface CreateRendezVousCommand extends Command { duree: number modalite?: string titre?: string - type?: string + type?: CodeTypeRendezVous precision?: string adresse?: string organisme?: string @@ -46,16 +52,20 @@ export interface CreateRendezVousCommand extends Command { } @Injectable() -export class CreateRendezVousCommandHandler extends CommandHandler< - CreateRendezVousCommand, +export class CreerRendezVousCommandHandler extends CommandHandler< + CreerRendezVousCommand, string > { constructor( @Inject(RendezVousRepositoryToken) private rendezVousRepository: RendezVous.Repository, - @Inject(JeunesRepositoryToken) private jeuneRepository: Jeune.Repository, - @Inject(ConseillersRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, + @Inject(MiloJeuneRepositoryToken) + private jeuneMiloRepository: JeuneMilo.Repository, + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, + @Inject(ConseillerMiloRepositoryToken) + private conseillerMiloRepository: Conseiller.Milo.Repository, private rendezVousFactory: RendezVous.Factory, private notificationService: Notification.Service, @Inject(MailServiceToken) @@ -64,18 +74,30 @@ export class CreateRendezVousCommandHandler extends CommandHandler< private planificateurService: PlanificateurService, private evenementService: EvenementService ) { - super('CreateRendezVousCommandHandler') + super('CreerRendezVousCommandHandler') } - async handle(command: CreateRendezVousCommand): Promise> { - const conseiller = await this.conseillerRepository.get(command.idConseiller) + async handle(command: CreerRendezVousCommand): Promise> { + let conseiller + let jeunes - if (!conseiller) { - return failure(new NonTrouveError('Conseiller')) + if (RendezVous.estUnTypeAnimationCollective(command.type)) { + const conseillerResult = await this.conseillerMiloRepository.get( + command.idConseiller + ) + if (isFailure(conseillerResult)) { + return conseillerResult + } + conseiller = conseillerResult.data + jeunes = await this.jeuneMiloRepository.findAll(command.idsJeunes) + } else { + conseiller = await this.conseillerRepository.get(command.idConseiller) + if (!conseiller) { + return failure(new NonTrouveError('Conseiller')) + } + jeunes = await this.jeuneRepository.findAll(command.idsJeunes) } - const jeunes = await this.jeuneRepository.findAll(command.idsJeunes) - if (jeunes.length !== command.idsJeunes.length) { return failure(new NonTrouveError('Jeune')) } @@ -138,7 +160,7 @@ export class CreateRendezVousCommandHandler extends CommandHandler< } async authorize( - command: CreateRendezVousCommand, + command: CreerRendezVousCommand, utilisateur: Authentification.Utilisateur ): Promise { return this.conseillerAuthorizer.autoriserLeConseiller( @@ -149,7 +171,7 @@ export class CreateRendezVousCommandHandler extends CommandHandler< async monitor( utilisateur: Authentification.Utilisateur, - command: CreateRendezVousCommand + command: CreerRendezVousCommand ): Promise { const codeEvenement = RendezVous.estUnTypeAnimationCollective(command.type) ? Evenement.Code.ANIMATION_COLLECTIVE_CREEE diff --git a/src/application/commands/update-rendez-vous.command.handler.ts b/src/application/commands/rendez-vous/modifier-rendez-vous.command.handler.ts similarity index 74% rename from src/application/commands/update-rendez-vous.command.handler.ts rename to src/application/commands/rendez-vous/modifier-rendez-vous.command.handler.ts index 6411a32bf..114141d13 100644 --- a/src/application/commands/update-rendez-vous.command.handler.ts +++ b/src/application/commands/rendez-vous/modifier-rendez-vous.command.handler.ts @@ -1,37 +1,41 @@ import { Inject, Injectable } from '@nestjs/common' -import { Core } from '../../domain/core' -import { Evenement, EvenementService } from '../../domain/evenement' -import { Command } from '../../building-blocks/types/command' -import { CommandHandler } from '../../building-blocks/types/command-handler' -import { NonTrouveError } from '../../building-blocks/types/domain-error' +import { Core } from '../../../domain/core' +import { Evenement, EvenementService } from '../../../domain/evenement' +import { Command } from '../../../building-blocks/types/command' +import { CommandHandler } from '../../../building-blocks/types/command-handler' +import { NonTrouveError } from '../../../building-blocks/types/domain-error' import { failure, isFailure, Result, success -} from '../../building-blocks/types/result' -import { Authentification } from '../../domain/authentification' +} from '../../../building-blocks/types/result' +import { Authentification } from '../../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken -} from '../../domain/conseiller/conseiller' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' -import { Mail, MailServiceToken } from '../../domain/mail' -import { Notification } from '../../domain/notification/notification' + ConseillerRepositoryToken +} from '../../../domain/conseiller/conseiller' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' +import { Mail, MailServiceToken } from '../../../domain/mail' +import { Notification } from '../../../domain/notification/notification' import { PlanificateurService, replanifierLesRappelsDeRendezVous -} from '../../domain/planificateur' +} from '../../../domain/planificateur' import { JeuneDuRendezVous, RendezVous, RendezVousRepositoryToken -} from '../../domain/rendez-vous/rendez-vous' -import { buildError } from '../../utils/logger.module' -import { RendezVousAuthorizer } from '../authorizers/rendezvous-authorizer' -import { HistoriqueRendezVousRepositoryToken } from '../../domain/rendez-vous/historique' +} from '../../../domain/rendez-vous/rendez-vous' +import { buildError } from '../../../utils/logger.module' +import { RendezVousAuthorizer } from '../../authorizers/rendezvous-authorizer' +import { HistoriqueRendezVousRepositoryToken } from '../../../domain/rendez-vous/historique' +import { + JeuneMilo, + MiloJeuneRepositoryToken +} from '../../../domain/milo/jeune.milo' -export interface UpdateRendezVousCommand extends Command { +export interface ModifierRendezVousCommand extends Command { idRendezVous: string idsJeunes: string[] titre?: string @@ -46,20 +50,22 @@ export interface UpdateRendezVousCommand extends Command { } @Injectable() -export class UpdateRendezVousCommandHandler extends CommandHandler< - UpdateRendezVousCommand, +export class ModifierRendezVousCommandHandler extends CommandHandler< + ModifierRendezVousCommand, Core.Id > { constructor( @Inject(RendezVousRepositoryToken) private rendezVousRepository: RendezVous.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, + @Inject(MiloJeuneRepositoryToken) + private jeuneMiloRepository: JeuneMilo.Repository, private rendezVousFactory: RendezVous.Factory, private notificationService: Notification.Service, @Inject(MailServiceToken) private mailClient: Mail.Service, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, private rendezVousAuthorizer: RendezVousAuthorizer, private planificateurService: PlanificateurService, @@ -68,16 +74,22 @@ export class UpdateRendezVousCommandHandler extends CommandHandler< @Inject(HistoriqueRendezVousRepositoryToken) private historiqueRendezVousRepository: RendezVous.Historique.Repository ) { - super('UpdateRendezVousCommandHandler') + super('ModifierRendezVousCommandHandler') } - async handle(command: UpdateRendezVousCommand): Promise> { + async handle(command: ModifierRendezVousCommand): Promise> { const rendezVous = await this.rendezVousRepository.get(command.idRendezVous) if (!rendezVous) { return failure(new NonTrouveError('RendezVous', command.idRendezVous)) } - const jeunes = await this.jeuneRepository.findAll(command.idsJeunes) + let jeunes + + if (RendezVous.estUnTypeAnimationCollective(rendezVous.type)) { + jeunes = await this.jeuneMiloRepository.findAll(command.idsJeunes) + } else { + jeunes = await this.jeuneRepository.findAll(command.idsJeunes) + } if (jeunes.length !== command.idsJeunes?.length) { return failure(new NonTrouveError('Jeune')) @@ -205,7 +217,7 @@ export class UpdateRendezVousCommandHandler extends CommandHandler< } async authorize( - command: UpdateRendezVousCommand, + command: ModifierRendezVousCommand, utilisateur: Authentification.Utilisateur ): Promise { return this.rendezVousAuthorizer.autoriserConseillerPourUnRendezVousAvecAuMoinsUnJeune( @@ -216,7 +228,7 @@ export class UpdateRendezVousCommandHandler extends CommandHandler< async monitor( utilisateur: Authentification.Utilisateur, - command: UpdateRendezVousCommand + command: ModifierRendezVousCommand ): Promise { const log = this.historiqueRendezVousFactory.creerLogModification( command.idRendezVous, diff --git a/src/application/commands/send-notifications-nouveaux-messages-externes.command.handler.ts b/src/application/commands/send-notifications-nouveaux-messages-externes.command.handler.ts index 0549c07f9..06cb7c282 100644 --- a/src/application/commands/send-notifications-nouveaux-messages-externes.command.handler.ts +++ b/src/application/commands/send-notifications-nouveaux-messages-externes.command.handler.ts @@ -7,7 +7,7 @@ import { failure, Result } from '../../building-blocks/types/result' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Notification } from '../../domain/notification/notification' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' @@ -23,7 +23,7 @@ export class SendNotificationsNouveauxMessagesExternesCommandHandler extends Com void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private notificationService: Notification.Service, private conseillerAuthorizer: ConseillerAuthorizer diff --git a/src/application/commands/send-notifications-nouveaux-messages.command.handler.ts b/src/application/commands/send-notifications-nouveaux-messages.command.handler.ts index 6087a5db1..f43e6e1ec 100644 --- a/src/application/commands/send-notifications-nouveaux-messages.command.handler.ts +++ b/src/application/commands/send-notifications-nouveaux-messages.command.handler.ts @@ -3,7 +3,7 @@ import { Command } from '../../building-blocks/types/command' import { CommandHandler } from '../../building-blocks/types/command-handler' import { emptySuccess, Result } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { Notification } from '../../domain/notification/notification' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' @@ -18,7 +18,7 @@ export class SendNotificationsNouveauxMessagesCommandHandler extends CommandHand void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private notificationService: Notification.Service, private conseillerAuthorizer: ConseillerAuthorizer diff --git a/src/application/commands/support/archiver-jeune-support.command.handler.ts b/src/application/commands/support/archiver-jeune-support.command.handler.ts index d3f630c44..d78080232 100644 --- a/src/application/commands/support/archiver-jeune-support.command.handler.ts +++ b/src/application/commands/support/archiver-jeune-support.command.handler.ts @@ -17,7 +17,7 @@ import { import { Chat, ChatRepositoryToken } from '../../../domain/chat' import { NonTrouveError } from '../../../building-blocks/types/domain-error' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' import { Mail, MailServiceToken } from '../../../domain/mail' import { DateService } from '../../../utils/date-service' import { SupportAuthorizer } from '../../authorizers/support-authorizer' @@ -35,7 +35,7 @@ export class ArchiverJeuneSupportCommandHandler extends CommandHandler< void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, @Inject(ArchiveJeuneRepositoryToken) private readonly archiveJeuneRepository: ArchiveJeune.Repository, diff --git a/src/application/commands/support/update-agence-conseiller.command.handler.ts b/src/application/commands/support/update-agence-conseiller.command.handler.ts index 4c11096e9..5717da29f 100644 --- a/src/application/commands/support/update-agence-conseiller.command.handler.ts +++ b/src/application/commands/support/update-agence-conseiller.command.handler.ts @@ -10,7 +10,7 @@ import { Agence, AgenceRepositoryToken } from '../../../domain/agence' import { Authentification } from '../../../domain/authentification' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../../domain/conseiller/conseiller' import { AnimationCollective, @@ -73,7 +73,7 @@ export class UpdateAgenceConseillerCommandHandler extends CommandHandler< ChangementAgenceQueryModel > { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, @Inject(AgenceRepositoryToken) private agencesRepository: Agence.Repository, diff --git a/src/application/commands/transferer-jeunes-conseiller.command.handler.ts b/src/application/commands/transferer-jeunes-conseiller.command.handler.ts index 84b816553..34ee90ab8 100644 --- a/src/application/commands/transferer-jeunes-conseiller.command.handler.ts +++ b/src/application/commands/transferer-jeunes-conseiller.command.handler.ts @@ -14,10 +14,10 @@ import { Authentification } from '../../domain/authentification' import { Chat, ChatRepositoryToken } from '../../domain/chat' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { estPoleEmploiBRSA } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { RendezVous } from '../../domain/rendez-vous/rendez-vous' import { ConseillerAuthorizer } from '../authorizers/conseiller-authorizer' import { SupportAuthorizer } from '../authorizers/support-authorizer' @@ -39,9 +39,9 @@ export class TransfererJeunesConseillerCommandHandler extends CommandHandler< void > { constructor( - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private listeDeDiffusionService: Conseiller.ListeDeDiffusion.Service, @Inject(ChatRepositoryToken) diff --git a/src/application/commands/update-jeune-configuration-application.command.handler.ts b/src/application/commands/update-jeune-configuration-application.command.handler.ts index dc8ccc512..65ab3b5e5 100644 --- a/src/application/commands/update-jeune-configuration-application.command.handler.ts +++ b/src/application/commands/update-jeune-configuration-application.command.handler.ts @@ -11,7 +11,7 @@ import { Authentification } from '../../domain/authentification' import { Jeune, JeuneConfigurationApplicationRepositoryToken, - JeunesRepositoryToken + JeuneRepositoryToken } from '../../domain/jeune/jeune' import { JeuneAuthorizer } from '../authorizers/jeune-authorizer' import { ConfigurationApplication } from '../../domain/jeune/configuration-application' @@ -31,7 +31,7 @@ export class UpdateJeuneConfigurationApplicationCommandHandler extends CommandHa void > { constructor( - @Inject(JeunesRepositoryToken) private jeuneRepository: Jeune.Repository, + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(JeuneConfigurationApplicationRepositoryToken) private jeuneConfigurationApplicationRepository: Jeune.ConfigurationApplication.Repository, private jeuneAuthorizer: JeuneAuthorizer, diff --git a/src/application/commands/update-preferences-jeune.command.handler.ts b/src/application/commands/update-preferences-jeune.command.handler.ts index 85ec8194b..090d69d98 100644 --- a/src/application/commands/update-preferences-jeune.command.handler.ts +++ b/src/application/commands/update-preferences-jeune.command.handler.ts @@ -8,7 +8,7 @@ import { } from '../../building-blocks/types/result' import { NonTrouveError } from '../../building-blocks/types/domain-error' import { Authentification } from '../../domain/authentification' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { JeuneAuthorizer } from '../authorizers/jeune-authorizer' import { Evenement, EvenementService } from '../../domain/evenement' @@ -23,7 +23,7 @@ export class UpdateJeunePreferencesCommandHandler extends CommandHandler< void > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeuneRepository: Jeune.Repository, private readonly jeuneAuthorizer: JeuneAuthorizer, private readonly evenementService: EvenementService diff --git a/src/application/jobs/envoyer-emails-messages-conseillers.job.handler.ts b/src/application/jobs/envoyer-emails-messages-conseillers.job.handler.ts index 553745fa1..6718f4e0e 100644 --- a/src/application/jobs/envoyer-emails-messages-conseillers.job.handler.ts +++ b/src/application/jobs/envoyer-emails-messages-conseillers.job.handler.ts @@ -5,7 +5,7 @@ import { JobHandler } from '../../building-blocks/types/job-handler' import { Chat, ChatRepositoryToken } from '../../domain/chat' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { Mail, MailServiceToken } from '../../domain/mail' import { Planificateur, ProcessJobType } from '../../domain/planificateur' @@ -19,7 +19,7 @@ export class EnvoyerEmailsMessagesConseillersJobHandler extends JobHandler constructor( @Inject(ChatRepositoryToken) private chatRepository: Chat.Repository, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private conseillerRepository: Conseiller.Repository, @Inject(MailServiceToken) private mailService: Mail.Service, diff --git a/src/application/jobs/traiter-evenement-milo.job.handler.ts b/src/application/jobs/traiter-evenement-milo.job.handler.ts index 4bf437ebe..0c1e630ba 100644 --- a/src/application/jobs/traiter-evenement-milo.job.handler.ts +++ b/src/application/jobs/traiter-evenement-milo.job.handler.ts @@ -174,7 +174,7 @@ export class TraiterEvenementMiloJobHandler extends JobHandler< this.isDateRecuperable(rendezVousMILO, jeune) && this.isStatutRDVRecuperable(rendezVousMILO) ) { - const newRendezVousCEJ = this.rendezVousMiloFactory.createRendezVousCEJ( + const newRendezVousCEJ = this.rendezVousMiloFactory.creerRendezVousCEJ( rendezVousMILO, jeune ) diff --git a/src/application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db.ts b/src/application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db.ts index 915fe3763..e677bb77c 100644 --- a/src/application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db.ts +++ b/src/application/queries/accueil/get-accueil-jeune-pole-emploi.query.handler.db.ts @@ -12,7 +12,7 @@ import { import { Authentification } from '../../../domain/authentification' import { estBRSA, estPoleEmploiBRSA } from '../../../domain/core' import { Demarche } from '../../../domain/demarche' -import { Jeune, JeunesRepositoryToken } from '../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../domain/jeune/jeune' import { KeycloakClient } from '../../../infrastructure/clients/keycloak-client' import { JeuneAuthorizer } from '../../authorizers/jeune-authorizer' import { GetFavorisAccueilQueryGetter } from '../query-getters/accueil/get-favoris.query.getter.db' @@ -34,7 +34,7 @@ export class GetAccueilJeunePoleEmploiQueryHandler extends QueryHandler< Result > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private jeuneAuthorizer: JeuneAuthorizer, private keycloakClient: KeycloakClient, diff --git a/src/application/queries/get-cv-pole-emploi.query.handler.ts b/src/application/queries/get-cv-pole-emploi.query.handler.ts index bf114c15a..9b8891cd5 100644 --- a/src/application/queries/get-cv-pole-emploi.query.handler.ts +++ b/src/application/queries/get-cv-pole-emploi.query.handler.ts @@ -10,7 +10,7 @@ import { } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' import { estPoleEmploiBRSA } from '../../domain/core' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { DocumentPoleEmploiDto } from '../../infrastructure/clients/dto/pole-emploi.dto' import { KeycloakClient } from '../../infrastructure/clients/keycloak-client' import { @@ -31,7 +31,7 @@ export class GetCVPoleEmploiQueryHandler extends QueryHandler< Result > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(PoleEmploiPartenaireClientToken) private poleEmploiPartenaireClient: PoleEmploiPartenaireClient, diff --git a/src/application/queries/get-diagoriente-metiers-favoris.query.handler.ts b/src/application/queries/get-diagoriente-metiers-favoris.query.handler.ts index c12c59eb1..f1fd72619 100644 --- a/src/application/queries/get-diagoriente-metiers-favoris.query.handler.ts +++ b/src/application/queries/get-diagoriente-metiers-favoris.query.handler.ts @@ -11,7 +11,7 @@ import { success } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' -import { JeunesRepositoryToken, Jeune } from '../../domain/jeune/jeune' +import { JeuneRepositoryToken, Jeune } from '../../domain/jeune/jeune' import { DiagorienteClient } from '../../infrastructure/clients/diagoriente-client' import { JeuneAuthorizer } from '../authorizers/jeune-authorizer' @@ -46,7 +46,7 @@ export class GetDiagorienteMetiersFavorisQueryHandler extends QueryHandler< constructor( private readonly jeuneAuthorizer: JeuneAuthorizer, private readonly diagorienteClient: DiagorienteClient, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeunesRepository: Jeune.Repository ) { super('GetDiagorienteMetiersFavorisQueryHandler') diff --git a/src/application/queries/get-diagoriente-urls.query.handler.ts b/src/application/queries/get-diagoriente-urls.query.handler.ts index d3f70ab7c..d6cc76d94 100644 --- a/src/application/queries/get-diagoriente-urls.query.handler.ts +++ b/src/application/queries/get-diagoriente-urls.query.handler.ts @@ -10,7 +10,7 @@ import { success } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { DiagorienteClient } from '../../infrastructure/clients/diagoriente-client' import { JeuneAuthorizer } from '../authorizers/jeune-authorizer' @@ -40,7 +40,7 @@ export class GetDiagorienteUrlsQueryHandler extends QueryHandler< > { constructor( private readonly jeuneAuthorizer: JeuneAuthorizer, - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private readonly jeunesRepository: Jeune.Repository, private readonly diagorienteClient: DiagorienteClient ) { diff --git a/src/application/queries/get-home-jeune.query.handler.ts b/src/application/queries/get-home-jeune.query.handler.ts index ceef9ddd0..e831a69ae 100644 --- a/src/application/queries/get-home-jeune.query.handler.ts +++ b/src/application/queries/get-home-jeune.query.handler.ts @@ -3,7 +3,7 @@ import { Result } from '../../building-blocks/types/result' import { Authentification } from '../../domain/authentification' import { Query } from '../../building-blocks/types/query' import { QueryHandler } from '../../building-blocks/types/query-handler' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { JeuneAuthorizer } from '../authorizers/jeune-authorizer' import { JeuneHomeQueryModel } from './query-models/home-jeune.query-model' @@ -17,7 +17,7 @@ export class GetHomeJeuneHandler extends QueryHandler< JeuneHomeQueryModel > { constructor( - @Inject(JeunesRepositoryToken) private jeuneRepository: Jeune.Repository, + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private jeuneAuthorizer: JeuneAuthorizer ) { super('GetHomeJeuneHandler') diff --git a/src/application/queries/get-jeunes-by-conseiller.query.handler.db.ts b/src/application/queries/get-jeunes-by-conseiller.query.handler.db.ts index 89d2d13d5..34cacf81f 100644 --- a/src/application/queries/get-jeunes-by-conseiller.query.handler.db.ts +++ b/src/application/queries/get-jeunes-by-conseiller.query.handler.db.ts @@ -13,7 +13,7 @@ import { } from '../../building-blocks/types/result' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { toDetailJeuneConseillerQueryModel } from './query-mappers/jeune.mappers' import { DetailJeuneConseillerQueryModel } from './query-models/jeunes.query-model' @@ -30,7 +30,7 @@ export class GetJeunesByConseillerQueryHandler extends QueryHandler< > { constructor( @Inject(SequelizeInjectionToken) private readonly sequelize: Sequelize, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private readonly conseillersRepository: Conseiller.Repository ) { super('GetJeunesByConseillerQueryHandler') diff --git a/src/application/queries/get-jeunes-by-etablissement.query.handler.db.ts b/src/application/queries/get-jeunes-by-etablissement.query.handler.db.ts index 7f0c24e34..71ad82f53 100644 --- a/src/application/queries/get-jeunes-by-etablissement.query.handler.db.ts +++ b/src/application/queries/get-jeunes-by-etablissement.query.handler.db.ts @@ -6,7 +6,7 @@ import { QueryHandler } from '../../building-blocks/types/query-handler' import { Result, success } from '../../building-blocks/types/result' import { Conseiller, - ConseillersRepositoryToken + ConseillerRepositoryToken } from '../../domain/conseiller/conseiller' import { ConseillerSqlModel } from '../../infrastructure/sequelize/models/conseiller.sql-model' import { JeuneSqlModel } from '../../infrastructure/sequelize/models/jeune.sql-model' @@ -27,7 +27,7 @@ export class GetJeunesByEtablissementQueryHandler extends QueryHandler< @Inject(SequelizeInjectionToken) private readonly sequelize: Sequelize, @Inject(ConseillerInterAgenceAuthorizer) private readonly conseillerAgenceAuthorizer: ConseillerInterAgenceAuthorizer, - @Inject(ConseillersRepositoryToken) + @Inject(ConseillerRepositoryToken) private readonly conseillersRepository: Conseiller.Repository ) { super('GetJeunesByEtablissementQueryHandler') diff --git a/src/application/queries/get-suivi-semaine-pole-emploi.query.handler.ts b/src/application/queries/get-suivi-semaine-pole-emploi.query.handler.ts index 211193bbf..de6d4d16f 100644 --- a/src/application/queries/get-suivi-semaine-pole-emploi.query.handler.ts +++ b/src/application/queries/get-suivi-semaine-pole-emploi.query.handler.ts @@ -12,7 +12,7 @@ import { import { Authentification } from '../../domain/authentification' import { estPoleEmploiBRSA } from '../../domain/core' import { Demarche } from '../../domain/demarche' -import { Jeune, JeunesRepositoryToken } from '../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../domain/jeune/jeune' import { KeycloakClient } from '../../infrastructure/clients/keycloak-client' import { JeuneAuthorizer } from '../authorizers/jeune-authorizer' import { GetDemarchesQueryGetter } from './query-getters/pole-emploi/get-demarches.query.getter' @@ -32,7 +32,7 @@ export class GetSuiviSemainePoleEmploiQueryHandler extends QueryHandler< Result> > { constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, private getDemarchesQueryGetter: GetDemarchesQueryGetter, private getRendezVousJeunePoleEmploiQueryGetter: GetRendezVousJeunePoleEmploiQueryGetter, diff --git a/src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.ts b/src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.ts index b380e84bb..f46331f4e 100644 --- a/src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.ts +++ b/src/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.ts @@ -73,7 +73,7 @@ export class GetAgendaSessionsConseillerMiloQueryHandler extends QueryHandler< ) const { id: idStructureMilo, timezone: timezoneStructure } = - conseiller.structure + conseiller.structureMilo const resultSessionMiloClient = await this.miloClient.getSessionsConseiller( idpToken, idStructureMilo, diff --git a/src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db.ts b/src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db.ts index 91a2fafd1..cdd56b9eb 100644 --- a/src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db.ts +++ b/src/application/queries/milo/get-detail-session-conseiller.milo.query.handler.db.ts @@ -48,7 +48,7 @@ export class GetDetailSessionConseillerMiloQueryHandler extends QueryHandler< if (isFailure(resultConseiller)) { return resultConseiller } - const { structure } = resultConseiller.data + const { structureMilo: structure } = resultConseiller.data const idpToken = await this.keycloakClient.exchangeTokenConseillerMilo( query.accessToken diff --git a/src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.ts b/src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.ts index edcb2f891..81baeb59f 100644 --- a/src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.ts +++ b/src/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.ts @@ -56,7 +56,7 @@ export class GetSessionsConseillerMiloQueryHandler extends QueryHandler< } const { id: idStructureMilo, timezone: timezoneStructure } = - resultConseiller.data.structure + resultConseiller.data.structureMilo let periode if (query.dateDebut || query.dateFin) diff --git a/src/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.ts b/src/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.ts index 875f2bf87..78d5fd616 100644 --- a/src/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.ts +++ b/src/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.ts @@ -66,7 +66,7 @@ export class GetSessionsConseillerMiloV2QueryHandler extends QueryHandler< } const { id: idStructureMilo, timezone: timezoneStructure } = - resultConseiller.data.structure + resultConseiller.data.structureMilo const resultSessionsMiloFromQueryGetter: Result< SessionConseillerMiloQueryModel[] diff --git a/src/application/queries/query-getters/pole-emploi/get-demarches.query.getter.ts b/src/application/queries/query-getters/pole-emploi/get-demarches.query.getter.ts index 4e937bd69..3389c8892 100644 --- a/src/application/queries/query-getters/pole-emploi/get-demarches.query.getter.ts +++ b/src/application/queries/query-getters/pole-emploi/get-demarches.query.getter.ts @@ -7,7 +7,7 @@ import { success } from '../../../../building-blocks/types/result' import { Demarche } from '../../../../domain/demarche' -import { Jeune, JeunesRepositoryToken } from '../../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../../domain/jeune/jeune' import { KeycloakClient } from '../../../../infrastructure/clients/keycloak-client' import { PoleEmploiPartenaireClient, @@ -31,7 +31,7 @@ export class GetDemarchesQueryGetter { private logger: Logger constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(PoleEmploiPartenaireClientToken) private poleEmploiPartenaireClient: PoleEmploiPartenaireClient, diff --git a/src/application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter.ts b/src/application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter.ts index 9cac4289c..556c8f5e3 100644 --- a/src/application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter.ts +++ b/src/application/queries/query-getters/pole-emploi/get-rendez-vous-jeune-pole-emploi.query.getter.ts @@ -7,7 +7,7 @@ import { Result, success } from '../../../../building-blocks/types/result' -import { Jeune, JeunesRepositoryToken } from '../../../../domain/jeune/jeune' +import { Jeune, JeuneRepositoryToken } from '../../../../domain/jeune/jeune' import { RendezVous } from '../../../../domain/rendez-vous/rendez-vous' import { KeycloakClient } from '../../../../infrastructure/clients/keycloak-client' import { @@ -36,7 +36,7 @@ export class GetRendezVousJeunePoleEmploiQueryGetter { private logger: Logger constructor( - @Inject(JeunesRepositoryToken) + @Inject(JeuneRepositoryToken) private jeuneRepository: Jeune.Repository, @Inject(PoleEmploiPartenaireClientToken) private poleEmploiPartenaireClient: PoleEmploiPartenaireClient, diff --git a/src/building-blocks/types/domain-error.ts b/src/building-blocks/types/domain-error.ts index 484d5a153..eacb00bae 100644 --- a/src/building-blocks/types/domain-error.ts +++ b/src/building-blocks/types/domain-error.ts @@ -149,23 +149,13 @@ export class CompteDiagorienteInvalideError implements DomainError { } } -export class JeuneNonLieALAgenceError implements DomainError { - static CODE = 'JEUNE_NON_LIE_A_L_AGENCE' - readonly code: string = JeuneNonLieALAgenceError.CODE +export class JeuneNonLieALaStructureMiloError implements DomainError { + static CODE = 'JEUNE_NON_LIE_A_LA_STRUCTURE_MILO' + readonly code: string = JeuneNonLieALaStructureMiloError.CODE readonly message: string - constructor(idJeune: string, idAgence: string) { - this.message = `Le jeune ${idJeune} n'est pas lié à l'agence ${idAgence}` - } -} - -export class ConseillerSansAgenceError implements DomainError { - static CODE = 'CONSEILLER_SANS_AGENCE' - readonly code: string = ConseillerSansAgenceError.CODE - readonly message: string - - constructor(idConseiller: string) { - this.message = `Le conseiller ${idConseiller} n'a pas renseigné son agence` + constructor(idJeune: string, idStructureMilo: string) { + this.message = `Le jeune ${idJeune} n'est pas lié à la structure Milo ${idStructureMilo}` } } diff --git a/src/domain/conseiller/conseiller.ts b/src/domain/conseiller/conseiller.ts index 92c2c80c3..bdb12ddf6 100644 --- a/src/domain/conseiller/conseiller.ts +++ b/src/domain/conseiller/conseiller.ts @@ -19,7 +19,7 @@ export interface Conseiller { notificationsSonores: boolean } -export const ConseillersRepositoryToken = 'Conseiller.Repository' +export const ConseillerRepositoryToken = 'Conseiller.Repository' export namespace Conseiller { // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/src/domain/jeune/jeune.ts b/src/domain/jeune/jeune.ts index 4d3270d0f..e999ea583 100644 --- a/src/domain/jeune/jeune.ts +++ b/src/domain/jeune/jeune.ts @@ -8,7 +8,7 @@ import { Core } from '../core' import * as _ConfigurationApplication from './configuration-application' import * as _PoleEmploi from './jeune.pole-emploi' -export const JeunesRepositoryToken = 'Jeune.Repository' +export const JeuneRepositoryToken = 'Jeune.Repository' export const JeuneConfigurationApplicationRepositoryToken = 'Jeune.ConfigurationApplication.Repository' export const JeunePoleEmploiRepositoryToken = 'Jeune.PoleEmploi.Repository' diff --git a/src/domain/milo/conseiller.milo.db.ts b/src/domain/milo/conseiller.milo.db.ts index 296954742..e7ff9afca 100644 --- a/src/domain/milo/conseiller.milo.db.ts +++ b/src/domain/milo/conseiller.milo.db.ts @@ -20,9 +20,8 @@ import { AsSql } from '../../infrastructure/sequelize/types' export const ConseillerMiloRepositoryToken = 'ConseillerMilo.Repository' -export interface ConseillerMilo { - id: string - structure: ConseillerMilo.Structure +export interface ConseillerMilo extends Conseiller { + structureMilo: ConseillerMilo.Structure } export namespace ConseillerMilo { diff --git a/src/domain/milo/jeune.milo.ts b/src/domain/milo/jeune.milo.ts index 317e0141a..b7da2637d 100644 --- a/src/domain/milo/jeune.milo.ts +++ b/src/domain/milo/jeune.milo.ts @@ -50,6 +50,7 @@ export namespace JeuneMilo { export interface Repository { get(id: string): Promise> + findAll(idsJeunesMilo: string[]): Promise getDossier(id: string): Promise> getByIdDossier(idDossier: string): Promise> saveSituationsJeune(situations: Situations): Promise diff --git a/src/domain/milo/rendez-vous.milo.ts b/src/domain/milo/rendez-vous.milo.ts index 9c3862a29..8359f7af8 100644 --- a/src/domain/milo/rendez-vous.milo.ts +++ b/src/domain/milo/rendez-vous.milo.ts @@ -54,7 +54,7 @@ export namespace RendezVousMilo { export class Factory { constructor(private idService: IdService) {} - createRendezVousCEJ( + creerRendezVousCEJ( rendezVousMilo: RendezVousMilo, jeune: JeuneDuRendezVous ): RendezVous { diff --git a/src/domain/rendez-vous/rendez-vous.ts b/src/domain/rendez-vous/rendez-vous.ts index 7562198db..a29e4a424 100644 --- a/src/domain/rendez-vous/rendez-vous.ts +++ b/src/domain/rendez-vous/rendez-vous.ts @@ -1,25 +1,26 @@ import { Injectable } from '@nestjs/common' import { DateTime } from 'luxon' import { - ConseillerSansAgenceError, + ConseillerMiloSansStructure, DateNonAutoriseeError, - JeuneNonLieALAgenceError, + JeuneNonLieALaStructureMiloError, JeuneNonLieAuConseillerError, MauvaiseCommandeError } from '../../building-blocks/types/domain-error' import { + Result, emptySuccess, failure, isFailure, - Result, success } from '../../building-blocks/types/result' +import { DateService } from '../../utils/date-service' import { IdService } from '../../utils/id-service' import { Conseiller } from '../conseiller/conseiller' import { Jeune } from '../jeune/jeune' import * as _AnimationCollective from './animation-collective' import * as _Historique from './historique' -import { DateService } from '../../utils/date-service' +import { JeuneMilo } from '../milo/jeune.milo' export const RendezVousRepositoryToken = 'RendezVous.Repository' @@ -104,6 +105,17 @@ export type JeuneDuRendezVous = Pick< 'id' | 'firstName' | 'lastName' | 'conseiller' | 'email' | 'configuration' > +export type JeuneMiloDuRendezVous = Pick< + JeuneMilo, + | 'id' + | 'firstName' + | 'lastName' + | 'conseiller' + | 'email' + | 'configuration' + | 'idStructureMilo' +> + export interface RendezVous { id: string source: RendezVous.Source @@ -209,13 +221,15 @@ export namespace RendezVous { ) } - function verifierAgenceJeunes( - jeunes: JeuneDuRendezVous[], - idAgence: string + function verifierStructureMiloJeunes( + jeunes: JeuneMiloDuRendezVous[], + idStructureMilo: string ): Result { for (const jeune of jeunes) { - if (jeune.conseiller?.idAgence !== idAgence) { - return failure(new JeuneNonLieALAgenceError(jeune.id, idAgence)) + if (!jeune.idStructureMilo || jeune.idStructureMilo !== idStructureMilo) { + return failure( + new JeuneNonLieALaStructureMiloError(jeune.id, idStructureMilo) + ) } } return emptySuccess() @@ -238,14 +252,14 @@ export namespace RendezVous { creer( infosRendezVousACreer: InfosRendezVousACreer, - jeunes: Jeune[], - conseiller: Conseiller + jeunes: Jeune[] | JeuneMilo[], + conseiller: Conseiller | Conseiller.Milo ): Result { const type = infosRendezVousACreer.type ? (infosRendezVousACreer.type as CodeTypeRendezVous) : CodeTypeRendezVous.ENTRETIEN_INDIVIDUEL_CONSEILLER const categorie = mapCodeCategorieTypeRendezVous[type] - let idAgence = undefined + let idStructureMilo = undefined switch (categorie) { case CategorieRendezVous.MILO: @@ -253,6 +267,10 @@ export namespace RendezVous { new MauvaiseCommandeError('Le type de rendez-vous est invalide') ) case CategorieRendezVous.CEJ_AC: + idStructureMilo = (conseiller as Conseiller.Milo).structureMilo?.id + if (!idStructureMilo) { + return failure(new ConseillerMiloSansStructure(conseiller.id)) + } if ( infosRendezVousACreer.nombreMaxParticipants && infosRendezVousACreer.nombreMaxParticipants < jeunes.length @@ -263,16 +281,13 @@ export namespace RendezVous { ) ) } - idAgence = conseiller.agence?.id - if (!idAgence) { - return failure(new ConseillerSansAgenceError(conseiller.id)) - } - const resultVerificationAgence = verifierAgenceJeunes( + + const resultVerificationStructureMilo = verifierStructureMiloJeunes( jeunes, - idAgence + idStructureMilo ) - if (isFailure(resultVerificationAgence)) { - return resultVerificationAgence + if (isFailure(resultVerificationStructureMilo)) { + return resultVerificationStructureMilo } break case CategorieRendezVous.CEJ_RDV: @@ -320,7 +335,7 @@ export namespace RendezVous { nom: conseiller.lastName, prenom: conseiller.firstName }, - idAgence, + idStructureMilo, nombreMaxParticipants: infosRendezVousACreer.nombreMaxParticipants }) } @@ -351,13 +366,13 @@ export namespace RendezVous { ) ) } - if (rendezVousInitial.idAgence) { - const resultVerificationAgence = verifierAgenceJeunes( + if (rendezVousInitial.idStructureMilo) { + const resultVerificationStrucutreMilo = verifierStructureMiloJeunes( infosRendezVousAMettreAJour.jeunes, - rendezVousInitial.idAgence + rendezVousInitial.idStructureMilo ) - if (isFailure(resultVerificationAgence)) { - return resultVerificationAgence + if (isFailure(resultVerificationStrucutreMilo)) { + return resultVerificationStrucutreMilo } } break diff --git a/src/infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db.ts b/src/infrastructure/repositories/liste-de-diffusion-sql.repository.db.ts similarity index 85% rename from src/infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db.ts rename to src/infrastructure/repositories/liste-de-diffusion-sql.repository.db.ts index 99bc757bb..b3eb1a11c 100644 --- a/src/infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db.ts +++ b/src/infrastructure/repositories/liste-de-diffusion-sql.repository.db.ts @@ -1,17 +1,17 @@ -import { Conseiller } from '../../../domain/conseiller/conseiller' +import { Conseiller } from '../../domain/conseiller/conseiller' import { ListeDeDiffusionDto, ListeDeDiffusionSqlModel -} from '../../sequelize/models/liste-de-diffusion.sql-model' -import { AsSql } from '../../sequelize/types' +} from '../sequelize/models/liste-de-diffusion.sql-model' +import { AsSql } from '../sequelize/types' import { Inject } from '@nestjs/common' -import { SequelizeInjectionToken } from '../../sequelize/providers' +import { SequelizeInjectionToken } from '../sequelize/providers' import { Op, Sequelize } from 'sequelize' -import { ListeDeDiffusionJeuneAssociationSqlModel } from '../../sequelize/models/liste-de-diffusion-jeune-association.sql-model' +import { ListeDeDiffusionJeuneAssociationSqlModel } from '../sequelize/models/liste-de-diffusion-jeune-association.sql-model' import { DateTime } from 'luxon' -import { JeuneSqlModel } from '../../sequelize/models/jeune.sql-model' -import { ListeDeDiffusion } from '../../../domain/conseiller/liste-de-diffusion' -import { ConseillerSqlModel } from '../../sequelize/models/conseiller.sql-model' +import { JeuneSqlModel } from '../sequelize/models/jeune.sql-model' +import { ListeDeDiffusion } from '../../domain/conseiller/liste-de-diffusion' +import { ConseillerSqlModel } from '../sequelize/models/conseiller.sql-model' export class ListeDeDiffusionSqlRepository implements Conseiller.ListeDeDiffusion.Repository diff --git a/src/infrastructure/repositories/milo/conseiller.milo.repository.db.ts b/src/infrastructure/repositories/milo/conseiller.milo.repository.db.ts index 2a48778da..8e708777c 100644 --- a/src/infrastructure/repositories/milo/conseiller.milo.repository.db.ts +++ b/src/infrastructure/repositories/milo/conseiller.milo.repository.db.ts @@ -8,6 +8,7 @@ import { Result, failure, success } from '../../../building-blocks/types/result' import { Conseiller } from '../../../domain/conseiller/conseiller' import { ConseillerSqlModel } from '../../sequelize/models/conseiller.sql-model' import { StructureMiloSqlModel } from '../../sequelize/models/structure-milo.sql-model' +import { fromSqlConseillerToAggregate } from '../conseiller-sql.repository.db' @Injectable() export class ConseillerMiloSqlRepository implements Conseiller.Milo.Repository { @@ -26,8 +27,8 @@ export class ConseillerMiloSqlRepository implements Conseiller.Milo.Repository { return failure(new ConseillerMiloSansStructure(id)) } return success({ - id, - structure: { + ...fromSqlConseillerToAggregate(conseillerSqlModel), + structureMilo: { id: conseillerSqlModel.structureMilo.id, timezone: conseillerSqlModel.structureMilo.timezone } diff --git a/src/infrastructure/repositories/milo/jeune-milo-http-sql.repository.db.ts b/src/infrastructure/repositories/milo/jeune-milo-http-sql.repository.db.ts index 23d1aa0c0..8575baef2 100644 --- a/src/infrastructure/repositories/milo/jeune-milo-http-sql.repository.db.ts +++ b/src/infrastructure/repositories/milo/jeune-milo-http-sql.repository.db.ts @@ -19,6 +19,7 @@ import { DossierMiloDto } from '../dto/milo.dto' import { fromSqlToJeune } from '../mappers/jeunes.mappers' import { StructureMiloSqlModel } from '../../sequelize/models/structure-milo.sql-model' import { DateTime } from 'luxon' +import { ConseillerSqlModel } from '../../sequelize/models/conseiller.sql-model' @Injectable() export class MiloJeuneHttpSqlRepository implements JeuneMilo.Repository { @@ -50,6 +51,21 @@ export class MiloJeuneHttpSqlRepository implements JeuneMilo.Repository { return success(jeuneMilo) } + async findAll(ids: string[]): Promise { + const jeunesSqlModels = await JeuneSqlModel.findAll({ + where: { + id: { + [Op.in]: ids + } + }, + include: [ConseillerSqlModel] + }) + return jeunesSqlModels.map(jeuneSql => ({ + ...fromSqlToJeune(jeuneSql), + idStructureMilo: jeuneSql.idStructureMilo || undefined + })) + } + async getDossier(idDossier: string): Promise> { try { await this.rateLimiterService.dossierMiloRateLimiter.attendreLaProchaineDisponibilite() diff --git a/src/infrastructure/routes/conseillers.controller.ts b/src/infrastructure/routes/conseillers.controller.ts index 6c49481a7..95aa6346f 100644 --- a/src/infrastructure/routes/conseillers.controller.ts +++ b/src/infrastructure/routes/conseillers.controller.ts @@ -29,9 +29,9 @@ import { CreateListeDeDiffusionCommandHandler } from '../../application/commands/create-liste-de-diffusion.command.handler' import { - CreateRendezVousCommand, - CreateRendezVousCommandHandler -} from '../../application/commands/create-rendez-vous.command.handler' + CreerRendezVousCommand, + CreerRendezVousCommandHandler +} from '../../application/commands/rendez-vous/creer-rendez-vous.command.handler' import { ModifierConseillerCommandHandler } from '../../application/commands/modifier-conseiller.command.handler' import { ModifierJeuneDuConseillerCommandHandler } from '../../application/commands/modifier-jeune-du-conseiller.command.handler' import { RecupererJeunesDuConseillerCommandHandler } from '../../application/commands/recuperer-jeunes-du-conseiller.command.handler' @@ -82,7 +82,7 @@ import { GetRendezVousConseillerQueryParams, PutJeuneDuConseillerPayload } from './validation/conseillers.inputs' -import { CreateRendezVousPayload } from './validation/rendez-vous.inputs' +import { CreerRendezVousPayload } from './validation/rendez-vous.inputs' @Controller('conseillers') @ApiOAuth2([]) @@ -97,7 +97,7 @@ export class ConseillersController { private readonly createActionCommandHandler: CreateActionCommandHandler, private readonly sendNotificationsNouveauxMessages: SendNotificationsNouveauxMessagesCommandHandler, private readonly getAllRendezVousConseillerQueryHandler: GetAllRendezVousConseillerQueryHandler, - private readonly createRendezVousCommandHandler: CreateRendezVousCommandHandler, + private readonly creerRendezVousCommandHandler: CreerRendezVousCommandHandler, private readonly modifierConseillerCommandHandler: ModifierConseillerCommandHandler, private readonly recupererJeunesDuConseillerCommandHandler: RecupererJeunesDuConseillerCommandHandler, private readonly modifierJeuneDuConseillerCommandHandler: ModifierJeuneDuConseillerCommandHandler, @@ -311,34 +311,34 @@ export class ConseillersController { } @ApiOperation({ - summary: 'Crée un rendez-vous pour des jeunes', + summary: 'Crée un rendez-vous ou une animation collective pour des jeunes', description: 'Autorisé pour un conseiller' }) @Post(':idConseiller/rendezvous') - async createRendezVous( + async creerRendezVous( @Param('idConseiller') idConseiller: string, - @Body() createRendezVousPayload: CreateRendezVousPayload, + @Body() creerRendezVousPayload: CreerRendezVousPayload, @Utilisateur() utilisateur: Authentification.Utilisateur ): Promise { - const command: CreateRendezVousCommand = { - idsJeunes: createRendezVousPayload.jeunesIds, - commentaire: createRendezVousPayload.comment, - date: createRendezVousPayload.date, - duree: createRendezVousPayload.duration, + const command: CreerRendezVousCommand = { + idsJeunes: creerRendezVousPayload.jeunesIds, + commentaire: creerRendezVousPayload.comment, + date: creerRendezVousPayload.date, + duree: creerRendezVousPayload.duration, idConseiller: idConseiller, - modalite: createRendezVousPayload.modality, - titre: createRendezVousPayload.titre, - type: createRendezVousPayload.type, - precision: createRendezVousPayload.precision, - adresse: createRendezVousPayload.adresse, - organisme: createRendezVousPayload.organisme, - presenceConseiller: createRendezVousPayload.presenceConseiller, - invitation: createRendezVousPayload.invitation, - nombreMaxParticipants: createRendezVousPayload.nombreMaxParticipants + modalite: creerRendezVousPayload.modality, + titre: creerRendezVousPayload.titre, + type: creerRendezVousPayload.type, + precision: creerRendezVousPayload.precision, + adresse: creerRendezVousPayload.adresse, + organisme: creerRendezVousPayload.organisme, + presenceConseiller: creerRendezVousPayload.presenceConseiller, + invitation: creerRendezVousPayload.invitation, + nombreMaxParticipants: creerRendezVousPayload.nombreMaxParticipants } const result: Result = - await this.createRendezVousCommandHandler.execute(command, utilisateur) + await this.creerRendezVousCommandHandler.execute(command, utilisateur) if (isSuccess(result)) { return { id: result.data } diff --git a/src/infrastructure/routes/rendez-vous.controller.ts b/src/infrastructure/routes/rendez-vous.controller.ts index 5a3afe26e..ae1f356e1 100644 --- a/src/infrastructure/routes/rendez-vous.controller.ts +++ b/src/infrastructure/routes/rendez-vous.controller.ts @@ -14,9 +14,9 @@ import { DeleteRendezVousCommandHandler } from '../../application/commands/delete-rendez-vous.command.handler.db' import { - UpdateRendezVousCommand, - UpdateRendezVousCommandHandler -} from '../../application/commands/update-rendez-vous.command.handler' + ModifierRendezVousCommand, + ModifierRendezVousCommandHandler +} from '../../application/commands/rendez-vous/modifier-rendez-vous.command.handler' import { GetDetailRendezVousQueryHandler } from '../../application/queries/rendez-vous/get-detail-rendez-vous.query.handler.db' import { RendezVousConseillerDetailQueryModel, @@ -36,7 +36,7 @@ export class RendezVousController { constructor( private readonly getDetailRendezVousQueryHandler: GetDetailRendezVousQueryHandler, private readonly deleteRendezVousCommandHandler: DeleteRendezVousCommandHandler, - private readonly updateRendezVousCommandHandler: UpdateRendezVousCommandHandler + private readonly modifierRendezVousCommandHandler: ModifierRendezVousCommandHandler ) {} @Get(':idRendezVous') @@ -83,7 +83,7 @@ export class RendezVousController { @Body() updateRendezVousPayload: UpdateRendezVousPayload, @Utilisateur() utilisateur: Authentification.Utilisateur ): Promise { - const command: UpdateRendezVousCommand = { + const command: ModifierRendezVousCommand = { idRendezVous: idRendezVous, idsJeunes: updateRendezVousPayload.jeunesIds, titre: updateRendezVousPayload.titre, @@ -97,7 +97,7 @@ export class RendezVousController { nombreMaxParticipants: updateRendezVousPayload.nombreMaxParticipants } - const result = await this.updateRendezVousCommandHandler.execute( + const result = await this.modifierRendezVousCommandHandler.execute( command, utilisateur ) diff --git a/src/infrastructure/routes/result.handler.ts b/src/infrastructure/routes/result.handler.ts index b7bdb4916..ed6f77b7a 100644 --- a/src/infrastructure/routes/result.handler.ts +++ b/src/infrastructure/routes/result.handler.ts @@ -14,7 +14,6 @@ import { CompteDiagorienteInvalideError, ConseillerMiloSansStructure, ConseillerNonValide, - ConseillerSansAgenceError, DateNonAutoriseeError, DossierExisteDejaError, DroitsInsuffisants, @@ -23,7 +22,7 @@ import { ErreurHttp, JeuneMiloSansIdDossier, JeuneMiloSansStructure, - JeuneNonLieALAgenceError, + JeuneNonLieALaStructureMiloError, JeuneNonLieAuConseillerError, JeunePasInactifError, MauvaiseCommandeError, @@ -65,8 +64,7 @@ export function handleFailure(result: Result): void { case ReponsesCampagneInvalide.CODE: case CampagneNonActive.CODE: case CampagneExisteDejaError.CODE: - case JeuneNonLieALAgenceError.CODE: - case ConseillerSansAgenceError.CODE: + case JeuneNonLieALaStructureMiloError.CODE: case ConseillerMiloSansStructure.CODE: case JeuneMiloSansStructure.CODE: case JeuneMiloSansIdDossier.CODE: diff --git a/src/infrastructure/routes/validation/rendez-vous.inputs.ts b/src/infrastructure/routes/validation/rendez-vous.inputs.ts index 8d6f6a649..8e30390e3 100644 --- a/src/infrastructure/routes/validation/rendez-vous.inputs.ts +++ b/src/infrastructure/routes/validation/rendez-vous.inputs.ts @@ -18,7 +18,7 @@ import { RendezVous } from '../../../domain/rendez-vous/rendez-vous' -export class CreateRendezVousPayload { +export class CreerRendezVousPayload { @ApiPropertyOptional() @IsString() @IsOptional() @@ -45,7 +45,7 @@ export class CreateRendezVousPayload { @IsOptional() @IsString() @IsEnum(CodeTypeRendezVous) - type?: string + type?: CodeTypeRendezVous @ApiProperty() @IsArray() diff --git a/src/utils/feature-flip-session-helper.ts b/src/utils/feature-flip-session-helper.ts index 9c4303469..407b0945c 100644 --- a/src/utils/feature-flip-session-helper.ts +++ b/src/utils/feature-flip-session-helper.ts @@ -14,7 +14,10 @@ export function sessionsMiloSontActiveesPourLeConseiller( configuration: ConfigService, conseillerMilo: ConseillerMilo ): boolean { - return sessionsMiloSontActivees(configuration, conseillerMilo.structure.id) + return sessionsMiloSontActivees( + configuration, + conseillerMilo.structureMilo.id + ) } export function estUnEarlyAdopter( diff --git a/test/application/authorizers/conseiller-inter-structure-milo-authorizer.test.ts b/test/application/authorizers/conseiller-inter-structure-milo-authorizer.test.ts index 1c3976c03..d77c7746a 100644 --- a/test/application/authorizers/conseiller-inter-structure-milo-authorizer.test.ts +++ b/test/application/authorizers/conseiller-inter-structure-milo-authorizer.test.ts @@ -41,7 +41,7 @@ describe('ConseillerInterStructureMiloAuthorizer', () => { // When const result = await authorizer.autoriserConseillerPourUneStructureMilo( - conseiller.structure.id, + conseiller.structureMilo.id, utilisateur ) @@ -82,7 +82,7 @@ describe('ConseillerInterStructureMiloAuthorizer', () => { const jeune: JeuneMilo = { ...unJeune({}), - idStructureMilo: conseiller.structure.id + idStructureMilo: conseiller.structureMilo.id } jeuneRepository.get.withArgs(jeune.id).resolves(success(jeune)) diff --git a/test/application/commands/milo/emargement-session-milo.command.handler.test.ts b/test/application/commands/milo/emargement-session-milo.command.handler.test.ts index fe34b225e..baeee82c6 100644 --- a/test/application/commands/milo/emargement-session-milo.command.handler.test.ts +++ b/test/application/commands/milo/emargement-session-milo.command.handler.test.ts @@ -91,7 +91,7 @@ describe('EmargerSessionMiloCommandHandler', () => { sessionMiloRepository.getForConseiller .withArgs( commandSansEmargement.idSession, - conseiller.structure, + conseiller.structureMilo, idpToken ) .resolves(failure(erreurHttp)) @@ -139,7 +139,7 @@ describe('EmargerSessionMiloCommandHandler', () => { sessionMiloRepository.getForConseiller .withArgs( commandSansEmargement.idSession, - conseiller.structure, + conseiller.structureMilo, idpToken ) .resolves(success(uneSessionMilo())) diff --git a/test/application/commands/milo/update-session-milo.command.handler.test.ts b/test/application/commands/milo/update-session-milo.command.handler.test.ts index 8ac75e148..a27e7328c 100644 --- a/test/application/commands/milo/update-session-milo.command.handler.test.ts +++ b/test/application/commands/milo/update-session-milo.command.handler.test.ts @@ -104,7 +104,7 @@ describe('UpdateSessionMiloCommandHandler', () => { sessionMiloRepository.getForConseiller .withArgs( commandSansInscription.idSession, - conseiller.structure, + conseiller.structureMilo, idpToken ) .resolves(failure(erreurHttp)) diff --git a/test/application/commands/create-rendez-vous.command.handler.test.ts b/test/application/commands/rendez-vous/creer-rendez-vous.command.handler.test.ts similarity index 81% rename from test/application/commands/create-rendez-vous.command.handler.test.ts rename to test/application/commands/rendez-vous/creer-rendez-vous.command.handler.test.ts index f17e09585..026dc0b17 100644 --- a/test/application/commands/create-rendez-vous.command.handler.test.ts +++ b/test/application/commands/rendez-vous/creer-rendez-vous.command.handler.test.ts @@ -1,45 +1,48 @@ -import { ConseillerAuthorizer } from '../../../src/application/authorizers/conseiller-authorizer' -import { PlanificateurService } from '../../../src/domain/planificateur' -import { - unUtilisateurConseiller, - unUtilisateurJeune -} from '../../fixtures/authentification.fixture' -import { createSandbox, expect, StubbedClass, stubClass } from '../../utils' import { StubbedType, stubInterface } from '@salesforce/ts-sinon' import { SinonSandbox } from 'sinon' -import { failure, success } from '../../../src/building-blocks/types/result' +import { Conseiller } from 'src/domain/conseiller/conseiller' +import { Evenement, EvenementService } from 'src/domain/evenement' +import { stubClassSandbox } from 'test/utils/types' +import { ConseillerAuthorizer } from '../../../../src/application/authorizers/conseiller-authorizer' import { - CodeTypeRendezVous, - RendezVous -} from '../../../src/domain/rendez-vous/rendez-vous' -import { Notification } from '../../../src/domain/notification/notification' -import { uneConfiguration, unJeune } from '../../fixtures/jeune.fixture' + CreerRendezVousCommand, + CreerRendezVousCommandHandler +} from '../../../../src/application/commands/rendez-vous/creer-rendez-vous.command.handler' import { - ConseillerSansAgenceError, + ConseillerMiloSansStructure, DateNonAutoriseeError, NonTrouveError -} from '../../../src/building-blocks/types/domain-error' -import { Jeune } from '../../../src/domain/jeune/jeune' +} from '../../../../src/building-blocks/types/domain-error' +import { failure, success } from '../../../../src/building-blocks/types/result' +import { Jeune } from '../../../../src/domain/jeune/jeune' +import { Mail } from '../../../../src/domain/mail' +import { JeuneMilo } from '../../../../src/domain/milo/jeune.milo' +import { Notification } from '../../../../src/domain/notification/notification' +import { PlanificateurService } from '../../../../src/domain/planificateur' import { - CreateRendezVousCommand, - CreateRendezVousCommandHandler -} from '../../../src/application/commands/create-rendez-vous.command.handler' -import { Evenement, EvenementService } from 'src/domain/evenement' -import { Mail } from '../../../src/domain/mail' -import { Conseiller } from 'src/domain/conseiller/conseiller' -import { stubClassSandbox } from 'test/utils/types' -import { unRendezVous } from '../../fixtures/rendez-vous.fixture' -import { unConseiller } from '../../fixtures/conseiller.fixture' + CodeTypeRendezVous, + RendezVous +} from '../../../../src/domain/rendez-vous/rendez-vous' +import { + unUtilisateurConseiller, + unUtilisateurJeune +} from '../../../fixtures/authentification.fixture' +import { unConseiller } from '../../../fixtures/conseiller.fixture' +import { unJeune, uneConfiguration } from '../../../fixtures/jeune.fixture' +import { unRendezVous } from '../../../fixtures/rendez-vous.fixture' +import { StubbedClass, createSandbox, expect, stubClass } from '../../../utils' -describe('CreateRendezVousCommandHandler', () => { +describe('CreerRendezVousCommandHandler', () => { let rendezVousRepository: StubbedType let notificationService: StubbedClass let rendezVousFactory: StubbedClass let jeuneRepository: StubbedType + let jeuneMiloRepository: StubbedType let conseillerRepository: StubbedType + let conseillerMiloRepository: StubbedType let planificateurService: StubbedClass const conseillerAuthorizer = stubClass(ConseillerAuthorizer) - let createRendezVousCommandHandler: CreateRendezVousCommandHandler + let creerRendezVousCommandHandler: CreerRendezVousCommandHandler let evenementService: StubbedClass let mailClient: StubbedType const conseiller = unConseiller() @@ -60,18 +63,22 @@ describe('CreateRendezVousCommandHandler', () => { const sandbox: SinonSandbox = createSandbox() rendezVousRepository = stubInterface(sandbox) conseillerRepository = stubInterface(sandbox) + conseillerMiloRepository = stubInterface(sandbox) notificationService = stubClassSandbox(Notification.Service, sandbox) notificationService.notifierLesJeunesDuRdv.resolves() jeuneRepository = stubInterface(sandbox) + jeuneMiloRepository = stubInterface(sandbox) planificateurService = stubClass(PlanificateurService) rendezVousFactory = stubClass(RendezVous.Factory) evenementService = stubClass(EvenementService) mailClient = stubInterface(sandbox) - createRendezVousCommandHandler = new CreateRendezVousCommandHandler( + creerRendezVousCommandHandler = new CreerRendezVousCommandHandler( rendezVousRepository, jeuneRepository, + jeuneMiloRepository, conseillerRepository, + conseillerMiloRepository, rendezVousFactory, notificationService, mailClient, @@ -85,7 +92,7 @@ describe('CreateRendezVousCommandHandler', () => { describe("quand le conseiller n'existe pas", () => { it('renvoie une failure', async () => { // Given - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id, jeune2.id], idConseiller: conseiller.id, commentaire: rendezVous.commentaire, @@ -98,7 +105,7 @@ describe('CreateRendezVousCommandHandler', () => { .resolves(undefined) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(rendezVousRepository.save).not.to.have.been.calledWith( @@ -112,7 +119,7 @@ describe('CreateRendezVousCommandHandler', () => { describe("quand au moins un des jeunes n'existe pas", () => { it('renvoie une failure', async () => { // Given - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id, jeune2.id], idConseiller: conseiller.id, commentaire: rendezVous.commentaire, @@ -126,7 +133,7 @@ describe('CreateRendezVousCommandHandler', () => { jeuneRepository.findAll.withArgs(command.idsJeunes).resolves([jeune1]) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(rendezVousRepository.save).not.to.have.been.calledWith( @@ -140,7 +147,7 @@ describe('CreateRendezVousCommandHandler', () => { describe("quand la création n'est pas possible", () => { it('renvoie une failure', async () => { // Given - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id, jeune2.id], idConseiller: conseiller.id, commentaire: rendezVous.commentaire, @@ -157,10 +164,10 @@ describe('CreateRendezVousCommandHandler', () => { rendezVousFactory.creer .withArgs(command, [jeune1, jeune2], conseiller) - .returns(failure(new ConseillerSansAgenceError(conseiller.id))) + .returns(failure(new ConseillerMiloSansStructure(conseiller.id))) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(rendezVousRepository.save).not.to.have.been.calledWith( @@ -169,7 +176,7 @@ describe('CreateRendezVousCommandHandler', () => { expect(notificationService.notifierLesJeunesDuRdv).to.have.callCount(0) expect(mailClient.envoyerMailRendezVous).callCount(0) expect(result).to.deep.equal( - failure(new ConseillerSansAgenceError(conseiller.id)) + failure(new ConseillerMiloSansStructure(conseiller.id)) ) }) }) @@ -177,7 +184,7 @@ describe('CreateRendezVousCommandHandler', () => { describe("quand la date du rendez-vous n'est pas valide", () => { it('renvoie une failure', async () => { // Given - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id, jeune2.id], idConseiller: conseiller.id, commentaire: rendezVous.commentaire, @@ -196,7 +203,7 @@ describe('CreateRendezVousCommandHandler', () => { .returns(failure(new DateNonAutoriseeError())) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(rendezVousRepository.save).not.to.have.been.calledWith( @@ -221,7 +228,7 @@ describe('CreateRendezVousCommandHandler', () => { it('crée un rendez-vous, envoie une notification au jeune, envoie un mail au conseiller et planifie', async () => { // Given const rendezVousAvecInvitation = { ...rendezVous, invitation: true } - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id, jeune2.id], idConseiller: conseiller.id, commentaire: rendezVousAvecInvitation.commentaire, @@ -235,7 +242,7 @@ describe('CreateRendezVousCommandHandler', () => { .returns(success(rendezVousAvecInvitation)) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(result).to.deep.equal(success(rendezVousAvecInvitation.id)) @@ -268,7 +275,7 @@ describe('CreateRendezVousCommandHandler', () => { pushNotificationToken: undefined } }) - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeuneSansPushToken.id], idConseiller: conseiller.id, commentaire: rendezVousAvecInvitation.commentaire, @@ -289,7 +296,7 @@ describe('CreateRendezVousCommandHandler', () => { .returns(success(rendezVousAvecInvitation)) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(result).to.deep.equal(success(rendezVousAvecInvitation.id)) expect(rendezVousRepository.save).to.have.been.calledWith( @@ -314,7 +321,7 @@ describe('CreateRendezVousCommandHandler', () => { ...unConseiller(), email: undefined } - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id], idConseiller: conseillerSansEmail.id, commentaire: rendezVous.commentaire, @@ -334,7 +341,7 @@ describe('CreateRendezVousCommandHandler', () => { .returns(success(rendezVous)) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(result).to.deep.equal(success(rendezVous.id)) @@ -351,7 +358,7 @@ describe('CreateRendezVousCommandHandler', () => { describe("quand le conseiller a choisi de ne pas recevoir d'invitation par email", () => { it('crée un rendez-vous sans envoyer un mail au conseiller', async () => { // Given - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id], idConseiller: conseiller.id, commentaire: rendezVous.commentaire, @@ -365,7 +372,7 @@ describe('CreateRendezVousCommandHandler', () => { .returns(success(rendezVous)) // When - const result = await createRendezVousCommandHandler.handle(command) + const result = await creerRendezVousCommandHandler.handle(command) // Then expect(result).to.deep.equal(success(rendezVous.id)) expect(rendezVousRepository.save).to.have.been.calledWith(rendezVous) @@ -384,7 +391,7 @@ describe('CreateRendezVousCommandHandler', () => { describe('authorize', () => { it('authorise un conseiller', async () => { // Given - const command: CreateRendezVousCommand = { + const command: CreerRendezVousCommand = { idsJeunes: [jeune1.id], idConseiller: conseiller.id, commentaire: rendezVous.commentaire, @@ -395,7 +402,7 @@ describe('CreateRendezVousCommandHandler', () => { const utilisateur = unUtilisateurConseiller() // When - await createRendezVousCommandHandler.authorize(command, utilisateur) + await creerRendezVousCommandHandler.authorize(command, utilisateur) // Then expect( @@ -419,7 +426,7 @@ describe('CreateRendezVousCommandHandler', () => { } // When - createRendezVousCommandHandler.monitor(utilisateur, command) + creerRendezVousCommandHandler.monitor(utilisateur, command) // Then expect(evenementService.creer).to.have.been.calledWithExactly( @@ -441,7 +448,7 @@ describe('CreateRendezVousCommandHandler', () => { } // When - await createRendezVousCommandHandler.monitor(utilisateur, command) + await creerRendezVousCommandHandler.monitor(utilisateur, command) // Then expect(evenementService.creer).to.have.been.calledWithExactly( diff --git a/test/application/commands/update-rendez-vous.command.handler.test.ts b/test/application/commands/rendez-vous/modifier-rendez-vous.command.handler.test.ts similarity index 82% rename from test/application/commands/update-rendez-vous.command.handler.test.ts rename to test/application/commands/rendez-vous/modifier-rendez-vous.command.handler.test.ts index 3461c7d87..6e0e73923 100644 --- a/test/application/commands/update-rendez-vous.command.handler.test.ts +++ b/test/application/commands/rendez-vous/modifier-rendez-vous.command.handler.test.ts @@ -2,28 +2,30 @@ import { StubbedType, stubInterface } from '@salesforce/ts-sinon' import { SinonSandbox } from 'sinon' import { RendezVousAuthorizer } from 'src/application/authorizers/rendezvous-authorizer' import { - UpdateRendezVousCommand, - UpdateRendezVousCommandHandler -} from 'src/application/commands/update-rendez-vous.command.handler' + ModifierRendezVousCommand, + ModifierRendezVousCommandHandler +} from 'src/application/commands/rendez-vous/modifier-rendez-vous.command.handler' import { Evenement, EvenementService } from 'src/domain/evenement' -import { NonTrouveError } from '../../../src/building-blocks/types/domain-error' -import { failure, success } from '../../../src/building-blocks/types/result' -import { Notification } from '../../../src/domain/notification/notification' -import { PlanificateurService } from '../../../src/domain/planificateur' -import { RendezVous } from '../../../src/domain/rendez-vous/rendez-vous' -import { unUtilisateurConseiller } from '../../fixtures/authentification.fixture' -import { unJeune } from '../../fixtures/jeune.fixture' -import { unRendezVous } from '../../fixtures/rendez-vous.fixture' -import { createSandbox, expect, StubbedClass, stubClass } from '../../utils' -import { Conseiller } from '../../../src/domain/conseiller/conseiller' -import { Mail } from '../../../src/domain/mail' -import { Jeune } from '../../../src/domain/jeune/jeune' -import { uneDate } from '../../fixtures/date.fixture' -import { Authentification } from '../../../src/domain/authentification' - -describe('UpdateRendezVousCommandHandler', () => { +import { NonTrouveError } from '../../../../src/building-blocks/types/domain-error' +import { failure, success } from '../../../../src/building-blocks/types/result' +import { Notification } from '../../../../src/domain/notification/notification' +import { PlanificateurService } from '../../../../src/domain/planificateur' +import { RendezVous } from '../../../../src/domain/rendez-vous/rendez-vous' +import { unUtilisateurConseiller } from '../../../fixtures/authentification.fixture' +import { unJeune } from '../../../fixtures/jeune.fixture' +import { unRendezVous } from '../../../fixtures/rendez-vous.fixture' +import { createSandbox, expect, StubbedClass, stubClass } from '../../../utils' +import { Conseiller } from '../../../../src/domain/conseiller/conseiller' +import { Mail } from '../../../../src/domain/mail' +import { Jeune } from '../../../../src/domain/jeune/jeune' +import { uneDate } from '../../../fixtures/date.fixture' +import { Authentification } from '../../../../src/domain/authentification' +import { JeuneMilo } from '../../../../src/domain/milo/jeune.milo' + +describe('ModifierRendezVousCommandHandler', () => { let rendezVousRepository: StubbedType let jeuneRepository: StubbedType + let jeuneMiloRepository: StubbedType let rendezVousFactory: StubbedClass let notificationService: StubbedClass let conseillerRepository: StubbedType @@ -33,7 +35,7 @@ describe('UpdateRendezVousCommandHandler', () => { let evenementService: StubbedClass let historiqueRendezVousFactory: StubbedClass let historiqueRendezVousRepository: StubbedType - let updateRendezVousCommandHandler: UpdateRendezVousCommandHandler + let modifierRendezVousCommandHandler: ModifierRendezVousCommandHandler const jeune = unJeune() const rendezVous = unRendezVous({ jeunes: [jeune] }) @@ -41,6 +43,7 @@ describe('UpdateRendezVousCommandHandler', () => { const sandbox: SinonSandbox = createSandbox() rendezVousRepository = stubInterface(sandbox) jeuneRepository = stubInterface(sandbox) + jeuneMiloRepository = stubInterface(sandbox) rendezVousFactory = stubClass(RendezVous.Factory) notificationService = stubClass(Notification.Service) conseillerRepository = stubInterface(sandbox) @@ -51,9 +54,10 @@ describe('UpdateRendezVousCommandHandler', () => { historiqueRendezVousFactory = stubClass(RendezVous.Historique.Factory) historiqueRendezVousRepository = stubInterface(sandbox) - updateRendezVousCommandHandler = new UpdateRendezVousCommandHandler( + modifierRendezVousCommandHandler = new ModifierRendezVousCommandHandler( rendezVousRepository, jeuneRepository, + jeuneMiloRepository, rendezVousFactory, notificationService, mailService, @@ -70,7 +74,7 @@ describe('UpdateRendezVousCommandHandler', () => { describe('erreurs', () => { it('échoue si rendez-vous inexistant', async () => { // Given - const command: UpdateRendezVousCommand = { + const command: ModifierRendezVousCommand = { idsJeunes: ['x'], idRendezVous: rendezVous.id, date: '2021-11-11T08:03:30.000Z', @@ -81,7 +85,7 @@ describe('UpdateRendezVousCommandHandler', () => { .withArgs(command.idRendezVous) .resolves(undefined) // When - const result = await updateRendezVousCommandHandler.handle(command) + const result = await modifierRendezVousCommandHandler.handle(command) // Then expect(rendezVousRepository.save).to.have.callCount(0) expect(notificationService.notifierLesJeunesDuRdv).to.have.callCount(0) @@ -92,7 +96,7 @@ describe('UpdateRendezVousCommandHandler', () => { it("échoue si un jeune de la liste n'est pas trouvé", async () => { // Given const idJeuneNonTrouve = 'x' - const command: UpdateRendezVousCommand = { + const command: ModifierRendezVousCommand = { idsJeunes: [idJeuneNonTrouve], idRendezVous: rendezVous.id, date: '2021-11-11T08:03:30.000Z', @@ -105,7 +109,7 @@ describe('UpdateRendezVousCommandHandler', () => { jeuneRepository.findAll.withArgs([idJeuneNonTrouve]).resolves([]) // When - const result = await updateRendezVousCommandHandler.handle(command) + const result = await modifierRendezVousCommandHandler.handle(command) // Then expect(rendezVousRepository.save).to.have.callCount(0) expect(notificationService.notifierLesJeunesDuRdv).to.have.callCount(0) @@ -113,7 +117,7 @@ describe('UpdateRendezVousCommandHandler', () => { }) }) describe('save : quand tous les jeunes de la liste sont trouvés', () => { - const command: UpdateRendezVousCommand = { + const command: ModifierRendezVousCommand = { idsJeunes: [jeune.id], idRendezVous: rendezVous.id, date: rendezVous.date.toISOString(), @@ -141,7 +145,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(success(rendezVousUpdated)) // When - const result = await updateRendezVousCommandHandler.handle(command) + const result = await modifierRendezVousCommandHandler.handle(command) // Then expect(result).to.deep.equal(success({ id: rendezVousUpdated.id })) @@ -152,7 +156,7 @@ describe('UpdateRendezVousCommandHandler', () => { }) describe('notifications', () => { - const command: UpdateRendezVousCommand = { + const command: ModifierRendezVousCommand = { idsJeunes: [jeune.id], idRendezVous: rendezVous.id, date: rendezVous.date.toISOString(), @@ -180,7 +184,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(success(rendezVousSansInvitation)) // When - await updateRendezVousCommandHandler.handle(command) + await modifierRendezVousCommandHandler.handle(command) // Then expect(mailService.envoyerMailRendezVous).not.to.have.been.called() @@ -209,7 +213,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(success(rendezVousUpdated)) // When - await updateRendezVousCommandHandler.handle(command) + await modifierRendezVousCommandHandler.handle(command) // Then expect( @@ -235,7 +239,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(success(rendezVousUpdated)) // When - await updateRendezVousCommandHandler.handle(command) + await modifierRendezVousCommandHandler.handle(command) // Then expect( @@ -267,7 +271,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(success(rendezVousUpdated)) // When - await updateRendezVousCommandHandler.handle(command) + await modifierRendezVousCommandHandler.handle(command) // Then expect( @@ -286,7 +290,7 @@ describe('UpdateRendezVousCommandHandler', () => { it('notifie les jeunes ajoutés de la création du rendez-vous pour leur ajout dans la liste des bénéficiaires', async () => { // Given const jeuneAjoute = unJeune({ id: 'jeuneAjoute' }) - const commandAvecUnJeuneEnPlus: UpdateRendezVousCommand = { + const commandAvecUnJeuneEnPlus: ModifierRendezVousCommand = { ...command, idsJeunes: [jeune.id, jeuneAjoute.id] } @@ -313,7 +317,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(success(rendezVousUpdated)) // When - await updateRendezVousCommandHandler.handle(commandAvecUnJeuneEnPlus) + await modifierRendezVousCommandHandler.handle(commandAvecUnJeuneEnPlus) // Then expect( @@ -326,7 +330,7 @@ describe('UpdateRendezVousCommandHandler', () => { it('notifie les jeunes supprimés de la suppression du rendez-vous pour leur retrait de la liste des bénéficiaires', async () => { // Given const jeuneSupprime = unJeune({ id: 'jeuneSupprime' }) - const commandAvecUnJeuneEnMoins: UpdateRendezVousCommand = { + const commandAvecUnJeuneEnMoins: ModifierRendezVousCommand = { ...command, idsJeunes: [jeune.id] } @@ -353,7 +357,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(success(rendezVousUpdated)) // When - await updateRendezVousCommandHandler.handle(commandAvecUnJeuneEnMoins) + await modifierRendezVousCommandHandler.handle(commandAvecUnJeuneEnMoins) // Then expect( notificationService.notifierLesJeunesDuRdv @@ -368,7 +372,7 @@ describe('UpdateRendezVousCommandHandler', () => { describe('authorize', () => { it('autorise un conseiller', async () => { // Given - const command: UpdateRendezVousCommand = { + const command: ModifierRendezVousCommand = { idsJeunes: ['x'], idRendezVous: rendezVous.id, date: '2021-11-11T08:03:30.000Z', @@ -379,7 +383,7 @@ describe('UpdateRendezVousCommandHandler', () => { const utilisateur = unUtilisateurConseiller() // When - await updateRendezVousCommandHandler.authorize(command, utilisateur) + await modifierRendezVousCommandHandler.authorize(command, utilisateur) // Then expect( @@ -390,7 +394,7 @@ describe('UpdateRendezVousCommandHandler', () => { describe('monitor', () => { let utilisateur: Authentification.Utilisateur - let updateCommand: UpdateRendezVousCommand + let updateCommand: ModifierRendezVousCommand let date: Date // Given @@ -408,7 +412,7 @@ describe('UpdateRendezVousCommandHandler', () => { it("créé l'événement idoine", async () => { // When - await updateRendezVousCommandHandler.monitor(utilisateur, updateCommand) + await modifierRendezVousCommandHandler.monitor(utilisateur, updateCommand) // Then expect(evenementService.creer).to.have.been.calledWithExactly( @@ -434,7 +438,7 @@ describe('UpdateRendezVousCommandHandler', () => { .returns(logModification) // When - await updateRendezVousCommandHandler.monitor(utilisateur, updateCommand) + await modifierRendezVousCommandHandler.monitor(utilisateur, updateCommand) // Then expect( diff --git a/test/application/commands/transferer-jeunes-conseiller.command.handler.test.ts b/test/application/commands/transferer-jeunes-conseiller.command.handler.test.ts index e77bab30a..3ab7da56a 100644 --- a/test/application/commands/transferer-jeunes-conseiller.command.handler.test.ts +++ b/test/application/commands/transferer-jeunes-conseiller.command.handler.test.ts @@ -447,7 +447,9 @@ describe('TransfererJeunesConseillerCommandHandler', () => { const conseillerSource = unConseiller({ structure: Structure.MILO }) - const conseillerCible = unConseiller({ structure: Structure.MILO }) + const conseillerCible = unConseiller({ + structure: Structure.MILO + }) const command: TransfererJeunesConseillerCommand = { idConseillerSource: conseillerSource.id, diff --git a/test/application/jobs/traiter-evenement-milo.job.handler.test.ts b/test/application/jobs/traiter-evenement-milo.job.handler.test.ts index 41a2cdda4..8b9d5fc27 100644 --- a/test/application/jobs/traiter-evenement-milo.job.handler.test.ts +++ b/test/application/jobs/traiter-evenement-milo.job.handler.test.ts @@ -260,7 +260,7 @@ describe('TraiterEvenementMiloJobHandler', () => { const rendezVous = unRendezVous({ date: maintenant.minus({ days: 1 }).toJSDate() }) - rendezVousMiloFactory.createRendezVousCEJ + rendezVousMiloFactory.creerRendezVousCEJ .withArgs(rendezVousMilo, jeune) .returns(rendezVous) @@ -292,7 +292,7 @@ describe('TraiterEvenementMiloJobHandler', () => { .withArgs(evenement) .resolves(rendezVousMilo) const rendezVous = unRendezVous() - rendezVousMiloFactory.createRendezVousCEJ + rendezVousMiloFactory.creerRendezVousCEJ .withArgs(rendezVousMilo, jeune) .returns(rendezVous) @@ -324,7 +324,7 @@ describe('TraiterEvenementMiloJobHandler', () => { .withArgs(evenement) .resolves(rendezVousMilo) const rendezVous = unRendezVous() - rendezVousMiloFactory.createRendezVousCEJ + rendezVousMiloFactory.creerRendezVousCEJ .withArgs(rendezVousMilo, jeune) .returns(rendezVous) @@ -395,7 +395,7 @@ describe('TraiterEvenementMiloJobHandler', () => { .withArgs(evenement) .resolves(rendezVousMilo) const rendezVous = unRendezVous() - rendezVousMiloFactory.createRendezVousCEJ + rendezVousMiloFactory.creerRendezVousCEJ .withArgs(rendezVousMilo, jeune) .returns(rendezVous) diff --git a/test/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.test.ts b/test/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.test.ts index ea558922c..3efb6513e 100644 --- a/test/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.test.ts +++ b/test/application/queries/milo/get-agenda-sessions-conseiller.milo.query.handler.db.test.ts @@ -117,7 +117,7 @@ describe('GetAgendaSessionsConseillerMiloQueryHandler', () => { } const conseiller = unConseillerMilo({ id: '1', - structure: { id: '1', timezone: 'America/Cayenne' } + structureMilo: { id: '1', timezone: 'America/Cayenne' } }) beforeEach(async () => { @@ -181,8 +181,8 @@ function givenSessionsDuConseiller( miloClient.getSessionsConseiller .withArgs( 'idpToken', - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: query.dateDebut, diff --git a/test/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.test.ts b/test/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.test.ts index 71389a717..17b3643bb 100644 --- a/test/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.test.ts +++ b/test/application/queries/milo/get-sessions-conseiller.milo.query.handler.db.test.ts @@ -101,19 +101,19 @@ describe('GetSessionsConseillerMiloQueryHandler', () => { dateFin: DateTime.fromISO('2023-04-13T00:00:00Z') } const conseiller = unConseillerMilo({ - structure: { id: '1', timezone: 'America/Cayenne' } + structureMilo: { id: '1', timezone: 'America/Cayenne' } }) beforeEach(async () => { await StructureMiloSqlModel.create({ - id: conseiller.structure.id, + id: conseiller.structureMilo.id, nomOfficiel: 'Structure Milo', - timezone: conseiller.structure.timezone + timezone: conseiller.structureMilo.timezone }) await SessionMiloSqlModel.create({ id: unDetailSessionConseillerDto.session.id, estVisible: true, - idStructureMilo: conseiller.structure.id, + idStructureMilo: conseiller.structureMilo.id, dateModification: DateTime.now().toJSDate() }) conseillerRepository.get diff --git a/test/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.test.ts b/test/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.test.ts index ebd049355..cf85aec9a 100644 --- a/test/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.test.ts +++ b/test/application/queries/milo/v2/get-sessions-conseiller.milo.v2.query.handler.db.test.ts @@ -106,19 +106,19 @@ describe('GetSessionsConseillerMilov2QueryHandler', () => { filtrerAClore: undefined } const conseiller = unConseillerMilo({ - structure: { id: '1', timezone: 'America/Cayenne' } + structureMilo: { id: '1', timezone: 'America/Cayenne' } }) beforeEach(async () => { await StructureMiloSqlModel.create({ - id: conseiller.structure.id, + id: conseiller.structureMilo.id, nomOfficiel: 'Structure Milo', - timezone: conseiller.structure.timezone + timezone: conseiller.structureMilo.timezone }) await SessionMiloSqlModel.create({ id: unDetailSessionConseillerDto.session.id, estVisible: true, - idStructureMilo: conseiller.structure.id, + idStructureMilo: conseiller.structureMilo.id, dateModification: DateTime.now().toJSDate() }) conseillerRepository.get @@ -156,19 +156,19 @@ describe('GetSessionsConseillerMilov2QueryHandler', () => { filtrerAClore: undefined } const conseiller = unConseillerMilo({ - structure: { id: '1', timezone: 'America/Cayenne' } + structureMilo: { id: '1', timezone: 'America/Cayenne' } }) beforeEach(async () => { await StructureMiloSqlModel.create({ - id: conseiller.structure.id, + id: conseiller.structureMilo.id, nomOfficiel: 'Structure Milo', - timezone: conseiller.structure.timezone + timezone: conseiller.structureMilo.timezone }) await SessionMiloSqlModel.create({ id: unDetailSessionConseillerDto.session.id, estVisible: true, - idStructureMilo: conseiller.structure.id, + idStructureMilo: conseiller.structureMilo.id, dateModification: DateTime.now().toJSDate() }) conseillerRepository.get diff --git a/test/application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db.test.ts b/test/application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db.test.ts index d145a240d..8d047310c 100644 --- a/test/application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db.test.ts +++ b/test/application/queries/query-getters/milo/get-sessions-conseiller.milo.query.getter.db.test.ts @@ -75,7 +75,7 @@ describe('GetSessionsConseillerMiloQueryHandler', () => { } const idpToken = 'idpToken' const conseiller = unConseillerMilo({ - structure: { + structureMilo: { id: query.idStructureMilo, timezone: query.timezoneStructure } @@ -83,14 +83,14 @@ describe('GetSessionsConseillerMiloQueryHandler', () => { beforeEach(async () => { await StructureMiloSqlModel.create({ - id: conseiller.structure.id, + id: conseiller.structureMilo.id, nomOfficiel: 'Structure Milo', - timezone: conseiller.structure.timezone + timezone: conseiller.structureMilo.timezone }) await SessionMiloSqlModel.create({ id: unDetailSessionConseillerDto.session.id, estVisible: true, - idStructureMilo: conseiller.structure.id, + idStructureMilo: conseiller.structureMilo.id, dateModification: DateTime.now().toJSDate() }) keycloakClient.exchangeTokenConseillerMilo @@ -103,8 +103,8 @@ describe('GetSessionsConseillerMiloQueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: query.options.periode.debut, @@ -170,8 +170,8 @@ describe('GetSessionsConseillerMiloQueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: DateTime.fromISO(DATE_DEBUT_SESSIONS_A_CLORE), @@ -201,8 +201,8 @@ describe('GetSessionsConseillerMiloQueryHandler', () => { ) expect(miloClient.getSessionsConseiller).to.have.been.calledWith( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: DateTime.fromISO(DATE_DEBUT_SESSIONS_A_CLORE), @@ -309,8 +309,8 @@ describe('GetSessionsConseillerMiloQueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: query.options.periode.debut, diff --git a/test/application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db.test.ts b/test/application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db.test.ts index acec20fdb..28c882935 100644 --- a/test/application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db.test.ts +++ b/test/application/queries/query-getters/milo/v2/get-sessions-conseiller.milo.v2.query.getter.db.test.ts @@ -73,7 +73,7 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { const idpToken = 'idpToken' const conseiller = unConseillerMilo({ - structure: { + structureMilo: { id: query.idStructureMilo, timezone: query.timezoneStructure } @@ -81,14 +81,14 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { beforeEach(async () => { await StructureMiloSqlModel.create({ - id: conseiller.structure.id, + id: conseiller.structureMilo.id, nomOfficiel: 'Structure Milo', - timezone: conseiller.structure.timezone + timezone: conseiller.structureMilo.timezone }) await SessionMiloSqlModel.create({ id: unDetailSessionConseillerDto.session.id, estVisible: true, - idStructureMilo: conseiller.structure.id, + idStructureMilo: conseiller.structureMilo.id, dateModification: DateTime.now().toJSDate() }) keycloakClient.exchangeTokenConseillerMilo @@ -101,8 +101,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut @@ -179,8 +179,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut @@ -192,8 +192,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut @@ -206,8 +206,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut @@ -274,8 +274,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut @@ -287,8 +287,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut @@ -347,8 +347,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut @@ -455,8 +455,8 @@ describe('GetSessionsConseillerMiloV2QueryHandler', () => { miloClient.getSessionsConseiller .withArgs( idpToken, - conseiller.structure.id, - conseiller.structure.timezone, + conseiller.structureMilo.id, + conseiller.structureMilo.timezone, { periode: { dateDebut: dateDebut diff --git a/test/domain/milo/rendez-vous.milo.test.ts b/test/domain/milo/rendez-vous.milo.test.ts index a12f684aa..ba3433d31 100644 --- a/test/domain/milo/rendez-vous.milo.test.ts +++ b/test/domain/milo/rendez-vous.milo.test.ts @@ -56,7 +56,7 @@ describe('MiloRendezVous', () => { }) // When - rendezVousObtenu = rendezVousFactory.createRendezVousCEJ( + rendezVousObtenu = rendezVousFactory.creerRendezVousCEJ( rdvMilo, jeune ) @@ -75,7 +75,7 @@ describe('MiloRendezVous', () => { }) // When - rendezVousObtenu = rendezVousFactory.createRendezVousCEJ( + rendezVousObtenu = rendezVousFactory.creerRendezVousCEJ( rdvMilo, jeune ) @@ -95,7 +95,7 @@ describe('MiloRendezVous', () => { dateHeureFin: undefined }) // When - rendezVousObtenu = rendezVousFactory.createRendezVousCEJ( + rendezVousObtenu = rendezVousFactory.creerRendezVousCEJ( rdvMilo, jeune ) @@ -113,7 +113,7 @@ describe('MiloRendezVous', () => { }) // When - rendezVousObtenu = rendezVousFactory.createRendezVousCEJ( + rendezVousObtenu = rendezVousFactory.creerRendezVousCEJ( rdvMilo, jeune ) @@ -157,7 +157,7 @@ describe('MiloRendezVous', () => { }) // When - rendezVousObtenu = rendezVousFactory.createRendezVousCEJ( + rendezVousObtenu = rendezVousFactory.creerRendezVousCEJ( rdvMilo, jeune ) diff --git a/test/domain/rendez-vous/rendez-vous.test.ts b/test/domain/rendez-vous/rendez-vous.test.ts index 0446086b7..e682fd495 100644 --- a/test/domain/rendez-vous/rendez-vous.test.ts +++ b/test/domain/rendez-vous/rendez-vous.test.ts @@ -1,3 +1,4 @@ +import { DateTime } from 'luxon' import { CodeTypeRendezVous, InfosRendezVousACreer, @@ -6,20 +7,29 @@ import { import { IdService } from 'src/utils/id-service' import { unConseiller } from 'test/fixtures/conseiller.fixture' import { uneDatetime } from 'test/fixtures/date.fixture' -import { unConseillerDuJeune, unJeune } from 'test/fixtures/jeune.fixture' -import { expect, StubbedClass, stubClass } from '../../utils' -import { failure, isSuccess } from '../../../src/building-blocks/types/result' import { - ConseillerSansAgenceError, + unConseillerDuJeune, + unJeune, + unJeuneMilo +} from 'test/fixtures/jeune.fixture' +import { + ConseillerMiloSansStructure, DateNonAutoriseeError, - JeuneNonLieALAgenceError, + JeuneNonLieALaStructureMiloError, MauvaiseCommandeError } from '../../../src/building-blocks/types/domain-error' +import { + failure, + isSuccess, + success +} from '../../../src/building-blocks/types/result' +import { unConseillerMilo } from '../../fixtures/conseiller-milo.fixture' import { unJeuneDuRendezVous, + unJeuneMiloDuRendezVous, unRendezVous } from '../../fixtures/rendez-vous.fixture' -import { DateTime } from 'luxon' +import { StubbedClass, expect, stubClass } from '../../utils' describe('Rendez-vous', () => { const id = '26279b34-318a-45e4-a8ad-514a1090462c' @@ -82,35 +92,37 @@ describe('Rendez-vous', () => { const result = factory.creer(infosRdv, [unJeune()], conseiller) // Then - expect(isSuccess(result) && result.data).to.deep.equal({ - adresse: undefined, - commentaire: '', - createur: { - id: '1', - nom: 'Tavernier', - prenom: 'Nils' - }, - date: dateAujourdhui, - duree: 10, - id: '26279b34-318a-45e4-a8ad-514a1090462c', - source: RendezVous.Source.PASS_EMPLOI, - idAgence: undefined, - invitation: undefined, - jeunes: [unJeune()], - modalite: undefined, - organisme: undefined, - precision: undefined, - presenceConseiller: true, - sousTitre: 'avec Nils', - titre: 'Rendez-vous conseiller', - type: 'ENTRETIEN_INDIVIDUEL_CONSEILLER', - nombreMaxParticipants: undefined - }) + expect(result).to.deep.equal( + success({ + adresse: undefined, + commentaire: '', + createur: { + id: '1', + nom: 'Tavernier', + prenom: 'Nils' + }, + date: dateAujourdhui, + duree: 10, + id: '26279b34-318a-45e4-a8ad-514a1090462c', + source: RendezVous.Source.PASS_EMPLOI, + idStructureMilo: undefined, + invitation: undefined, + jeunes: [unJeune()], + modalite: undefined, + organisme: undefined, + precision: undefined, + presenceConseiller: true, + sousTitre: 'avec Nils', + titre: 'Rendez-vous conseiller', + type: 'ENTRETIEN_INDIVIDUEL_CONSEILLER', + nombreMaxParticipants: undefined + }) + ) }) }) }) describe('quand le type est animation collective', () => { - describe('quand le conseiller a une agence ', () => { + describe('quand le conseiller a une structure Milo ', () => { describe('quand le nombre de participants est supérieur à la limite', () => { it('rejette avec une MauvaiseCommandeError', async () => { // Given @@ -123,9 +135,7 @@ describe('Rendez-vous', () => { type: CodeTypeRendezVous.INFORMATION_COLLECTIVE, nombreMaxParticipants: 1 } - const conseiller = unConseiller({ - agence: { id: 'test' } - }) + const conseiller = unConseillerMilo() // When const result = factory.creer( @@ -141,7 +151,7 @@ describe('Rendez-vous', () => { }) }) describe('quand tout est bon', () => { - it('renvoie un rdv avec agence', async () => { + it('renvoie un rdv avec structure Milo', async () => { // Given const dateAujourdhui = new Date() const infosRdv: InfosRendezVousACreer = { @@ -152,14 +162,13 @@ describe('Rendez-vous', () => { duree: 10, type: CodeTypeRendezVous.INFORMATION_COLLECTIVE } - const conseiller = unConseiller({ agence: { id: 'test' } }) - const unJeuneDuConseiller = unJeune({ + const conseiller = unConseillerMilo() + const unJeuneDuConseiller = unJeuneMilo({ conseiller: { id: conseiller.id, firstName: conseiller.firstName, lastName: conseiller.lastName, - email: conseiller.email, - idAgence: 'test' + email: conseiller.email } }) @@ -171,11 +180,13 @@ describe('Rendez-vous', () => { ) // Then - expect(isSuccess(result) && result.data.idAgence).to.equal('test') + expect(isSuccess(result) && result.data.idStructureMilo).to.equal( + conseiller.structureMilo.id + ) }) }) }) - describe("quand le conseiller n'a pas d'agence", () => { + describe("quand le conseiller n'a pas de structure Milo", () => { it('renvoie une failure', async () => { // Given const dateAujourdhui = new Date() @@ -187,15 +198,15 @@ describe('Rendez-vous', () => { duree: 10, type: CodeTypeRendezVous.INFORMATION_COLLECTIVE } - const conseiller = unConseiller({ agence: undefined }) - const unJeuneDuConseiller = unJeune({ + const conseiller = unConseiller() + const unJeuneDuConseiller = unJeuneMilo({ conseiller: { id: conseiller.id, firstName: conseiller.firstName, lastName: conseiller.lastName, - email: conseiller.email, - idAgence: undefined - } + email: conseiller.email + }, + idStructureMilo: '2' }) // When @@ -207,12 +218,12 @@ describe('Rendez-vous', () => { // Then expect(result).to.deep.equal( - failure(new ConseillerSansAgenceError(conseiller.id)) + failure(new ConseillerMiloSansStructure(conseiller.id)) ) }) }) }) - describe("quand un des jeunes n'est pas lié a la bonne agence", () => { + describe("quand un des jeunes n'est pas lié a la bonne structure Milo", () => { it('rejette', () => { // Given const infosRdv: InfosRendezVousACreer = { @@ -223,16 +234,13 @@ describe('Rendez-vous', () => { duree: 10, type: CodeTypeRendezVous.INFORMATION_COLLECTIVE } - const conseiller = unConseiller({ - agence: { id: 'test' } - }) + const conseiller = unConseillerMilo() const unJeuneDunAutreConseiller = unJeune({ conseiller: { id: 'un-autre-conseiller', firstName: 'un', lastName: 'autre', - email: 'conseiller', - idAgence: 'plop' + email: 'conseiller' } }) @@ -246,7 +254,10 @@ describe('Rendez-vous', () => { // Then expect(result).to.deep.equal( failure( - new JeuneNonLieALAgenceError(unJeuneDunAutreConseiller.id, 'test') + new JeuneNonLieALaStructureMiloError( + unJeuneDunAutreConseiller.id, + conseiller.structureMilo.id + ) ) ) }) @@ -340,12 +351,12 @@ describe('Rendez-vous', () => { ) }) }) - describe("quand un des jeunes n'appartient pas à l'agence", () => { + describe("quand un des jeunes n'appartient pas à la structure Milo", () => { it('rejette', () => { // Given const unAtelier = unRendezVous({ type: CodeTypeRendezVous.ATELIER, - idAgence: '1' + idStructureMilo: '1' }) // When @@ -353,15 +364,16 @@ describe('Rendez-vous', () => { ...unAtelier, date: '2020-04-06T12:00:00.000Z', jeunes: [ - unJeuneDuRendezVous({ - conseiller: unConseillerDuJeune({ idAgence: '2' }) + unJeuneMiloDuRendezVous({ + conseiller: unConseillerDuJeune(), + idStructureMilo: '2' }) ] }) // Then expect(!result._isSuccess && result.error).to.be.an.instanceOf( - JeuneNonLieALAgenceError + JeuneNonLieALaStructureMiloError ) }) }) @@ -370,7 +382,8 @@ describe('Rendez-vous', () => { // Given const dateAujourdhui = new Date() const rendezVous = unRendezVous({ - type: CodeTypeRendezVous.ATELIER + type: CodeTypeRendezVous.ATELIER, + idStructureMilo: '1' }) // When @@ -378,7 +391,7 @@ describe('Rendez-vous', () => { ...rendezVous, titre: 'Nouveau titre', date: dateAujourdhui.toISOString(), - jeunes: [unJeuneDuRendezVous()], + jeunes: [unJeuneMiloDuRendezVous()], modalite: 'nouveau', adresse: 'nouvelle', organisme: 'nouvel', @@ -390,7 +403,7 @@ describe('Rendez-vous', () => { expect(isSuccess(result) && result.data).to.deep.equal({ ...rendezVous, date: dateAujourdhui, - jeunes: [unJeuneDuRendezVous()], + jeunes: [unJeuneMiloDuRendezVous()], titre: 'Nouveau titre', modalite: 'nouveau', adresse: 'nouvelle', diff --git a/test/fixtures/conseiller-milo.fixture.ts b/test/fixtures/conseiller-milo.fixture.ts index 4b012f2f2..ac09c9235 100644 --- a/test/fixtures/conseiller-milo.fixture.ts +++ b/test/fixtures/conseiller-milo.fixture.ts @@ -1,11 +1,13 @@ import { ConseillerMilo } from '../../src/domain/milo/conseiller.milo.db' +import { unConseiller } from './conseiller.fixture' export const unConseillerMilo = ( args: Partial = {} ): ConseillerMilo => { const defaults: ConseillerMilo = { + ...unConseiller(), id: 'test', - structure: { id: '1', timezone: 'America/Cayenne' } + structureMilo: { id: '1', timezone: 'America/Cayenne' } } return { ...defaults, ...args } } diff --git a/test/fixtures/jeune.fixture.ts b/test/fixtures/jeune.fixture.ts index 260e96e2e..3b8063aa4 100644 --- a/test/fixtures/jeune.fixture.ts +++ b/test/fixtures/jeune.fixture.ts @@ -1,5 +1,6 @@ import { Core } from '../../src/domain/core' import { Jeune } from '../../src/domain/jeune/jeune' +import { JeuneMilo } from '../../src/domain/milo/jeune.milo' import { unConseiller } from './conseiller.fixture' import { uneDate, uneDatetime } from './date.fixture' @@ -26,6 +27,19 @@ export const unJeune = ( return { ...defaults, ...args } } +export const unJeuneMilo = ( + args: Partial = {} +): Required> => { + const defaults: Required< + Omit + > = { + ...unJeune(), + idStructureMilo: '1' + } + + return { ...defaults, ...args } +} + export const unJeuneSansPushNotificationToken = ( conseiller = unConseiller() ): Omit => ({ diff --git a/test/fixtures/rendez-vous.fixture.ts b/test/fixtures/rendez-vous.fixture.ts index 8f4c16e62..269228259 100644 --- a/test/fixtures/rendez-vous.fixture.ts +++ b/test/fixtures/rendez-vous.fixture.ts @@ -5,6 +5,7 @@ import { import { CodeTypeRendezVous, JeuneDuRendezVous, + JeuneMiloDuRendezVous, mapCodeLabelTypeRendezVous, RendezVous } from '../../src/domain/rendez-vous/rendez-vous' @@ -88,6 +89,17 @@ export const unJeuneDuRendezVous = ( return { ...defaults, ...args } } +export const unJeuneMiloDuRendezVous = ( + args: Partial = {} +): JeuneMiloDuRendezVous => { + const defaults: JeuneMiloDuRendezVous = { + ...unJeuneDuRendezVous(), + idStructureMilo: '1' + } + + return { ...defaults, ...args } +} + export const unRendezVousConseillerQueryModel = ( args: Partial = {} ): RendezVousConseillerQueryModel => { diff --git a/test/infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db.test.ts b/test/infrastructure/repositories/liste-de-diffusion-sql.repository.db.test.ts similarity index 81% rename from test/infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db.test.ts rename to test/infrastructure/repositories/liste-de-diffusion-sql.repository.db.test.ts index 272648367..9c0433557 100644 --- a/test/infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db.test.ts +++ b/test/infrastructure/repositories/liste-de-diffusion-sql.repository.db.test.ts @@ -1,20 +1,20 @@ -import { Conseiller } from '../../../../src/domain/conseiller/conseiller' -import { ListeDeDiffusionJeuneAssociationSqlModel } from '../../../../src/infrastructure/sequelize/models/liste-de-diffusion-jeune-association.sql-model' -import { ListeDeDiffusionSqlRepository } from '../../../../src/infrastructure/repositories/conseiller/liste-de-diffusion-sql.repository.db' -import { unConseillerDuJeune, unJeune } from '../../../fixtures/jeune.fixture' -import { unConseillerDto } from '../../../fixtures/sql-models/conseiller.sql-model' -import { ConseillerSqlModel } from '../../../../src/infrastructure/sequelize/models/conseiller.sql-model' -import { JeuneSqlModel } from '../../../../src/infrastructure/sequelize/models/jeune.sql-model' -import { unJeuneDto } from '../../../fixtures/sql-models/jeune.sql-model' -import { Jeune } from '../../../../src/domain/jeune/jeune' -import { uneListeDeDiffusion } from '../../../fixtures/liste-de-diffusion.fixture' -import { expect } from '../../../utils' -import { ListeDeDiffusion } from '../../../../src/domain/conseiller/liste-de-diffusion' -import { uneAutreDatetime, uneDatetime } from '../../../fixtures/date.fixture' +import { Conseiller } from '../../../src/domain/conseiller/conseiller' +import { ListeDeDiffusionJeuneAssociationSqlModel } from '../../../src/infrastructure/sequelize/models/liste-de-diffusion-jeune-association.sql-model' +import { ListeDeDiffusionSqlRepository } from '../../../src/infrastructure/repositories/liste-de-diffusion-sql.repository.db' +import { unConseillerDuJeune, unJeune } from '../../fixtures/jeune.fixture' +import { unConseillerDto } from '../../fixtures/sql-models/conseiller.sql-model' +import { ConseillerSqlModel } from '../../../src/infrastructure/sequelize/models/conseiller.sql-model' +import { JeuneSqlModel } from '../../../src/infrastructure/sequelize/models/jeune.sql-model' +import { unJeuneDto } from '../../fixtures/sql-models/jeune.sql-model' +import { Jeune } from '../../../src/domain/jeune/jeune' +import { uneListeDeDiffusion } from '../../fixtures/liste-de-diffusion.fixture' +import { expect } from '../../utils' +import { ListeDeDiffusion } from '../../../src/domain/conseiller/liste-de-diffusion' +import { uneAutreDatetime, uneDatetime } from '../../fixtures/date.fixture' import { DatabaseForTesting, getDatabase -} from '../../../utils/database-for-testing' +} from '../../utils/database-for-testing' describe(' ListeDeDiffusionSqlRepository', () => { let database: DatabaseForTesting diff --git a/test/infrastructure/repositories/milo/conseiller.milo.repository.db.test.ts b/test/infrastructure/repositories/milo/conseiller.milo.repository.db.test.ts index f8ed854b0..f75dc6d1c 100644 --- a/test/infrastructure/repositories/milo/conseiller.milo.repository.db.test.ts +++ b/test/infrastructure/repositories/milo/conseiller.milo.repository.db.test.ts @@ -3,6 +3,7 @@ import { NonTrouveError } from '../../../../src/building-blocks/types/domain-error' import { failure, success } from '../../../../src/building-blocks/types/result' +import { Core } from '../../../../src/domain/core' import { ConseillerMiloSqlRepository } from '../../../../src/infrastructure/repositories/milo/conseiller.milo.repository.db' import { ConseillerSqlModel } from '../../../../src/infrastructure/sequelize/models/conseiller.sql-model' import { StructureMiloSqlModel } from '../../../../src/infrastructure/sequelize/models/structure-milo.sql-model' @@ -61,7 +62,13 @@ describe('ConseillerMiloSqlRepository', () => { expect(conseiller).to.deep.equal( success({ id: idConseiller, - structure: { id: idStructureMilo, timezone: 'Europe/Paris' } + lastName: 'Tavernier', + firstName: 'Nils', + structure: Core.Structure.PASS_EMPLOI, + email: 'nils.tavernier@passemploi.com', + agence: undefined, + notificationsSonores: false, + structureMilo: { id: idStructureMilo, timezone: 'Europe/Paris' } }) ) }) diff --git a/test/infrastructure/routes/conseillers.controller.test.ts b/test/infrastructure/routes/conseillers.controller.test.ts index cee50a2e2..67ab6f9a0 100644 --- a/test/infrastructure/routes/conseillers.controller.test.ts +++ b/test/infrastructure/routes/conseillers.controller.test.ts @@ -1,12 +1,12 @@ import { HttpStatus, INestApplication } from '@nestjs/common' -import { CreateRendezVousCommandHandler } from 'src/application/commands/create-rendez-vous.command.handler' +import { CreerRendezVousCommandHandler } from 'src/application/commands/rendez-vous/creer-rendez-vous.command.handler' import { RecupererJeunesDuConseillerCommandHandler } from 'src/application/commands/recuperer-jeunes-du-conseiller.command.handler' import { GetAllRendezVousConseillerQueryHandler } from 'src/application/queries/rendez-vous/get-rendez-vous-conseiller.query.handler.db' import { Action } from 'src/domain/action/action' import { Qualification } from 'src/domain/action/qualification' import { CodeTypeRendezVous } from 'src/domain/rendez-vous/rendez-vous' import { CreateActionPayload } from 'src/infrastructure/routes/validation/actions.inputs' -import { CreateRendezVousPayload } from 'src/infrastructure/routes/validation/rendez-vous.inputs' +import { CreerRendezVousPayload } from 'src/infrastructure/routes/validation/rendez-vous.inputs' import * as request from 'supertest' import { uneDatetime, uneDatetimeAvecOffset } from 'test/fixtures/date.fixture' import { unRendezVousConseillerFutursEtPassesQueryModel } from 'test/fixtures/rendez-vous.fixture' @@ -58,7 +58,7 @@ describe('ConseillersController', () => { let getJeunesByConseillerQueryHandler: StubbedClass let sendNotificationsNouveauxMessages: StubbedClass let getAllRendezVousConseillerQueryHandler: StubbedClass - let createRendezVousCommandHandler: StubbedClass + let creerRendezVousCommandHandler: StubbedClass let deleteConseillerCommandHandler: StubbedClass let modifierConseillerCommandHandler: StubbedClass let recupererJeunesDuConseillerCommandHandler: StubbedClass @@ -84,7 +84,7 @@ describe('ConseillersController', () => { getAllRendezVousConseillerQueryHandler = app.get( GetAllRendezVousConseillerQueryHandler ) - createRendezVousCommandHandler = app.get(CreateRendezVousCommandHandler) + creerRendezVousCommandHandler = app.get(CreerRendezVousCommandHandler) deleteConseillerCommandHandler = app.get(DeleteConseillerCommandHandler) modifierConseillerCommandHandler = app.get(ModifierConseillerCommandHandler) recupererJeunesDuConseillerCommandHandler = app.get( @@ -512,12 +512,12 @@ describe('ConseillersController', () => { describe('quand le payload est bon', () => { describe('quand la commande est en succes', () => { beforeEach(() => { - createRendezVousCommandHandler.execute.resolves(success('id-rdv')) + creerRendezVousCommandHandler.execute.resolves(success('id-rdv')) }) it('crée le rendezvous avec jeunesIds', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), @@ -534,9 +534,7 @@ describe('ConseillersController', () => { .expect(HttpStatus.CREATED) .expect({ id: 'id-rdv' }) - expect( - createRendezVousCommandHandler.execute - ).to.have.been.calledWith( + expect(creerRendezVousCommandHandler.execute).to.have.been.calledWith( { idsJeunes: payload.jeunesIds, commentaire: payload.comment, @@ -559,7 +557,7 @@ describe('ConseillersController', () => { it("crée le rendezvous sans jeunesIds quand c'est une animation collective", async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: [], comment: '', titre: 'aa', @@ -581,7 +579,7 @@ describe('ConseillersController', () => { it("crée le rendezvous avec jeunesIds quand c'est une animation collective", async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', titre: 'aa', @@ -603,14 +601,14 @@ describe('ConseillersController', () => { it('retourne une 200 quand presenceConseiller est undefined pour le type ENTRETIEN_CONSEILLER', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), duration: 30, type: CodeTypeRendezVous.ENTRETIEN_INDIVIDUEL_CONSEILLER } - createRendezVousCommandHandler.execute.resolves(success('id-rdv')) + creerRendezVousCommandHandler.execute.resolves(success('id-rdv')) // When - Then await request(app.getHttpServer()) @@ -622,13 +620,13 @@ describe('ConseillersController', () => { it('retourne une 200 quand presenceConseiller est undefined pour le type par defaut', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), duration: 30 } - createRendezVousCommandHandler.execute.resolves(success('id-rdv')) + creerRendezVousCommandHandler.execute.resolves(success('id-rdv')) // When - Then await request(app.getHttpServer()) @@ -640,7 +638,7 @@ describe('ConseillersController', () => { it('retourne une 200 quand presenceConseiller est true pour le type ENTRETIEN_CONSEILLER', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), @@ -648,7 +646,7 @@ describe('ConseillersController', () => { type: CodeTypeRendezVous.ENTRETIEN_INDIVIDUEL_CONSEILLER, presenceConseiller: true } - createRendezVousCommandHandler.execute.resolves(success('id-rdv')) + creerRendezVousCommandHandler.execute.resolves(success('id-rdv')) // When - Then await request(app.getHttpServer()) @@ -660,14 +658,14 @@ describe('ConseillersController', () => { it('retourne une 200 quand presenceConseiller est true pour le type par defaut', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), duration: 30, presenceConseiller: true } - createRendezVousCommandHandler.execute.resolves(success('id-rdv')) + creerRendezVousCommandHandler.execute.resolves(success('id-rdv')) // When - Then await request(app.getHttpServer()) @@ -679,7 +677,7 @@ describe('ConseillersController', () => { it('retourne une 201 quand le champ precision est rempli', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), @@ -687,7 +685,7 @@ describe('ConseillersController', () => { type: CodeTypeRendezVous.AUTRE, precision: 'aa' } - createRendezVousCommandHandler.execute.resolves(success('id-rdv')) + creerRendezVousCommandHandler.execute.resolves(success('id-rdv')) // When - Then await request(app.getHttpServer()) @@ -702,7 +700,7 @@ describe('ConseillersController', () => { it('retourne une 403 quand une failure JeuneNonLieAuConseiller est renvoyée', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), @@ -710,7 +708,7 @@ describe('ConseillersController', () => { modality: 'rdv', invitation: true } - createRendezVousCommandHandler.execute.resolves( + creerRendezVousCommandHandler.execute.resolves( failure(new JeuneNonLieAuConseillerError('41', '1')) ) @@ -727,7 +725,7 @@ describe('ConseillersController', () => { it('retourne une 400 les jeunes sont vide pour une rdv autre que animation collective', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: [], comment: '', titre: 'aa', @@ -747,7 +745,7 @@ describe('ConseillersController', () => { it("retourne une 400 quand la date n'est pas une dateString", async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: '', @@ -764,7 +762,7 @@ describe('ConseillersController', () => { it("retourne une 400 quand le type n'est pas bon", async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), @@ -782,7 +780,7 @@ describe('ConseillersController', () => { it('retourne une 400 quand presenceConseiller est false pour le type ENTRETIEN_CONSEILLER', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), @@ -801,7 +799,7 @@ describe('ConseillersController', () => { it('retourne une 400 quand presenceConseiller est false pour le type par defaut', async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), @@ -819,7 +817,7 @@ describe('ConseillersController', () => { it("retourne une 400 quand le champ precision n'est pas rempli", async () => { // Given const idConseiller = '41' - const payload: CreateRendezVousPayload = { + const payload: CreerRendezVousPayload = { jeunesIds: ['1'], comment: '', date: uneDatetime().toJSDate().toISOString(), diff --git a/test/infrastructure/routes/rendez-vous.controller.test.ts b/test/infrastructure/routes/rendez-vous.controller.test.ts index 29a1477ae..dfb5d9a79 100644 --- a/test/infrastructure/routes/rendez-vous.controller.test.ts +++ b/test/infrastructure/routes/rendez-vous.controller.test.ts @@ -22,9 +22,9 @@ import { } from '../../../src/application/commands/delete-rendez-vous.command.handler.db' import { unRendezVous } from '../../fixtures/rendez-vous.fixture' import { - UpdateRendezVousCommand, - UpdateRendezVousCommandHandler -} from 'src/application/commands/update-rendez-vous.command.handler' + ModifierRendezVousCommand, + ModifierRendezVousCommandHandler +} from 'src/application/commands/rendez-vous/modifier-rendez-vous.command.handler' import { UpdateRendezVousPayload } from 'src/infrastructure/routes/validation/rendez-vous.inputs' import { GetDetailRendezVousQueryHandler } from '../../../src/application/queries/rendez-vous/get-detail-rendez-vous.query.handler.db' import { getApplicationWithStubbedDependencies } from '../../utils/module-for-testing' @@ -32,14 +32,14 @@ import { getApplicationWithStubbedDependencies } from '../../utils/module-for-te describe('RendezvousController', () => { let getDetailRendezVousQueryHandler: StubbedClass let deleteRendezVousCommandHandler: StubbedClass - let updateRendezVousCommandHandler: StubbedClass + let modifierRendezVousCommandHandler: StubbedClass let app: INestApplication before(async () => { app = await getApplicationWithStubbedDependencies() getDetailRendezVousQueryHandler = app.get(GetDetailRendezVousQueryHandler) deleteRendezVousCommandHandler = app.get(DeleteRendezVousCommandHandler) - updateRendezVousCommandHandler = app.get(UpdateRendezVousCommandHandler) + modifierRendezVousCommandHandler = app.get(ModifierRendezVousCommandHandler) }) describe('GET rendezvous/:idRendezVous', () => { @@ -160,7 +160,7 @@ describe('RendezvousController', () => { presenceConseiller: true, nombreMaxParticipants: undefined } - const expectedCommand: UpdateRendezVousCommand = { + const expectedCommand: ModifierRendezVousCommand = { idsJeunes: ['1'], idRendezVous: rendezvous.id, titre: undefined, @@ -175,7 +175,7 @@ describe('RendezvousController', () => { } it('met à jour le rendez-vous', async () => { // Given - updateRendezVousCommandHandler.execute.resolves( + modifierRendezVousCommandHandler.execute.resolves( success({ id: rendezvous.id }) ) // When - Then @@ -186,12 +186,12 @@ describe('RendezvousController', () => { .expect(HttpStatus.OK) expect( - updateRendezVousCommandHandler.execute + modifierRendezVousCommandHandler.execute ).to.have.be.calledWithExactly(expectedCommand, unUtilisateurDecode()) }) it("renvoie une 404 quand le rendez-vous n'existe pas", async () => { // Given - updateRendezVousCommandHandler.execute + modifierRendezVousCommandHandler.execute .withArgs(expectedCommand) .resolves( failure( @@ -207,7 +207,7 @@ describe('RendezvousController', () => { .expect(HttpStatus.NOT_FOUND) }) it('renvoie une 400 (BAD REQUEST) pour une mauvaise commande', async () => { - updateRendezVousCommandHandler.execute + modifierRendezVousCommandHandler.execute .withArgs(expectedCommand) .resolves(failure(new MauvaiseCommandeError('Rendez-vous')))