Aller au contenu principal

35-8 Mise à jour d'une relation

Pour la mise à jour, il y a peu de changements par rapport à une entité normale sans relation.

Fonction update du service

En effet, au niveau du service, simplement faire la mise à jour sur le id demandé est suffisant. Cela est exactement le même principe que lors de la création d'un projet.

src/issues/issues.service.ts
async update(id: number, updateIssueDto: UpdateIssueDto): Promise<Issue> {
const issue = await Issue.findOneOrFail({
where: {
id: id,
},
});

Object.assign(issue, updateIssueDto);
return issue.save();
}
info
  • const issue = await Issue.findOneOrFail: on récupère l'issue demandée
  • Object.assign(issue, updateIssueDto);: on assigne à l'issue récupérée

Fonction update du contrôleur

La fonction de mise à jour du contrôleur n'a qu'à appeler le service, mais peut en premier lieu vérifier que le projet existe.

src/issues/issues.controller.ts
@Patch(':id')
async update(@Param('id') id: string, @Body() updateIssueDto: UpdateIssueDto) {
try {
const issue = await this.issuesService.update(+id, updateIssueDto);
return issue
} catch (error) {
if(error instanceof EntityNotFoundError) {
throw new NotFoundException();
} else {
throw error; // On lance l'erreur "générique" si jamais ce n'est pas un 404.
}
}
}

Test Postman

Vous pouvez tenter d'effectuer une requête Postman sur une issue existante et associée à un projet.

Par exemple, dans mon cas, il est possible de faire une requête de ce genre: PATCH http://localhost:3000/projets/1/issues/6 avec des propriétés modifiées.

info

Dans mon cas, dans ma base de données locale Postgres, j'ai une issue avec un id 6 et associée au projet avec le id 1.