From e13fc7379120c6a81c20ed25fb04ae50831e7da2 Mon Sep 17 00:00:00 2001 From: Bertrand Bougon Date: Tue, 21 Jan 2025 18:51:07 +0100 Subject: [PATCH] =?UTF-8?q?[REMANIEMENT][TABLEAU=20DE=20BORD]=20Modifie=20?= =?UTF-8?q?la=20mani=C3=A8re=20de=20g=C3=A9n=C3=A9rer=20le=20tableau=20de?= =?UTF-8?q?=20bord=20en=20vue=20de=20la=20mise=20en=20place=20du=20tableau?= =?UTF-8?q?=20de=20bord=20utilisateur=20inscrit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tableau-de-bord/routesAPITableauDeBord.ts | 23 +++------- .../tableau-de-bord/ServiceTableauDeBord.ts | 42 +++++++++++++++--- .../ServiceTableauDeBord.spec.ts | 44 +++++++++++-------- 3 files changed, 70 insertions(+), 39 deletions(-) diff --git a/mon-aide-cyber-api/src/api/tableau-de-bord/routesAPITableauDeBord.ts b/mon-aide-cyber-api/src/api/tableau-de-bord/routesAPITableauDeBord.ts index 603bf253b..e25eb24fe 100644 --- a/mon-aide-cyber-api/src/api/tableau-de-bord/routesAPITableauDeBord.ts +++ b/mon-aide-cyber-api/src/api/tableau-de-bord/routesAPITableauDeBord.ts @@ -1,6 +1,6 @@ import express, { Response } from 'express'; import { NextFunction } from 'express-serve-static-core'; -import { constructeurActionsHATEOAS, ReponseHATEOAS } from '../hateoas/hateoas'; +import { ReponseHATEOAS } from '../hateoas/hateoas'; import { Diagnostic, ServiceTableauDeBord, @@ -29,24 +29,15 @@ export const routesAPITableauDeBord = (configuration: ConfigurationServeur) => { reponse: Response, __suite: NextFunction ) => { - const diagnostics = await new ServiceTableauDeBord( + const tableauDeBord = await new ServiceTableauDeBord( configuration.adaptateurRelations, - new ServiceDiagnostic(configuration.entrepots) - ).diagnosticsInitiesPar(requete.identifiantUtilisateurCourant!); + new ServiceDiagnostic(configuration.entrepots), + !!requete.estProConnect + ).pour(requete.identifiantUtilisateurCourant!); return reponse.status(200).json({ - diagnostics, - ...constructeurActionsHATEOAS() - .pour({ - contexte: 'aidant:acceder-au-tableau-de-bord', - }) - .pour({ - contexte: requete.estProConnect - ? 'se-deconnecter-avec-pro-connect' - : 'se-deconnecter', - }) - .afficherLesDiagnostics(diagnostics.map((d) => d.identifiant)) - .construis(), + diagnostics: tableauDeBord.diagnostics, + ...tableauDeBord.liens, }); } ); diff --git a/mon-aide-cyber-api/src/espace-aidant/tableau-de-bord/ServiceTableauDeBord.ts b/mon-aide-cyber-api/src/espace-aidant/tableau-de-bord/ServiceTableauDeBord.ts index 3f540ec58..94b1f09af 100644 --- a/mon-aide-cyber-api/src/espace-aidant/tableau-de-bord/ServiceTableauDeBord.ts +++ b/mon-aide-cyber-api/src/espace-aidant/tableau-de-bord/ServiceTableauDeBord.ts @@ -3,6 +3,10 @@ import crypto, { UUID } from 'crypto'; import { ServiceDiagnostic } from '../../diagnostic/ServiceDiagnostic'; import { FournisseurHorloge } from '../../infrastructure/horloge/FournisseurHorloge'; import { isAfter } from 'date-fns'; +import { + constructeurActionsHATEOAS, + ReponseHATEOAS, +} from '../../api/hateoas/hateoas'; export type Diagnostic = { dateCreation: string; @@ -11,20 +15,48 @@ export type Diagnostic = { secteurGeographique: string | 'non renseigné'; }; +type TableauDeBord = { + diagnostics: Diagnostic[]; + liens: ReponseHATEOAS; +}; + export class ServiceTableauDeBord { constructor( private readonly adaptateurRelation: AdaptateurRelations, - private readonly serviceDiagnostic: ServiceDiagnostic + private readonly serviceDiagnostic: ServiceDiagnostic, + private readonly estProConnect: boolean ) {} - async diagnosticsInitiesPar( - identifiantAidant: crypto.UUID - ): Promise { + async pour(identifiantUtilisateur: crypto.UUID): Promise { const identifiantDiagnosticsLie = await this.adaptateurRelation.identifiantsObjetsLiesAUtilisateur( - identifiantAidant + identifiantUtilisateur ); + const liensPourAidant = (diagnostics: Diagnostic[]): ReponseHATEOAS => { + return constructeurActionsHATEOAS() + .pour({ + contexte: 'aidant:acceder-au-tableau-de-bord', + }) + .pour({ + contexte: this.estProConnect + ? 'se-deconnecter-avec-pro-connect' + : 'se-deconnecter', + }) + .afficherLesDiagnostics(diagnostics.map((d) => d.identifiant)) + .construis(); + }; + + return this.recupereLesDiagnostics(identifiantDiagnosticsLie).then( + (diagnostics) => { + return { diagnostics, liens: liensPourAidant(diagnostics) }; + } + ); + } + + private recupereLesDiagnostics( + identifiantDiagnosticsLie: string[] + ): Promise { return this.serviceDiagnostic .contextes(identifiantDiagnosticsLie as UUID[]) .then((diagnostics) => { diff --git a/mon-aide-cyber-api/test/espace-aidant/tableau-de-bord/ServiceTableauDeBord.spec.ts b/mon-aide-cyber-api/test/espace-aidant/tableau-de-bord/ServiceTableauDeBord.spec.ts index 57aaf8262..6bbc6190a 100644 --- a/mon-aide-cyber-api/test/espace-aidant/tableau-de-bord/ServiceTableauDeBord.spec.ts +++ b/mon-aide-cyber-api/test/espace-aidant/tableau-de-bord/ServiceTableauDeBord.spec.ts @@ -27,10 +27,11 @@ describe('Service Tableau De Bord', () => { ), new ServiceDiagnosticTest( new Map([[identifiantDiagnostic, unContexte().construis()]]) - ) - ).diagnosticsInitiesPar(identifiantAidant); + ), + true + ).pour(identifiantAidant); - expect(diagnosticTableauDeBord[0]).toStrictEqual({ + expect(diagnosticTableauDeBord.diagnostics[0]).toStrictEqual({ identifiant: identifiantDiagnostic, dateCreation: '17.04.2024', secteurActivite: 'non renseigné', @@ -54,10 +55,11 @@ describe('Service Tableau De Bord', () => { unContexte().avecDateCreation(date).construis(), ], ]) - ) - ).diagnosticsInitiesPar(identifiantAidant); + ), + true + ).pour(identifiantAidant); - expect(diagnosticTableauDeBord[0]).toStrictEqual({ + expect(diagnosticTableauDeBord.diagnostics[0]).toStrictEqual({ dateCreation: '28.04.2024', identifiant: identifiantDiagnostic, secteurActivite: 'non renseigné', @@ -82,10 +84,13 @@ describe('Service Tableau De Bord', () => { unContexte().avecLeDepartement(departement).construis(), ], ]) - ) - ).diagnosticsInitiesPar(identifiantAidant); + ), + true + ).pour(identifiantAidant); - expect(diagnosticTableauDeBord[0]).toStrictEqual({ + expect( + diagnosticTableauDeBord.diagnostics[0] + ).toStrictEqual({ dateCreation: '17.04.2024', identifiant: identifiantDiagnostic, secteurActivite: 'non renseigné', @@ -111,10 +116,11 @@ describe('Service Tableau De Bord', () => { unContexte().avecSecteurActivite(secteurActivite).construis(), ], ]) - ) - ).diagnosticsInitiesPar(identifiantAidant); + ), + true + ).pour(identifiantAidant); - expect(diagnosticTableauDeBord[0]).toStrictEqual({ + expect(diagnosticTableauDeBord.diagnostics[0]).toStrictEqual({ dateCreation: '17.04.2024', identifiant: identifiantDiagnostic, secteurActivite: secteurActivite, @@ -158,10 +164,11 @@ describe('Service Tableau De Bord', () => { .construis(), ], ]) - ) - ).diagnosticsInitiesPar(identifiantAidant); + ), + true + ).pour(identifiantAidant); - expect(diagnosticTableauDeBord).toStrictEqual([ + expect(diagnosticTableauDeBord.diagnostics).toStrictEqual([ { dateCreation: '17.04.2024', identifiant: identifiantDiagnosticInitie1, @@ -236,10 +243,11 @@ describe('Service Tableau De Bord', () => { .construis(), ], ]) - ) - ).diagnosticsInitiesPar(identifiantAidant); + ), + true + ).pour(identifiantAidant); - expect(diagnosticTableauDeBord).toStrictEqual([ + expect(diagnosticTableauDeBord.diagnostics).toStrictEqual([ { dateCreation: '16.03.2024', identifiant: identifiantDiagnosticInitie3,