Aller au contenu principal

34-4 Récupérer un projet (findOne())

Pour récupérer un seul résultat, on utilise la fonction findOne() sur l'entité.

src/projets/projets.service.ts
async obtenir(id: number): Promise<Projet | null> {
return Projet.findOne({
where: {
id: id,
},
});
}
info

findOne() est exactement comme find(), mais limite à un seul résultat (LIMIT 1).

Profitez de l'occasion pour faire une obtenir() une fonction asynchrone (async) et préciser le type de retour (Promise<Projet>).

attention

Remarquez le type de retour, Promise<Projet | null>. En effet, findOne retournera null si jamais aucun résultat n'est retourné. Cela nous permettra de retourner facilement une erreur 404 dans ce cas.

Modifier le contrôleur pour attendre le retour

Assurez-vous de modifier votre contrôleur pour qu'il attende le retour du service à l'aide de await.

src/projets/projets.controller.ts
async findOne(@Param('id') id: string) {
const projet = await this.projetsService.obtenir(+id);

if (!projet) throw new NotFoundException();

return projet;
}

Ce qui vous permettra d'exécuter une requête Postman telle que http://localhost:3000/projets/2 et qui exécutera pour vous la requête SQL suivante:

SELECT "Projet"."id" AS "Projet_id", "Projet"."nom" AS "Projet_nom", "Projet"."description" AS "Projet_description", "Projet"."imageUrl" AS "Projet_imageUrl", "Projet"."date_creation" AS "Projet_date_creation", "Projet"."date_modification" AS "Projet_date_modification" FROM "projets" "Projet" WHERE ("Projet"."id" = $1) LIMIT 1 -- PARAMETERS: [2]

Et retournera par le fait même un seul objet correspondant au id demandé.

{
"id": 2,
"nom": "Un projet dans Postgres",
"description": "Premier projet",
"image_url": null,
"date_creation": "2023-10-23T19:10:40.056Z",
"date_modification": "2023-10-23T19:10:40.056Z"
}