# Introduction

On va écrire une application Node.js qui expose des routes HTTP qui vont permettre gérer des entités stockées en base de données.

En premier lieu, initialiser un nouveau fichier `package.json` grâce à la commande `npm init`.

Installer les dépendances (et enregistrer l'information dans le package.json au passage) :
```sh
npm install --save express body-parser sequelize mysql2
```

`express` permet de créer un serveur HTTP, `body-parser` de récupérer les données transmises par le client avec une requête et `sequelize` est la bibliothèque qui va nous servir à gérer le lien avec la BDD. C'est ce qu'on appelle un ORM (Object Relational Mapper). Sa documentation est accessible à l'adresse : https://sequelize.org/v5/
Vous pouvez notamment commencer par consulter la section [Getting started](https://sequelize.org/v5/manual/getting-started.html).

# Exercices

- Créer une base de données "W4a"

- Ecrire une application Node.js qui :
    - crée un objet `sequelize` connecté à votre base "W4a"
    - définit une entité Sequelize (modèle) `Person` ayant des champs `firstname` et `lastname`
    - synchronise la base avec l'entité définie
    - crée un serveur HTTP `express`
    - enregistre les routes HTTP suivantes :
        - `GET /person` : renvoie l'ensemble des personnes sous la forme d'un tableau d'objets en JSON
        - `POST /person` : ajoute une nouvelle entité `Person` en base à partir des données fournies avec la requête en JSON
        - `GET /person/:person_id` : renvoie la personne d'identifiant `person_id` sous la forme d'un objet en JSON
        - `PUT /person/:person_id` : modifie la personne d'identifiant `person_id` à partir des données fournies en JSON
        - `DELETE /person/:person_id` : supprime la personne d'identifiant `person_id`
    - ajoute un middleware de gestion d'erreur qui reçoit un objet contenant le statut et le texte de la réponse d'erreur à renvoyer
	- lance l'écoute du serveur HTTP sur un port choisi

L'ensemble des fonctions qui font appel à l'entité Sequelize `Person` et dont l'appel sera associé aux différentes routes enregistrées seront définies au sein d'un objet `personCtrl`.
On écrira les fonctions `get_all, create, get_by_id, update_by_id, delete_by_id`.

L'ensemble de ces routes seront testées grâce à l'outil Postman.
