From daa60af849bec1ca03890313da87211e902a5c76 Mon Sep 17 00:00:00 2001 From: VioMrqs <27735540+VioMrqs@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:23:20 +0200 Subject: [PATCH 1/3] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Ajouter=20notifi=C3=A9?= =?UTF-8?q?ParD=C3=A9tails=20dans=20le=20usecase=20candidaturenotifier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attestation/attestation.saga.ts | 1 + .../candidature/candidature.projector.ts | 6 +++- ...ate-events-candidature-notifi\303\251e.ts" | 23 +++++++++++++ .../notifierP\303\251riode.action.ts" | 18 ++++++++++ .../candidature/src/candidature.entity.ts | 6 +++- .../consulter/consulterCandidature.query.ts | 10 +++++- .../notifier/notifierCandidature.behavior.ts | 19 +++++++++-- .../notifier/notifierCandidature.command.ts | 4 +++ .../notifier/notifierCandidature.usecase.ts | 6 ++++ .../notifierLaur\303\251at.usecase.ts" | 6 ++++ .../notifierP\303\251riode.command.ts" | 9 +++++ .../notifierP\303\251riode.usecase.ts" | 6 ++++ .../notifier\303\211limin\303\251.usecase.ts" | 6 ++++ .../stepDefinitions/laur\303\251at.when.ts" | 31 ----------------- .../\303\251limin\303\251.when.ts" | 33 ------------------- .../stepDefinitions/p\303\251riode.when.ts" | 4 +++ .../fixtures/validateur.fixture.ts | 17 +++++++--- 17 files changed, 132 insertions(+), 73 deletions(-) delete mode 100644 "packages/specifications/src/projet/laur\303\251at/stepDefinitions/laur\303\251at.when.ts" delete mode 100644 "packages/specifications/src/projet/\303\251limin\303\251/stepDefinitions/\303\251limin\303\251.when.ts" diff --git a/packages/applications/document-builder/src/candidature/attestation/attestation.saga.ts b/packages/applications/document-builder/src/candidature/attestation/attestation.saga.ts index c8ca3784b1..dde5a8a222 100644 --- a/packages/applications/document-builder/src/candidature/attestation/attestation.saga.ts +++ b/packages/applications/document-builder/src/candidature/attestation/attestation.saga.ts @@ -24,6 +24,7 @@ export const register = () => { notifiéePar, }, } = event; + switch (event.type) { case 'CandidatureNotifiée-V1': const candidature = await mediator.send({ diff --git a/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts b/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts index 738c30cffd..83fa074517 100644 --- a/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts +++ b/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts @@ -72,7 +72,11 @@ export const register = () => { notification: { estNotifiée: true, notifiéeLe: payload.notifiéeLe, - notifiéePar: payload.notifiéePar, + notifiéePar: { + email: payload.notifiéePar, + fonction: payload.notifiéeParDétails.fonction, + nomComplet: payload.notifiéeParDétails.nomComplet, + }, }, }, ); diff --git "a/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" "b/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" index 7696b5deb0..ac26faa9dd 100644 --- "a/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" +++ "b/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" @@ -5,11 +5,14 @@ import { Candidature } from '@potentiel-domain/candidature'; import { listProjection } from '@potentiel-infrastructure/pg-projections'; import { Lauréat } from '@potentiel-domain/laureat'; import { loadAggregate } from '@potentiel-infrastructure/pg-event-sourcing'; +import { ConsulterUtilisateurQuery } from '@potentiel-domain/utilisateur'; +import { Option } from '@potentiel-libraries/monads'; Candidature.registerCandidaturesUseCases({ loadAggregate }); (async () => { console.log('✨ Migration Candidature Notifiée'); + const lauréats = await listProjection('lauréat'); const éliminés = await listProjection<Éliminé.ÉliminéEntity>('éliminé'); const all = [...lauréats.items, ...éliminés.items]; @@ -17,6 +20,22 @@ Candidature.registerCandidaturesUseCases({ loadAggregate }); console.log(`ℹ️ ${all.length} éléments trouvés`); for (const { identifiantProjet, attestation, notifiéLe, notifiéPar } of all) { + console.log(`Get détails on notifiéPar for ${identifiantProjet}`); + const utilisateur = await mediator.send({ + type: 'Utilisateur.Query.ConsulterUtilisateur', + data: { + identifiantUtilisateur: notifiéPar, + }, + }); + + if (Option.isNone(utilisateur)) { + console.warn(`Utilisateur non trouvé`, { + identifiantProjet, + identifiantUtilisateur: notifiéPar, + }); + return; + } + console.log(`Publish NotifierCandidature pour ${identifiantProjet}`); await mediator.publish({ type: 'Candidature.UseCase.NotifierCandidature', @@ -25,6 +44,10 @@ Candidature.registerCandidaturesUseCases({ loadAggregate }); attestationValue: { format: attestation.format }, notifiéeLeValue: notifiéLe, notifiéeParValue: notifiéPar, + notifiéeParDétailsValue: { + fonction: utilisateur.fonction, + nomComplet: utilisateur.nomComplet, + }, }, }); } diff --git "a/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" "b/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" index b9963e5da8..5aec754cb2 100644 --- "a/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" +++ "b/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" @@ -2,12 +2,15 @@ import * as zod from 'zod'; import { mediator } from 'mediateur'; +import { notFound } from 'next/navigation'; import { DateTime } from '@potentiel-domain/common'; import { Candidature } from '@potentiel-domain/candidature'; import { Période } from '@potentiel-domain/periode'; import { IdentifiantPériode } from '@potentiel-domain/periode/dist/période'; import { Routes } from '@potentiel-applications/routes'; +import { ConsulterUtilisateurQuery } from '@potentiel-domain/utilisateur'; +import { Option } from '@potentiel-libraries/monads'; import { FormAction, formAction, FormState } from '@/utils/formAction'; import { withUtilisateur } from '@/utils/withUtilisateur'; @@ -30,12 +33,27 @@ const action: FormAction = async (_, { appelOffre, per }, }); + const utilisateurDetails = await mediator.send({ + type: 'Utilisateur.Query.ConsulterUtilisateur', + data: { + identifiantUtilisateur: utilisateur.identifiantUtilisateur.formatter(), + }, + }); + + if (Option.isNone(utilisateurDetails)) { + return notFound(); + } + await mediator.send({ type: 'Période.UseCase.NotifierPériode', data: { identifiantPériodeValue, notifiéeLeValue: DateTime.now().formatter(), notifiéeParValue: utilisateur.identifiantUtilisateur.formatter(), + notifiéeParDétailsValue: { + fonction: utilisateurDetails.fonction, + nomComplet: utilisateurDetails.nomComplet, + }, identifiantCandidatureValues: candidatures.items.map((candidatures) => candidatures.identifiantProjet.formatter(), ), diff --git a/packages/domain/candidature/src/candidature.entity.ts b/packages/domain/candidature/src/candidature.entity.ts index 916aa0bc31..efecf2bac4 100644 --- a/packages/domain/candidature/src/candidature.entity.ts +++ b/packages/domain/candidature/src/candidature.entity.ts @@ -41,7 +41,11 @@ export type CandidatureEntity = Entity< notification?: { estNotifiée: true; notifiéeLe: DateTime.RawType; - notifiéePar: Email.RawType; + notifiéePar: { + email: Email.RawType; + fonction: string; + nomComplet: string; + }; }; } >; diff --git a/packages/domain/candidature/src/consulter/consulterCandidature.query.ts b/packages/domain/candidature/src/consulter/consulterCandidature.query.ts index 8cb09c11bf..6523de5634 100644 --- a/packages/domain/candidature/src/consulter/consulterCandidature.query.ts +++ b/packages/domain/candidature/src/consulter/consulterCandidature.query.ts @@ -45,6 +45,10 @@ export type ConsulterCandidatureReadModel = { notification?: { notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; + notifiéeParDétails: { + fonction: string; + nomComplet: string; + }; }; }; @@ -129,6 +133,10 @@ export const mapToReadModel = ({ ), notification: notification && { notifiéeLe: DateTime.convertirEnValueType(notification.notifiéeLe), - notifiéePar: Email.convertirEnValueType(notification.notifiéePar), + notifiéePar: Email.convertirEnValueType(notification.notifiéePar.email), + notifiéeParDétails: { + fonction: notification.notifiéePar.fonction, + nomComplet: notification.notifiéePar.nomComplet, + }, }, }); diff --git a/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts b/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts index e0bb01d761..5baebad08c 100644 --- a/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts +++ b/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts @@ -7,6 +7,10 @@ export type NotifierOptions = { identifiantProjet: IdentifiantProjet.ValueType; notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; + notifiéeParDétails: { + fonction: string; + nomComplet: string; + }; attestation: { format: string; }; @@ -18,7 +22,10 @@ export type CandidatureNotifiéeEvent = DomainEvent< identifiantProjet: IdentifiantProjet.RawType; notifiéeLe: DateTime.RawType; notifiéePar: Email.RawType; - + notifiéeParDétails: { + fonction: string; + nomComplet: string; + }; attestation: { format: string; }; @@ -27,17 +34,25 @@ export type CandidatureNotifiéeEvent = DomainEvent< export async function notifier( this: CandidatureAggregate, - { identifiantProjet, notifiéeLe, notifiéePar, attestation: { format } }: NotifierOptions, + { + identifiantProjet, + notifiéeLe, + notifiéePar, + notifiéeParDétails, + attestation: { format }, + }: NotifierOptions, ) { if (this.estNotifiée) { throw new CandidatureDéjàNotifiéeError(identifiantProjet); } + const event: CandidatureNotifiéeEvent = { type: 'CandidatureNotifiée-V1', payload: { identifiantProjet: identifiantProjet.formatter(), notifiéeLe: notifiéeLe.formatter(), notifiéePar: notifiéePar.formatter(), + notifiéeParDétails, attestation: { format, }, diff --git a/packages/domain/candidature/src/notifier/notifierCandidature.command.ts b/packages/domain/candidature/src/notifier/notifierCandidature.command.ts index 5750056b9b..6917baf8d4 100644 --- a/packages/domain/candidature/src/notifier/notifierCandidature.command.ts +++ b/packages/domain/candidature/src/notifier/notifierCandidature.command.ts @@ -11,6 +11,10 @@ export type NotifierCandidatureCommand = Message< identifiantProjet: IdentifiantProjet.ValueType; notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; + notifiéeParDétails: { + fonction: string; + nomComplet: string; + }; attestation: { format: string }; } >; diff --git a/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts b/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts index 2d563e6276..b1776659da 100644 --- a/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts +++ b/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts @@ -10,6 +10,10 @@ export type NotifierCandidatureUseCase = Message< identifiantProjetValue: string; notifiéeLeValue: string; notifiéeParValue: string; + notifiéeParDétailsValue: { + fonction: string; + nomComplet: string; + }; attestationValue: { format: string; }; @@ -21,6 +25,7 @@ export const registerNotifierCandidatureUseCase = () => { identifiantProjetValue, notifiéeParValue, notifiéeLeValue, + notifiéeParDétailsValue, attestationValue: { format }, }) => { await mediator.send({ @@ -29,6 +34,7 @@ export const registerNotifierCandidatureUseCase = () => { identifiantProjet: IdentifiantProjet.convertirEnValueType(identifiantProjetValue), notifiéeLe: DateTime.convertirEnValueType(notifiéeLeValue), notifiéePar: Email.convertirEnValueType(notifiéeParValue), + notifiéeParDétails: notifiéeParDétailsValue, attestation: { format }, }, }); diff --git "a/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" "b/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" index bfd637caa9..a337f606b5 100644 --- "a/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" +++ "b/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" @@ -11,6 +11,10 @@ export type NotifierLauréatUseCase = Message< identifiantProjetValue: string; notifiéLeValue: string; notifiéParValue: string; + notifiéeParDétailsValue: { + fonction: string; + nomComplet: string; + }; attestationValue: { format: string; }; @@ -22,6 +26,7 @@ export const registerNotifierLauréatUseCase = () => { identifiantProjetValue, notifiéParValue, notifiéLeValue, + notifiéeParDétailsValue, attestationValue: { format }, }) => { await mediator.send({ @@ -30,6 +35,7 @@ export const registerNotifierLauréatUseCase = () => { identifiantProjetValue, notifiéeLeValue: notifiéLeValue, notifiéeParValue: notifiéParValue, + notifiéeParDétailsValue, attestationValue: { format: 'application/pdf', }, diff --git "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" index a070afff87..92b517f41a 100644 --- "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" +++ "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" @@ -16,6 +16,10 @@ export type NotifierPériodeCommand = Message< identifiantPériode: IdentifiantPériode.ValueType; notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; + notifiéeParDétails: { + fonction: string; + nomComplet: string; + }; identifiantCandidatures: ReadonlyArray; } >; @@ -28,6 +32,7 @@ export const registerNotifierPériodeCommand = (loadAggregate: LoadAggregate) => identifiantPériode, notifiéeLe, notifiéePar, + notifiéeParDétails, identifiantCandidatures, }) => { const identifiantLauréats: Array = []; @@ -38,12 +43,14 @@ export const registerNotifierPériodeCommand = (loadAggregate: LoadAggregate) => try { if (candidature.statut?.estClassé()) { + // TODO: devrait être appelé dans le usecase NotifierPériode await mediator.send({ type: 'Lauréat.UseCase.NotifierLauréat', data: { identifiantProjetValue: identifiantCandidature.formatter(), notifiéLeValue: notifiéeLe.formatter(), notifiéParValue: notifiéePar.formatter(), + notifiéeParDétailsValue: notifiéeParDétails, attestationValue: { format: 'application/pdf', }, @@ -54,12 +61,14 @@ export const registerNotifierPériodeCommand = (loadAggregate: LoadAggregate) => } if (candidature.statut?.estÉliminé()) { + // TODO: devrait être appelé dans le usecase NotifierPériode await mediator.send<Éliminé.NotifierÉliminéUseCase>({ type: 'Éliminé.UseCase.NotifierÉliminé', data: { identifiantProjetValue: identifiantCandidature.formatter(), notifiéLeValue: notifiéeLe.formatter(), notifiéParValue: notifiéePar.formatter(), + notifiéeParDétailsValue: notifiéeParDétails, attestationValue: { format: 'application/pdf', }, diff --git "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" index a3693e4b63..2709af8bf6 100644 --- "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" +++ "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" @@ -12,6 +12,10 @@ export type NotifierPériodeUseCase = Message< identifiantPériodeValue: IdentifiantPériode.RawType; notifiéeLeValue: DateTime.RawType; notifiéeParValue: Email.RawType; + notifiéeParDétailsValue: { + fonction: string; + nomComplet: string; + }; identifiantCandidatureValues: ReadonlyArray; } >; @@ -21,6 +25,7 @@ export const registerNotifierPériodeUseCase = () => { identifiantPériodeValue, notifiéeLeValue, notifiéeParValue, + notifiéeParDétailsValue, identifiantCandidatureValues, }) => { const identifiantPériode = IdentifiantPériode.convertirEnValueType(identifiantPériodeValue); @@ -31,6 +36,7 @@ export const registerNotifierPériodeUseCase = () => { identifiantPériode, notifiéeLe: DateTime.convertirEnValueType(notifiéeLeValue), notifiéePar: Email.convertirEnValueType(notifiéeParValue), + notifiéeParDétails: notifiéeParDétailsValue, identifiantCandidatures: identifiantCandidatureValues.map((identifiantCandidatureValue) => IdentifiantProjet.convertirEnValueType(identifiantCandidatureValue), ), diff --git "a/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" "b/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" index 6bcc1e8d17..71781142c0 100644 --- "a/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" +++ "b/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" @@ -11,6 +11,10 @@ export type NotifierÉliminéUseCase = Message< identifiantProjetValue: string; notifiéLeValue: string; notifiéParValue: string; + notifiéeParDétailsValue: { + fonction: string; + nomComplet: string; + }; attestationValue: { format: string; }; @@ -22,6 +26,7 @@ export const registerNotifierÉliminéUseCase = () => { identifiantProjetValue, notifiéLeValue, notifiéParValue, + notifiéeParDétailsValue, attestationValue: { format }, }) => { await mediator.send({ @@ -30,6 +35,7 @@ export const registerNotifierÉliminéUseCase = () => { identifiantProjetValue, notifiéeLeValue: notifiéLeValue, notifiéeParValue: notifiéParValue, + notifiéeParDétailsValue, attestationValue: { format: 'application/pdf', }, diff --git "a/packages/specifications/src/projet/laur\303\251at/stepDefinitions/laur\303\251at.when.ts" "b/packages/specifications/src/projet/laur\303\251at/stepDefinitions/laur\303\251at.when.ts" deleted file mode 100644 index 01546af44a..0000000000 --- "a/packages/specifications/src/projet/laur\303\251at/stepDefinitions/laur\303\251at.when.ts" +++ /dev/null @@ -1,31 +0,0 @@ -import { mediator } from 'mediateur'; -import { When as Quand } from '@cucumber/cucumber'; - -import { Lauréat } from '@potentiel-domain/laureat'; -import { DateTime } from '@potentiel-domain/common'; - -import { PotentielWorld } from '../../../potentiel.world'; - -Quand( - 'le DGEC validateur notifie la candidature comme lauréate', - async function (this: PotentielWorld) { - const identifiantProjet = this.candidatureWorld.importerCandidature.identifiantProjet; - this.lauréatWorld.notifierLauréatFixture.créer({ - identifiantProjet, - }); - this.utilisateurWorld.porteurFixture.créer({ - email: this.candidatureWorld.importerCandidature.values.emailContactValue, - }); - await mediator.send({ - type: 'Lauréat.UseCase.NotifierLauréat', - data: { - identifiantProjetValue: identifiantProjet, - notifiéLeValue: DateTime.now().formatter(), - notifiéParValue: this.utilisateurWorld.validateurFixture.email, - attestationValue: { - format: `text/plain`, - }, - }, - }); - }, -); diff --git "a/packages/specifications/src/projet/\303\251limin\303\251/stepDefinitions/\303\251limin\303\251.when.ts" "b/packages/specifications/src/projet/\303\251limin\303\251/stepDefinitions/\303\251limin\303\251.when.ts" deleted file mode 100644 index 4b601bf4f9..0000000000 --- "a/packages/specifications/src/projet/\303\251limin\303\251/stepDefinitions/\303\251limin\303\251.when.ts" +++ /dev/null @@ -1,33 +0,0 @@ -import { mediator } from 'mediateur'; -import { When as Quand } from '@cucumber/cucumber'; - -import { Éliminé } from '@potentiel-domain/elimine'; -import { DateTime } from '@potentiel-domain/common'; - -import { PotentielWorld } from '../../../potentiel.world'; - -Quand( - 'le DGEC validateur notifie la candidature comme éliminée', - async function (this: PotentielWorld) { - const identifiantProjet = this.candidatureWorld.importerCandidature.identifiantProjet; - - this.eliminéWorld.notifierEliminéFixture.créer({ - identifiantProjet, - }); - this.utilisateurWorld.porteurFixture.créer({ - email: this.candidatureWorld.importerCandidature.values.emailContactValue, - }); - - await mediator.send<Éliminé.NotifierÉliminéUseCase>({ - type: 'Éliminé.UseCase.NotifierÉliminé', - data: { - identifiantProjetValue: identifiantProjet, - notifiéLeValue: DateTime.now().formatter(), - notifiéParValue: this.utilisateurWorld.validateurFixture.email, - attestationValue: { - format: `application/pdf`, - }, - }, - }); - }, -); diff --git "a/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" "b/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" index 982031ea40..b14b44c2e1 100644 --- "a/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" +++ "b/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" @@ -31,6 +31,10 @@ export async function notifierPériode(this: PotentielWorld) { this.périodeWorld.notifierPériodeFixture.notifiéeLe, ).formatter(), notifiéeParValue: this.périodeWorld.notifierPériodeFixture.notifiéePar, + notifiéeParDétailsValue: { + fonction: this.utilisateurWorld.validateurFixture.fonction, + nomComplet: this.utilisateurWorld.validateurFixture.nom, + }, identifiantCandidatureValues: [...lauréats, ...éliminés], }, }); diff --git a/packages/specifications/src/utilisateur/fixtures/validateur.fixture.ts b/packages/specifications/src/utilisateur/fixtures/validateur.fixture.ts index d98b551406..d4ca1eb445 100644 --- a/packages/specifications/src/utilisateur/fixtures/validateur.fixture.ts +++ b/packages/specifications/src/utilisateur/fixtures/validateur.fixture.ts @@ -2,8 +2,12 @@ import { Fixture } from '../../fixture'; import { Utilisateur, AbstractUtilisateur } from './utilisateur'; +const validateurRole = 'dgec-validateur'; +const validateurFonction = 'fonction du DGEC validateur'; + interface Validateur extends Utilisateur { - readonly role: 'dgec-validateur'; + readonly role: typeof validateurRole; + readonly fonction: typeof validateurFonction; } export class ValidateurFixture @@ -16,15 +20,20 @@ export class ValidateurFixture return this.#aÉtéCréé; } - get role(): 'dgec-validateur' { - return 'dgec-validateur'; + get role(): typeof validateurRole { + return validateurRole; + } + + get fonction(): typeof validateurFonction { + return validateurFonction; } créer(partialFixture?: Partial'>>>): Readonly { const utilisateur = super.créer(partialFixture); const porteur: Validateur = { - role: 'dgec-validateur', + role: validateurRole, + fonction: validateurFonction, ...utilisateur, }; From 89479608f3009380cc23eae70684e47939052040 Mon Sep 17 00:00:00 2001 From: VioMrqs <27735540+VioMrqs@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:29:59 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=8E=A8=20Replace=20validateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/subscribers/candidature/candidature.projector.ts | 4 ++-- .../create-events-candidature-notifi\303\251e.ts" | 2 +- .../notifier/notifierP\303\251riode.action.ts" | 2 +- .../src/consulter/consulterCandidature.query.ts | 4 ++-- .../src/notifier/notifierCandidature.behavior.ts | 8 ++++---- .../src/notifier/notifierCandidature.command.ts | 2 +- .../src/notifier/notifierCandidature.usecase.ts | 6 +++--- .../src/notifier/notifierLaur\303\251at.usecase.ts" | 6 +++--- .../src/notifier/notifierP\303\251riode.command.ts" | 8 ++++---- .../src/notifier/notifierP\303\251riode.usecase.ts" | 6 +++--- .../notifier/notifier\303\211limin\303\251.usecase.ts" | 6 +++--- .../stepDefinitions/p\303\251riode.when.ts" | 2 +- 12 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts b/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts index 83fa074517..453728bc2b 100644 --- a/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts +++ b/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts @@ -74,8 +74,8 @@ export const register = () => { notifiéeLe: payload.notifiéeLe, notifiéePar: { email: payload.notifiéePar, - fonction: payload.notifiéeParDétails.fonction, - nomComplet: payload.notifiéeParDétails.nomComplet, + fonction: payload.validateur.fonction, + nomComplet: payload.validateur.nomComplet, }, }, }, diff --git "a/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" "b/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" index ac26faa9dd..3175162ca8 100644 --- "a/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" +++ "b/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" @@ -44,7 +44,7 @@ Candidature.registerCandidaturesUseCases({ loadAggregate }); attestationValue: { format: attestation.format }, notifiéeLeValue: notifiéLe, notifiéeParValue: notifiéPar, - notifiéeParDétailsValue: { + validateurValue: { fonction: utilisateur.fonction, nomComplet: utilisateur.nomComplet, }, diff --git "a/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" "b/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" index 5aec754cb2..e152d351ed 100644 --- "a/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" +++ "b/packages/applications/ssr/src/components/pages/p\303\251riode/notifier/notifierP\303\251riode.action.ts" @@ -50,7 +50,7 @@ const action: FormAction = async (_, { appelOffre, per identifiantPériodeValue, notifiéeLeValue: DateTime.now().formatter(), notifiéeParValue: utilisateur.identifiantUtilisateur.formatter(), - notifiéeParDétailsValue: { + validateurValue: { fonction: utilisateurDetails.fonction, nomComplet: utilisateurDetails.nomComplet, }, diff --git a/packages/domain/candidature/src/consulter/consulterCandidature.query.ts b/packages/domain/candidature/src/consulter/consulterCandidature.query.ts index 6523de5634..aca5609859 100644 --- a/packages/domain/candidature/src/consulter/consulterCandidature.query.ts +++ b/packages/domain/candidature/src/consulter/consulterCandidature.query.ts @@ -45,7 +45,7 @@ export type ConsulterCandidatureReadModel = { notification?: { notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; - notifiéeParDétails: { + validateur: { fonction: string; nomComplet: string; }; @@ -134,7 +134,7 @@ export const mapToReadModel = ({ notification: notification && { notifiéeLe: DateTime.convertirEnValueType(notification.notifiéeLe), notifiéePar: Email.convertirEnValueType(notification.notifiéePar.email), - notifiéeParDétails: { + validateur: { fonction: notification.notifiéePar.fonction, nomComplet: notification.notifiéePar.nomComplet, }, diff --git a/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts b/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts index 5baebad08c..892d78f35e 100644 --- a/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts +++ b/packages/domain/candidature/src/notifier/notifierCandidature.behavior.ts @@ -7,7 +7,7 @@ export type NotifierOptions = { identifiantProjet: IdentifiantProjet.ValueType; notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; - notifiéeParDétails: { + validateur: { fonction: string; nomComplet: string; }; @@ -22,7 +22,7 @@ export type CandidatureNotifiéeEvent = DomainEvent< identifiantProjet: IdentifiantProjet.RawType; notifiéeLe: DateTime.RawType; notifiéePar: Email.RawType; - notifiéeParDétails: { + validateur: { fonction: string; nomComplet: string; }; @@ -38,7 +38,7 @@ export async function notifier( identifiantProjet, notifiéeLe, notifiéePar, - notifiéeParDétails, + validateur, attestation: { format }, }: NotifierOptions, ) { @@ -52,7 +52,7 @@ export async function notifier( identifiantProjet: identifiantProjet.formatter(), notifiéeLe: notifiéeLe.formatter(), notifiéePar: notifiéePar.formatter(), - notifiéeParDétails, + validateur, attestation: { format, }, diff --git a/packages/domain/candidature/src/notifier/notifierCandidature.command.ts b/packages/domain/candidature/src/notifier/notifierCandidature.command.ts index 6917baf8d4..50e3466cf8 100644 --- a/packages/domain/candidature/src/notifier/notifierCandidature.command.ts +++ b/packages/domain/candidature/src/notifier/notifierCandidature.command.ts @@ -11,7 +11,7 @@ export type NotifierCandidatureCommand = Message< identifiantProjet: IdentifiantProjet.ValueType; notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; - notifiéeParDétails: { + validateur: { fonction: string; nomComplet: string; }; diff --git a/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts b/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts index b1776659da..db7dce6bfc 100644 --- a/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts +++ b/packages/domain/candidature/src/notifier/notifierCandidature.usecase.ts @@ -10,7 +10,7 @@ export type NotifierCandidatureUseCase = Message< identifiantProjetValue: string; notifiéeLeValue: string; notifiéeParValue: string; - notifiéeParDétailsValue: { + validateurValue: { fonction: string; nomComplet: string; }; @@ -25,7 +25,7 @@ export const registerNotifierCandidatureUseCase = () => { identifiantProjetValue, notifiéeParValue, notifiéeLeValue, - notifiéeParDétailsValue, + validateurValue, attestationValue: { format }, }) => { await mediator.send({ @@ -34,7 +34,7 @@ export const registerNotifierCandidatureUseCase = () => { identifiantProjet: IdentifiantProjet.convertirEnValueType(identifiantProjetValue), notifiéeLe: DateTime.convertirEnValueType(notifiéeLeValue), notifiéePar: Email.convertirEnValueType(notifiéeParValue), - notifiéeParDétails: notifiéeParDétailsValue, + validateur: validateurValue, attestation: { format }, }, }); diff --git "a/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" "b/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" index a337f606b5..43d02c944a 100644 --- "a/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" +++ "b/packages/domain/laur\303\251at/src/notifier/notifierLaur\303\251at.usecase.ts" @@ -11,7 +11,7 @@ export type NotifierLauréatUseCase = Message< identifiantProjetValue: string; notifiéLeValue: string; notifiéParValue: string; - notifiéeParDétailsValue: { + validateurValue: { fonction: string; nomComplet: string; }; @@ -26,7 +26,7 @@ export const registerNotifierLauréatUseCase = () => { identifiantProjetValue, notifiéParValue, notifiéLeValue, - notifiéeParDétailsValue, + validateurValue, attestationValue: { format }, }) => { await mediator.send({ @@ -35,7 +35,7 @@ export const registerNotifierLauréatUseCase = () => { identifiantProjetValue, notifiéeLeValue: notifiéLeValue, notifiéeParValue: notifiéParValue, - notifiéeParDétailsValue, + validateurValue, attestationValue: { format: 'application/pdf', }, diff --git "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" index 92b517f41a..7e31ccda33 100644 --- "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" +++ "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.command.ts" @@ -16,7 +16,7 @@ export type NotifierPériodeCommand = Message< identifiantPériode: IdentifiantPériode.ValueType; notifiéeLe: DateTime.ValueType; notifiéePar: Email.ValueType; - notifiéeParDétails: { + validateur: { fonction: string; nomComplet: string; }; @@ -32,7 +32,7 @@ export const registerNotifierPériodeCommand = (loadAggregate: LoadAggregate) => identifiantPériode, notifiéeLe, notifiéePar, - notifiéeParDétails, + validateur, identifiantCandidatures, }) => { const identifiantLauréats: Array = []; @@ -50,7 +50,7 @@ export const registerNotifierPériodeCommand = (loadAggregate: LoadAggregate) => identifiantProjetValue: identifiantCandidature.formatter(), notifiéLeValue: notifiéeLe.formatter(), notifiéParValue: notifiéePar.formatter(), - notifiéeParDétailsValue: notifiéeParDétails, + validateurValue: validateur, attestationValue: { format: 'application/pdf', }, @@ -68,7 +68,7 @@ export const registerNotifierPériodeCommand = (loadAggregate: LoadAggregate) => identifiantProjetValue: identifiantCandidature.formatter(), notifiéLeValue: notifiéeLe.formatter(), notifiéParValue: notifiéePar.formatter(), - notifiéeParDétailsValue: notifiéeParDétails, + validateurValue: validateur, attestationValue: { format: 'application/pdf', }, diff --git "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" index 2709af8bf6..ab3f86eaad 100644 --- "a/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" +++ "b/packages/domain/p\303\251riode/src/notifier/notifierP\303\251riode.usecase.ts" @@ -12,7 +12,7 @@ export type NotifierPériodeUseCase = Message< identifiantPériodeValue: IdentifiantPériode.RawType; notifiéeLeValue: DateTime.RawType; notifiéeParValue: Email.RawType; - notifiéeParDétailsValue: { + validateurValue: { fonction: string; nomComplet: string; }; @@ -25,7 +25,7 @@ export const registerNotifierPériodeUseCase = () => { identifiantPériodeValue, notifiéeLeValue, notifiéeParValue, - notifiéeParDétailsValue, + validateurValue, identifiantCandidatureValues, }) => { const identifiantPériode = IdentifiantPériode.convertirEnValueType(identifiantPériodeValue); @@ -36,7 +36,7 @@ export const registerNotifierPériodeUseCase = () => { identifiantPériode, notifiéeLe: DateTime.convertirEnValueType(notifiéeLeValue), notifiéePar: Email.convertirEnValueType(notifiéeParValue), - notifiéeParDétails: notifiéeParDétailsValue, + validateur: validateurValue, identifiantCandidatures: identifiantCandidatureValues.map((identifiantCandidatureValue) => IdentifiantProjet.convertirEnValueType(identifiantCandidatureValue), ), diff --git "a/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" "b/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" index 71781142c0..2f233af364 100644 --- "a/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" +++ "b/packages/domain/\303\251limin\303\251/src/notifier/notifier\303\211limin\303\251.usecase.ts" @@ -11,7 +11,7 @@ export type NotifierÉliminéUseCase = Message< identifiantProjetValue: string; notifiéLeValue: string; notifiéParValue: string; - notifiéeParDétailsValue: { + validateurValue: { fonction: string; nomComplet: string; }; @@ -26,7 +26,7 @@ export const registerNotifierÉliminéUseCase = () => { identifiantProjetValue, notifiéLeValue, notifiéParValue, - notifiéeParDétailsValue, + validateurValue, attestationValue: { format }, }) => { await mediator.send({ @@ -35,7 +35,7 @@ export const registerNotifierÉliminéUseCase = () => { identifiantProjetValue, notifiéeLeValue: notifiéLeValue, notifiéeParValue: notifiéParValue, - notifiéeParDétailsValue, + validateurValue, attestationValue: { format: 'application/pdf', }, diff --git "a/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" "b/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" index b14b44c2e1..0595afdae5 100644 --- "a/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" +++ "b/packages/specifications/src/p\303\251riode/stepDefinitions/p\303\251riode.when.ts" @@ -31,7 +31,7 @@ export async function notifierPériode(this: PotentielWorld) { this.périodeWorld.notifierPériodeFixture.notifiéeLe, ).formatter(), notifiéeParValue: this.périodeWorld.notifierPériodeFixture.notifiéePar, - notifiéeParDétailsValue: { + validateurValue: { fonction: this.utilisateurWorld.validateurFixture.fonction, nomComplet: this.utilisateurWorld.validateurFixture.nom, }, From b73d1f893c04eb8b00c7a9ec2a4b73176f1140b1 Mon Sep 17 00:00:00 2001 From: VioMrqs <27735540+VioMrqs@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:39:40 +0200 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=8E=A8=20Review=20ben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/subscribers/candidature/candidature.projector.ts | 4 ++-- .../create-events-candidature-notifi\303\251e.ts" | 5 ++--- packages/domain/candidature/src/candidature.entity.ts | 4 ++-- .../candidature/src/consulter/consulterCandidature.query.ts | 6 +++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts b/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts index 453728bc2b..ec428d292a 100644 --- a/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts +++ b/packages/applications/projectors/src/subscribers/candidature/candidature.projector.ts @@ -72,8 +72,8 @@ export const register = () => { notification: { estNotifiée: true, notifiéeLe: payload.notifiéeLe, - notifiéePar: { - email: payload.notifiéePar, + notifiéePar: payload.notifiéePar, + validateur: { fonction: payload.validateur.fonction, nomComplet: payload.validateur.nomComplet, }, diff --git "a/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" "b/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" index 3175162ca8..c7e3c932ec 100644 --- "a/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" +++ "b/packages/applications/scheduled-tasks/src/candidature/create-events-candidature-notifi\303\251e.ts" @@ -33,7 +33,6 @@ Candidature.registerCandidaturesUseCases({ loadAggregate }); identifiantProjet, identifiantUtilisateur: notifiéPar, }); - return; } console.log(`Publish NotifierCandidature pour ${identifiantProjet}`); @@ -45,8 +44,8 @@ Candidature.registerCandidaturesUseCases({ loadAggregate }); notifiéeLeValue: notifiéLe, notifiéeParValue: notifiéPar, validateurValue: { - fonction: utilisateur.fonction, - nomComplet: utilisateur.nomComplet, + fonction: Option.isNone(utilisateur) ? 'fonction inconnue' : utilisateur.fonction, + nomComplet: Option.isNone(utilisateur) ? 'validateur inconnu' : utilisateur.nomComplet, }, }, }); diff --git a/packages/domain/candidature/src/candidature.entity.ts b/packages/domain/candidature/src/candidature.entity.ts index efecf2bac4..cb1171ff15 100644 --- a/packages/domain/candidature/src/candidature.entity.ts +++ b/packages/domain/candidature/src/candidature.entity.ts @@ -41,8 +41,8 @@ export type CandidatureEntity = Entity< notification?: { estNotifiée: true; notifiéeLe: DateTime.RawType; - notifiéePar: { - email: Email.RawType; + notifiéePar: Email.RawType; + validateur: { fonction: string; nomComplet: string; }; diff --git a/packages/domain/candidature/src/consulter/consulterCandidature.query.ts b/packages/domain/candidature/src/consulter/consulterCandidature.query.ts index aca5609859..2810ca5230 100644 --- a/packages/domain/candidature/src/consulter/consulterCandidature.query.ts +++ b/packages/domain/candidature/src/consulter/consulterCandidature.query.ts @@ -133,10 +133,10 @@ export const mapToReadModel = ({ ), notification: notification && { notifiéeLe: DateTime.convertirEnValueType(notification.notifiéeLe), - notifiéePar: Email.convertirEnValueType(notification.notifiéePar.email), + notifiéePar: Email.convertirEnValueType(notification.notifiéePar), validateur: { - fonction: notification.notifiéePar.fonction, - nomComplet: notification.notifiéePar.nomComplet, + fonction: notification.validateur.fonction, + nomComplet: notification.validateur.nomComplet, }, }, });