34-4 Récupérer un projet (findOne())
Pour récupérer un seul résultat, on utilise la fonction findOne() sur l'entité.
async obtenir(id: number): Promise<Projet | null> {
return Projet.findOne({
where: {
id: id,
},
});
}
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>).
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.
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"
}