Skip to content

Commit

Permalink
[REMANIEMENT][AIDANT] Prends en compte l'ajout de la colonne type dan…
Browse files Browse the repository at this point in the history
…s utilisateur_mac au niveau de l'entrepôt Aidant
  • Loading branch information
bbougon committed Dec 31, 2024
1 parent 5127255 commit ee2e6ea
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { DTO, EntrepotPostgres } from './EntrepotPostgres';
import { DTO, EntrepotPostgres, Predicat } from './EntrepotPostgres';

import { ServiceDeChiffrement } from '../../../securite/ServiceDeChiffrement';
import { AggregatNonTrouve } from '../../../domaine/Aggregat';
Expand Down Expand Up @@ -27,6 +27,7 @@ type DonneesAidant = {
};

type AidantDTO = DTO & {
type: 'AIDANT';
donnees: DonneesAidant;
};

Expand Down Expand Up @@ -77,6 +78,7 @@ export class EntrepotAidantPostgres
protected deEntiteADTO(entite: Aidant): AidantDTO {
return {
id: entite.identifiant,
type: 'AIDANT',
donnees: {
email: this.chiffrement.chiffre(entite.email),
nomPrenom: this.chiffrement.chiffre(entite.nomPrenom),
Expand All @@ -100,13 +102,18 @@ export class EntrepotAidantPostgres
return 'utilisateurs_mac';
}

protected predicat(): Predicat | undefined {
return { colonne: 'type', valeur: 'AIDANT' };
}

typeAggregat(): string {
return 'aidant';
}

rechercheParEmail(email: string): Promise<Aidant> {
return this.knex
.from(`${this.nomTable()}`)
.where('type', 'AIDANT')
.then((aidants: AidantDTO[]) =>
aidants.find(
(a) => this.chiffrement.dechiffre(a.donnees.email) === email
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ import crypto from 'crypto';

export type DTO = { id: crypto.UUID };

export type Predicat = {
colonne: string;
valeur: string;
};

export abstract class EntrepotPostgres<T extends Aggregat, D extends DTO>
implements Entrepot<T>
{
Expand All @@ -16,9 +21,12 @@ export abstract class EntrepotPostgres<T extends Aggregat, D extends DTO>
}

lis(identifiant: string): Promise<T> {
return this.knex
.from(this.nomTable())
.where('id', identifiant)
const requete = this.knex.from(this.nomTable()).where('id', identifiant);
const predicat = this.predicat();
if (predicat) {
requete.andWhere(predicat.colonne, predicat.valeur);
}
return requete
.first()
.then((ligne: D) =>
ligne !== undefined
Expand All @@ -43,8 +51,12 @@ export abstract class EntrepotPostgres<T extends Aggregat, D extends DTO>
}

async tous(): Promise<T[]> {
const lignes = await this.knex.from(this.nomTable());
return lignes.map((ligne) => this.deDTOAEntite(ligne));
const requete = this.knex.from(this.nomTable());
const predicat = this.predicat();
if (predicat) {
requete.andWhere(predicat.colonne, predicat.valeur);
}
return (await requete).map((ligne) => this.deDTOAEntite(ligne));
}

typeAggregat(): string {
Expand All @@ -58,4 +70,8 @@ export abstract class EntrepotPostgres<T extends Aggregat, D extends DTO>
protected abstract deEntiteADTO(entite: T): D;

protected abstract deDTOAEntite(dto: D): T;

protected predicat(): Predicat | undefined {
return undefined;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ import { EntrepotAidantPostgres as EntrepotAidantPostgresExtraction } from '../.
import { Aidant as AidantExtraction } from '../../../../src/administration/aidants/aidants-selon-nombre-diagnostics/Types';
import { ProfilAidant } from '../../../../src/espace-aidant/profil/profilAidant';
import { EntrepotProfilAidantPostgres } from '../../../../src/infrastructure/entrepots/postgres/EntrepotProfilAidantPostgres';
import knexfile from './../../../../src/infrastructure/entrepots/postgres/knexfile';
import knex from 'knex';
import { AggregatNonTrouve } from '../../../../src/domaine/Aggregat';

describe('Entrepots Postgres', () => {
describe('Entrepot Statistiques Postgres', () => {
Expand Down Expand Up @@ -677,8 +680,8 @@ describe('Entrepot Aidant', () => {
});
});

describe('Recherche par identifiant', () => {
it("l'aidant est trouvé", async () => {
describe('Recherche par email', () => {
it("L'aidant est trouvé", async () => {
const aidant = unAidant().construis();
const serviceDeChiffrement = new FauxServiceDeChiffrement(
new Map([
Expand All @@ -695,14 +698,72 @@ describe('Entrepot Aidant', () => {
expect(aidantTrouve).toStrictEqual<Aidant>(aidant);
});

it("l'aidant n'est pas trouvé", () => {
it("Retourne un erreur s'il ne s'agit pas d'un Aidant", async () => {
await knex(knexfile)
.insert({
id: crypto.randomUUID(),
type: 'UTILISATEUR_INSCRIT',
donnees: { email: '[email protected]' },
})
.into('utilisateurs_mac');

const aidantTrouve = new EntrepotAidantPostgres(
new ServiceDeChiffrementClair()
).rechercheParEmail('[email protected]');

expect(aidantTrouve).rejects.toStrictEqual(
new AggregatNonTrouve('aidant')
);
});

it("L'aidant n'est pas trouvé", () => {
expect(
new EntrepotAidantPostgres(
new FauxServiceDeChiffrement(new Map())
).rechercheParEmail('identifiant-inconnu')
).rejects.toThrow(new Error("Le aidant demandé n'existe pas."));
});
});

describe('Pour le type Aidant', () => {
it('Retourne une erreur s’il ne s’agit pas d’un Aidant', async () => {
const id = crypto.randomUUID();
await knex(knexfile)
.insert({
id,
type: 'UTILISATEUR_INSCRIT',
donnees: { email: '[email protected]' },
})
.into('utilisateurs_mac');

const aidantTrouve = new EntrepotAidantPostgres(
new ServiceDeChiffrementClair()
).lis(id);

expect(aidantTrouve).rejects.toStrictEqual(
new AggregatNonTrouve('aidant')
);
});

it('Retourne uniquement les Aidants', async () => {
const aidant = unAidant().construis();
const serviceDeChiffrement = new ServiceDeChiffrementClair();
await new EntrepotAidantPostgres(serviceDeChiffrement).persiste(aidant);
await knex(knexfile)
.insert({
id: crypto.randomUUID(),
type: 'UTILISATEUR_INSCRIT',
donnees: { email: '[email protected]' },
})
.into('utilisateurs_mac');

const aidants = await new EntrepotAidantPostgres(
serviceDeChiffrement
).tous();

expect(aidants).toStrictEqual<Aidant[]>([aidant]);
});
});
});

describe('EntrepotAidantExtraction', () => {
Expand Down

0 comments on commit ee2e6ea

Please sign in to comment.