Browse Source

ajout sujet TP2

Pierre Kraemer 5 years ago
parent
commit
cd62f1496e
1 changed files with 51 additions and 0 deletions
  1. 51 0
      TP2.md

+ 51 - 0
TP2.md

@@ -0,0 +1,51 @@
+# 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 :
+```js
+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`.
+```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`.