28-5 Création d'un modèle (entité)
Pour contenir la représentation d'un Projet et de ses différentes propriétés, nous pouvons créer un modèle. Encore une fois, le principe est le même que pour Angular.
La seule différence est qu'ici nous utiliserons une classe plutôt qu'une interface puisque Nest a besoin d'une référence au modèle lors de l'exécution de l'application.
En effet, nous avons vu que les interfaces ne se retrouvent pas dans le JavaScript généré par le compilateur TypeScript. Elles sont utilisées seulement lors de la compilation. Les classes demeurent dans le JavaScript généré et on peut ainsi y faire référence. Cela n'était pas un enjeu pour Angular, et permettait de réduire la taille du JavaScript côté client, mais Nest recommande d'utiliser des classes pour représenter les modèles.
Nous utiliserons cependant le terme Entité, plutôt que modèle. Il s'agit de sémantique, mais généralement:
- Entité: représente un objet provenant de la base de données.
- Modèle: représente un objet du domaine d'affaires de l'application au sens large (pas nécessairement un objet de BD)
Les entités sont des classes simples et on les met dans leur propre dossier, à l'intérieur du dossier du module.
Créer l'entité Projet
Créons premièrement une entité pour représenter un Projet.
- Créez le dossier
entitiessoussrc/projets:src/projets/entities - Ajoutez-y un fichier TypeScript nommé
projet.entity.ts. - Ajoutez les propriétés représentant un projet à l'intérieur de la classe
src/projets/entities/projet.entity.ts
export class Projet {
id: number;
nom: string;
description: string;
image_url?: string;
date_creation: string;
date_modification: string;
}
Modification du service ProjetsService pour utiliser l'entité
Vous pouvez modifier le service afin de préciser le type Projet[] sur la propriété projets.
export class ProjetsService {
private timestamp = new Date().toJSON();
private projets: Projet[] = [
{
id: 1,
nom: 'LAN Party (NestJS API)',
description: 'Organiser le LAN Party',
image_url: 'https://i.imgur.com/Y5nZ4Qe.jpg',
date_creation: this.timestamp,
date_modification: this.timestamp,
},
{
id: 2,
nom: 'Discreddit (NestJS API)',
description: 'Projet de session',
image_url: 'https://i.imgur.com/Y5nZ4Qe.jpg',
date_creation: this.timestamp,
date_modification: this.timestamp,
},
];
//...
Ainsi, nous avons l'assurance que les objets doivent se conformer à la définition de la classe Projet. Cela ne devrait pas rien changer au comportement de l'API.