TP2.md 3.1 KB

Association d'entités

Ajouter la définition d'une nouvelle entité Sequelize MailAddress. Celle-ci contient :

  • un champ address qui est une chaîne de caractère contenant l'adresse mail (faire en sorte que Sequelize vérifie la validité de ce champ)
  • un champ type qui peut prendre une valeur dans la liste suivante : 'home', 'work'

Associer cette nouvelle entité avec l'entité Person de sorte que :

  • MailAddress appartient à Person
  • Person dispose de plusieurs MailAddress

Faire en sorte que les MailAddress d'une Person soient supprimées lors de la suppression de la Person.

Modularisation

Créer un module db.js qui s'occupe de l'initialisation de la connexion à la base de données (création de l'instance sequelize), de la définition des entités, puis qui exporte un objet qui contient les modèles définis :

module.exports = { Person, MailAddress };

Créer deux modules person_ctrl.js et mail_address_ctrl.js qui exportent un objet contenant les middlewares manipulant respectivement les enregistrements des entités Person et MailAddress. Pour avoir accès aux modèles, ces modules vont charger le module db.js.

const db = require('./db');
module.exports = {
	get_all: (req, res, next) => {
		db.Person.findAll()
		.then((people) => { ... })
		.catch((err) => next(err));
	},
	...
};

Le programme principal charge les contrôleurs, puis configure l'ensemble des routes.

Routes

Ajouter au serveur HTTP la gestion des routes suivantes :

  • GET /person/:person_id/mailAddress : renvoie l'ensemble des addresses mail de la personne d'identifiant person_id sous la forme d'un tableau d'objets en JSON
  • POST /person/:person_id/mailAddress : ajoute une nouvelle entité MailAddress en base à la personne d'identifiant person_id à partir des données fournies en JSON
  • GET /person/:person_id/mailAddress/:mail_address_id : renvoie l'adresse mail d'identifiant mail_address_id sous la forme d'un objet en JSON si elle appartient bien à la personne d'identifiant person_id
  • PUT /person/:person_id/mailAddress/:mail_address_id : modifie l'adresse mail d'identifiant mail_address_id à partir des données fournies en JSON si elle appartient bien à la personne d'identifiant person_id
  • DELETE /person/:person_id/mailAddress/:mail_address_id : supprime l'adresse mail d'identifiant mail_address_id si elle appartient bien à la personne d'identifiant person_id

Les fonctions de ce contrôleur agissent toutes sur une entité MailAddress appartenant à une Person dont on connaît l'identifiant. On ajoutera donc tout d'abord dans le contrôleur de Person une fonction qui va charger l'instance de la Person concernée au sein de l'objet représentant la requête courante (req) sous l'identifiant person.

Cette fonction load_by_id sera alors utilisée en tant que premier middleware dans la déclaration de toutes les routes citées ci-dessus. Les fonctions du contrôleur mailAddressCtrl auront donc accès à l'instance de Person concernée dans le champ req.person. On écrira dans ce contrôleur les fonctions get_all, create, get_by_id, update_by_id, delete_by_id.