35-5 Créer une relation
Ensuite, comment lors de la création, associer une issue à un projet?
Cela n'est pas tellement différent d'avant dans un certain sens, mais nous n'avons pas besoin d'une propriété projet ou projetId sur le DTO de création puisque cette information sera communiquée via l'URL.
DTO de création CreateIssueDto avec validations
Cette étape est à effectuer par vous-même! 😁
Complétez le DTO pour la création d'une issue (CreateIssueDto) et ajoutez-y les validations.
Si vous voulez valider un enum (pour le statut), vous pouvez utiliser le décorateur @IsEnum(Statut)
Action create du contrôleur IssuesController
- Récupérer le paramètre
projetIden provenance de l'URLsrc/issues/issues.controller.ts@Post()
create(@Param('projetId') projetId: string,
@Body() createIssueDto: CreateIssueDto) {
return this.issuesService.create(createIssueDto);
} - Passer le paramètre au service
src/issues/issues.controller.ts
@Post()
create(@Param('projetId') projetId: string,
@Body() createIssueDto: CreateIssueDto) {
return this.issuesService.create(+projetId, createIssueDto);
}
Action create du service IssuesService
- Ajouter le paramètre
projetIden entréesrc/issues/issues.service.tscreate(projetId: number, createIssueDto: CreateIssueDto) {
return 'This action adds a new issue';
} - Créer l'issue, en spécifiant
projetIdet en utilisantsavepour sauvegarder.attentionVous devez compléter la fonction par vous-même, je vous donne seulement la façon de faire le lien entre l'issue et le projet via l'attribut
projetId.src/issues/issues.service.tscreate(projetId: number, createIssueDto: CreateIssueDto) {
const issue = Issue.create({
projet_id: projetId,
//... les autres propriétés
});
// à compléter...
}
Test via Postman
Vous devriez avoir un projet de test dans votre base de données, tentez de créer une issue pour ce projet.
Par exemple, dans mon cas, je peux faire une requête:
- Action/URL
POST http://localhost:3000/projets/1/issues - Body
{
"titre": "Commander de la piza",
"contenu": "Toujours une bonne idée",
"statut": "open"
}
Et obtenir comme retour:
{
"id": 6,
"projetId": 3,
"titre": "Commander de la piza",
"contenu": "Toujours une bonne idée",
"image_url": null,
"statut": "open",
"date_creation": "2025-10-30T19:24:47.019Z",
"date_modification": "2025-10-30T19:24:47.019Z"
}
En plus de pouvoir vérifier dans la BD que le tout a été inséré!

INSERT INTO "issues"("projetId", "titre", "contenu", "imageUrl", "statut", "date_creation", "date_modification") VALUES ($1, $2, $3, DEFAULT, $4, DEFAULT, DEFAULT) RETURNING "id", "statut", "date_creation", "date_modification" -- PARAMETERS: [1,"Commander de la piza","Toujours une bonne idée","Open"]