From b8bd65f806a5a4f37fbf3ed5f3d647f489edba92 Mon Sep 17 00:00:00 2001 From: Bertrand Bougon Date: Fri, 15 Nov 2024 14:33:01 +0100 Subject: [PATCH] =?UTF-8?q?[AUTO=20DIAGNOSTIC]=20Impl=C3=A9mente=20l?= =?UTF-8?q?=E2=80=99entrep=C3=B4t=20postgres=20de=20demande=20d=E2=80=99au?= =?UTF-8?q?to=20diagnostic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EntrepotDemandeAutoDiagnosticPostgres.ts | 38 +++++++++++++++++++ .../entrepots/postgres/EntrepotsMAC.ts | 5 ++- ...2336_cree-table-demande-auto-diagnostic.ts | 16 ++++++++ ...repotDemandeAutoDiagnosticPostgres.spec.ts | 34 +++++++++++++++++ .../test/utilitaires/nettoyeurBDD.ts | 26 +++++++++---- 5 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.ts create mode 100644 mon-aide-cyber-api/src/infrastructure/entrepots/postgres/migrations/20241115112336_cree-table-demande-auto-diagnostic.ts create mode 100644 mon-aide-cyber-api/test/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.spec.ts diff --git a/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.ts b/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.ts new file mode 100644 index 000000000..9266ea289 --- /dev/null +++ b/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.ts @@ -0,0 +1,38 @@ +import { DTO, EntrepotPostgres } from './EntrepotPostgres'; +import { + DemandeAutoDiagnostic, + EntrepotDemandeAutoDiagnostic, +} from '../../../auto-diagnostic/CapteurSagaLanceAutoDiagnostic'; +import { FournisseurHorloge } from '../../horloge/FournisseurHorloge'; + +type DemandeAutoDiagnosticDTO = DTO & { + donnees: { dateSignatureCGU: string }; +}; + +export class EntrepotDemandeAutoDiagnosticPostgres + extends EntrepotPostgres + implements EntrepotDemandeAutoDiagnostic +{ + protected champsAMettreAJour( + entiteDTO: DemandeAutoDiagnosticDTO + ): Partial { + return { donnees: entiteDTO.donnees }; + } + protected nomTable(): string { + return 'demandes-auto-diagnostic'; + } + protected deEntiteADTO( + entite: DemandeAutoDiagnostic + ): DemandeAutoDiagnosticDTO { + return { + donnees: { dateSignatureCGU: entite.dateSignatureCGU.toISOString() }, + id: entite.identifiant, + }; + } + protected deDTOAEntite(dto: DemandeAutoDiagnosticDTO): DemandeAutoDiagnostic { + return { + dateSignatureCGU: FournisseurHorloge.enDate(dto.donnees.dateSignatureCGU), + identifiant: dto.id, + }; + } +} diff --git a/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotsMAC.ts b/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotsMAC.ts index 92e601e99..9558e4ce8 100644 --- a/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotsMAC.ts +++ b/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/EntrepotsMAC.ts @@ -19,6 +19,7 @@ import { EntrepotAidant } from '../../../espace-aidant/Aidant'; import { EntrepotProfilAidant } from '../../../espace-aidant/profil/profilAidant'; import { EntrepotProfilAidantPostgres } from './EntrepotProfilAidantPostgres'; import { EntrepotDemandeAutoDiagnostic } from '../../../auto-diagnostic/CapteurSagaLanceAutoDiagnostic'; +import { EntrepotDemandeAutoDiagnosticPostgres } from './EntrepotDemandeAutoDiagnosticPostgres'; export class EntrepotsMAC implements Entrepots { private readonly entrepotDiagnostic = new EntrepotDiagnosticPostgres(); @@ -40,6 +41,8 @@ export class EntrepotsMAC implements Entrepots { new EntrepotUtilisateurPostgres(adaptateurServiceChiffrement()); private entrepotProfilAidant: EntrepotProfilAidant = new EntrepotProfilAidantPostgres(adaptateurServiceChiffrement()); + private entrepotDemandeAutoDiagnostic: EntrepotDemandeAutoDiagnostic = + new EntrepotDemandeAutoDiagnosticPostgres(); diagnostic(): EntrepotDiagnostic { return this.entrepotDiagnostic; @@ -77,6 +80,6 @@ export class EntrepotsMAC implements Entrepots { } demandesAutoDiagnostic(): EntrepotDemandeAutoDiagnostic { - throw new Error('Method not implemented.'); + return this.entrepotDemandeAutoDiagnostic; } } diff --git a/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/migrations/20241115112336_cree-table-demande-auto-diagnostic.ts b/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/migrations/20241115112336_cree-table-demande-auto-diagnostic.ts new file mode 100644 index 000000000..880f25693 --- /dev/null +++ b/mon-aide-cyber-api/src/infrastructure/entrepots/postgres/migrations/20241115112336_cree-table-demande-auto-diagnostic.ts @@ -0,0 +1,16 @@ +import { Knex } from 'knex'; + +export async function up(knex: Knex): Promise { + return knex.schema.createTable( + 'demandes-auto-diagnostic', + (fabriqueDeTable) => { + fabriqueDeTable.uuid('id'); + fabriqueDeTable.primary(['id']); + fabriqueDeTable.jsonb('donnees'); + } + ); +} + +export async function down(knex: Knex): Promise { + return knex.schema.dropTable('demandes-auto-diagnostic'); +} diff --git a/mon-aide-cyber-api/test/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.spec.ts b/mon-aide-cyber-api/test/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.spec.ts new file mode 100644 index 000000000..1e228b4cb --- /dev/null +++ b/mon-aide-cyber-api/test/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres.spec.ts @@ -0,0 +1,34 @@ +import { beforeEach, describe } from 'vitest'; +import { nettoieLaBaseDeDonneesDemandeAutoDiagnostic } from '../../../utilitaires/nettoyeurBDD'; +import { EntrepotDemandeAutoDiagnosticPostgres } from '../../../../src/infrastructure/entrepots/postgres/EntrepotDemandeAutoDiagnosticPostgres'; +import { DemandeAutoDiagnostic } from '../../../../src/auto-diagnostic/CapteurSagaLanceAutoDiagnostic'; +import { FournisseurHorloge } from '../../../../src/infrastructure/horloge/FournisseurHorloge'; +import { FournisseurHorlogeDeTest } from '../../horloge/FournisseurHorlogeDeTest'; +import crypto from 'crypto'; + +describe('Entrepot demande auto diagnostic', () => { + beforeEach(async () => { + await nettoieLaBaseDeDonneesDemandeAutoDiagnostic(); + }); + + it('Persiste une demande d’auto diagnostic', async () => { + FournisseurHorlogeDeTest.initialise(new Date()); + const demandeAutoDiagnostic = { + identifiant: crypto.randomUUID(), + dateSignatureCGU: FournisseurHorloge.maintenant(), + }; + + await new EntrepotDemandeAutoDiagnosticPostgres().persiste( + demandeAutoDiagnostic + ); + + const demandeAutoDiagnosticRecue = + await new EntrepotDemandeAutoDiagnosticPostgres().lis( + demandeAutoDiagnostic.identifiant + ); + expect(demandeAutoDiagnosticRecue).toStrictEqual({ + identifiant: demandeAutoDiagnostic.identifiant, + dateSignatureCGU: FournisseurHorloge.maintenant(), + }); + }); +}); diff --git a/mon-aide-cyber-api/test/utilitaires/nettoyeurBDD.ts b/mon-aide-cyber-api/test/utilitaires/nettoyeurBDD.ts index 13d8a614c..f801278ae 100644 --- a/mon-aide-cyber-api/test/utilitaires/nettoyeurBDD.ts +++ b/mon-aide-cyber-api/test/utilitaires/nettoyeurBDD.ts @@ -35,47 +35,59 @@ class EntrepotsPostgresPourLesTests { async nettoieDemandeDevenirAidant() { await this.knex('demandes-devenir-aidant').truncate(); } + + async nettoieDemandeAutoDiagnostic() { + await this.knex('demandes-auto-diagnostic').truncate(); + } } +const entrepotsPostgresPourLesTests = new EntrepotsPostgresPourLesTests(); + export const nettoieLaBaseDeDonneesAidants = async () => { if (process.env.URL_SERVEUR_BASE_DONNEES) { - await new EntrepotsPostgresPourLesTests().nettoieAidants(); + await entrepotsPostgresPourLesTests.nettoieAidants(); } }; export const nettoieLaBaseDeDonneesUtilisateurs = async () => { if (process.env.URL_SERVEUR_BASE_DONNEES) { - await new EntrepotsPostgresPourLesTests().nettoieUtilisateurs(); + await entrepotsPostgresPourLesTests.nettoieUtilisateurs(); } }; export const nettoieLaBaseDeDonneesAides = async () => { if (process.env.URL_SERVEUR_BASE_DONNEES) { - await new EntrepotsPostgresPourLesTests().nettoieAides(); + await entrepotsPostgresPourLesTests.nettoieAides(); } }; export const nettoieLaBaseDeDonneesJournal = async () => { if (process.env.URL_SERVEUR_BASE_DONNEES) { - await new EntrepotsPostgresPourLesTests().nettoieJournal(); + await entrepotsPostgresPourLesTests.nettoieJournal(); } }; export const nettoieLaBaseDeDonneesDiagnostics = async () => { if (process.env.URL_SERVEUR_BASE_DONNEES) { - await new EntrepotsPostgresPourLesTests().nettoieDiagnostics(); + await entrepotsPostgresPourLesTests.nettoieDiagnostics(); } }; export const nettoieLaBaseDeDonneesRelations = async () => { if (process.env.URL_SERVEUR_BASE_DONNEES) { - await new EntrepotsPostgresPourLesTests().nettoieRelations(); + await entrepotsPostgresPourLesTests.nettoieRelations(); } }; export const nettoieLaBaseDeDonneesDemandeDevenirAidant = async () => { if (process.env.URL_SERVEUR_BASE_DONNEES) { - await new EntrepotsPostgresPourLesTests().nettoieDemandeDevenirAidant(); + await entrepotsPostgresPourLesTests.nettoieDemandeDevenirAidant(); + } +}; + +export const nettoieLaBaseDeDonneesDemandeAutoDiagnostic = async () => { + if (process.env.URL_SERVEUR_BASE_DONNEES) { + await entrepotsPostgresPourLesTests.nettoieDemandeAutoDiagnostic(); } };