Skip to content

Commit

Permalink
[ADMINISTRATION] Ajoute un service de recherche des comptes utilisateurs
Browse files Browse the repository at this point in the history
  • Loading branch information
bbougon committed Feb 3, 2025
1 parent d0bbf20 commit 23df576
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 0 deletions.
1 change: 1 addition & 0 deletions mon-aide-cyber-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"administration:rapport-demandes-aidants": "ts-node --transpile-only --require dotenv/config src/administration/gestion-demandes/demandes-en-cours/commande.ts",
"administration:recherche-demandes-aidants": "ts-node --transpile-only --require dotenv/config src/administration/gestion-demandes/recherche/commande.ts",
"administration:recherche-aidants": "ts-node --transpile-only --require dotenv/config src/administration/aidants/recherche/commande.ts",
"administration:recherche-utilisateurs": "ts-node --transpile-only --require dotenv/config src/administration/utilisateurs/recherche/commande.ts",
"administration:extraction-aidants": "ts-node --transpile-only --require dotenv/config src/administration/aidants/extraction-aidants/commande.ts",
"administration:recupere-aidants-par-domaine": "ts-node --transpile-only --require dotenv/config src/administration/aidants/par-domaine/commande.ts",
"administration:chiffrement": "ts-node --transpile-only --require dotenv/config src/administration/chiffrement/commande.ts",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import { program } from 'commander';
import { adaptateurServiceChiffrement } from '../../../infrastructure/adaptateurs/adaptateurServiceChiffrement';
import {
DTO,
EntrepotPostgres,
} from '../../../infrastructure/entrepots/postgres/EntrepotPostgres';
import { Aggregat } from '../../../domaine/Aggregat';
import { ServiceDeChiffrement } from '../../../securite/ServiceDeChiffrement';

type CompteUtilisateur = Aggregat & {
nomPrenom: string;
email: string;
};

type CompteUtilisateurDTO = DTO & {
nom_prenom: string;
mail: string;
};

class EntrepotCompteUtilisateur extends EntrepotPostgres<
CompteUtilisateur,
CompteUtilisateurDTO
> {
constructor(private readonly serviceChiffrement: ServiceDeChiffrement) {
super();
}

async tous(): Promise<CompteUtilisateur[]> {
return this.knex
.raw(
`
SELECT id, donnees ->> 'nomPrenom' as nom_prenom, donnees ->> 'identifiantConnexion' as email
FROM utilisateurs
`
)
.then(({ rows }: { rows: CompteUtilisateurDTO[] }) => {
return rows;
})
.then((dtos) => {
return dtos.map((dto) => this.deDTOAEntite(dto));
});
}

protected champsAMettreAJour(_entiteDTO: DTO): Partial<DTO> {
throw new Error('Method not implemented.');
}

protected nomTable(): string {
return 'utilisateurs';
}

protected deEntiteADTO(_entite: Aggregat): CompteUtilisateurDTO {
throw new Error('Method not implemented.');
}

protected deDTOAEntite(dto: CompteUtilisateurDTO): CompteUtilisateur {
return {
identifiant: dto.id,
email: this.serviceChiffrement.dechiffre(dto.mail),
nomPrenom: this.serviceChiffrement.dechiffre(dto.nom_prenom),
};
}
}

program
.description('Recherche les comptes utilisateurs')
.option('-n, --nom <nom>', 'le nom ou partie du nom recherché')
.option('-m, --mail <mail>', 'le mail ou partie du mail recherché')
.action(async (options) => {
console.log('Recherche des aidants en cours');
const utilisateurs = await new EntrepotCompteUtilisateur(
adaptateurServiceChiffrement()
).tous();

const utilisateursTrouves = utilisateurs.filter((utilisateur) => {
if (options.nom) {
return utilisateur.nomPrenom
.toLowerCase()
.trim()
.includes(options.nom.toLowerCase().trim());
}
if (options.mail) {
return utilisateur.email
.toLowerCase()
.trim()
.includes(options.mail.toLowerCase().trim());
}
return true;
});
console.log(
`Il y a %s utilisateur(s) et %s trouvé(s)`,
utilisateurs.length,
utilisateursTrouves.length
);
console.log(JSON.stringify(utilisateursTrouves, undefined, 2));
process.exit(0);
});

program.parse();

0 comments on commit 23df576

Please sign in to comment.