40-3 Inclure une relation dans le retour
Si vous effectuez une requête pour obtenir des issues, par exemple GET http://localhost:3000/projets/1/issues, vous remarquerez que le détail de l'utilisateur n'est pas inclus dans le retour, seulement responsableId:
//...
{
"id": 12,
"projetId": 1,
"titre": "Issue",
"contenu": "Allo",
"imageUrl": null,
"statut": "Open",
"responsableId": 3,
"date_creation": "2023-11-15T16:29:10.754Z",
"date_modification": "2023-11-15T16:29:10.754Z"
}
]
Pour obtenir le détail des relations, il faut le préciser lors de la requête SQL.
src/issues/issues.service.ts
//...
async findAll(projetId: number) {
return Issue.find({
where: {
projet: {
id: projetId
}
},
relations: ["responsable"]
})
}
Maintenant, la même requête inclura le détail!
//...
{
"id": 12,
"projetId": 1,
"titre": "Issue",
"contenu": "Allo",
"imageUrl": null,
"statut": "Open",
"responsableId": 3,
"date_creation": "2023-11-15T16:29:10.754Z",
"date_modification": "2023-11-15T16:29:10.754Z",
"responsable": {
"id": 3,
"prenom": "Benoit",
"nom": "Tremblay",
"courriel": "benoit.tremblay@cegepdrummond.ca",
"nomUtilisateur": "bentremblay",
"password": "$2b$12$uoQEKZpTzuQe1zMpatkZ5.UWBdgq0W85mH3vPqUMqC.2vWoo6u8vi",
"date_creation": "2023-11-10T04:05:51.926Z",
"date_modification": "2023-11-10T04:05:51.926Z"
}
}
]
Par contre, le mot de passe est retourné dans la réponse! 😱
Pour cela, tout comme lors de l'inscription, on peut utiliser sur l'action du contrôleur le décorateur @UseInterceptors pour que le retour passe dans le mécanisme de sérialisation de classe qui exclut le mot de passe.
src/issues/issues.controller.ts
@Get()
@UseInterceptors(ClassSerializerInterceptor)
findAll(@Param('projetId') projetId: string) {
return this.issuesService.findAll(+projetId);
}
