Vous êtes sur la page 1sur 7

EXAMEN

Semestre : 1 2
Session : Principale Rattrapage

Module : Java Scripte côté serveur


Enseignant(s) : Equipe mobile
Classe(s) : 2CINFO3
Documents autorisés : OUI NON Nombre de pages : 7
Calculatrice autorisée : OUI NON Internet autorisée : OUI NON

Date : 13/01/2024 Heure : 14H00 Durée : 01h30

* La validation tient compte seulement de l’exécutable de l’application. Elle se fera via une collection
Postman apportée par le validateur sur clé USB lors de la validation.
* Il faut respecter l’utilisation des noms (attributs, classes, routes, etc.) utilisés dans l’énoncé.
* Vous n’êtes pas demandé de faire un « build » ou un « run » au fichier Dockerfile et docker-
compose.
* L’application Node.js doit être en ECMAScript (pas CommonJS, sinon -2 de la note finale) et tourner
sur le port 9090.

Pour faciliter la réservation des évènements vous allez cree un backend comme suite :

Travail demandé
Soit le diagramme de classes suivant :

Partie 1 (3 pts)

1
1. Initialisez votre projet Node.js et configurer nodemon.
2. Créez la structure suivante :(0.5pt)

3. Configurez la connexion à la base de données nommée « bookingtn» dans le fichier


« server.js ». (1pt)
4. Implémentez les classes du diagramme de classes comme étant des modèles
« mongoose ».(1.5pt)

Partie 2 (2,5 pts)


1. Utilisez les middlewares suivants dans votre application :
● « morgan » avec l’option « dev ».
● Parsing JSON du corps de la requête.
● « Cors »
2. Créez un middleware personnalisé qui permet de retourner le code 404 et un JSON avec
la clé « message » et comme valeur « Not Found » lorsque l’utilisateur fait appel à une
route qui n’existe pas ou s’il n’utilise pas la méthode HTTP correcte sur une route
existante.
3. Créez un middleware personnalisé qui permet à l’organisation d’ajouter son logo qui peut
être sous la forme pnj et jpg.

2
Partie 3 (9,5 pts)
Implémentez les routes suivantes :

Description : Permet d’ajouter un utilisateur


Méthode HTTP : POST URL : /user
Contraintes : - La longueur de la chaine de caractères de l’attributs
« username» doit être comprise entre 5 et 50.
- La longueur de la chaine de caractères de l’attributs
« password» doit être comprise entre 6 et 16.
- L’attribut « phonenumber» doit être composé de 8 chiffres.
Exemple de corps la de
requête :

Exemple de réponse de
la requête (succès) :

Code de retour en cas 201 Code(s) de retour en - 400 : si au moins l’une des
de succès : cas de non-succès : contraintes n’est pas respecté.
- 500 : problème au niveau du
serveur.

Description : Permet de récupérer la liste des utilisateurs


Méthode HTTP : GET URL : /user
Contraintes : Aucune contrainte.
Exemple de corps la de Aucun corps.
requête :
Exemple de réponse de
la requête (succès) :

Code de retour en cas 200 Code(s) de retour en - 500 : problème au niveau du


de succès : cas de non-succès : serveur.

3
Description : Permet de récupérer un utilisateur à l’aide de son username
Méthode HTTP : GET URL : /user/:username
Contraintes : Aucune contrainte.
Exemple de corps la de Aucun corps.
requête :
Exemple de réponse de
la requête (succès) :

Code de retour en cas 200 Code(s) de retour en - 500 : problème au niveau du


de succès : cas de non-succès : serveur.

Description : Permet d’ajouter un évènement


Méthode HTTP : POST URL : /event
Contraintes : - La longueur de la chaine de caractères de l’attributs
« eventname» doit être comprise entre 5 et 50.
- La longueur de la chaine de caractères de l’attributs « date» doit
être au minimum de 10 .
- L’attribut « numberDePersonne» doit être un nombre .
Exemple de corps la de
requête :

Exemple de réponse de
la requête (succès) :

Code de retour en cas 200 Code(s) de retour en - 400 : si au moins l’une des
de succès : cas de non-succès : contraintes n’est pas respecté.
- 500 : problème au niveau du
serveur.

4
Description : Permet de récupérer les évènements selon leurs date
Méthode HTTP : GET URL : /event/ :date
Contraintes : Aucune contrainte.
Exemple de corps la de Aucun corps.
requête :
Exemple de réponse de
la requête (succès) :

Code de retour en cas 200 Code(s) de retour - 500 : problème au niveau du


de succès : en cas de non- serveur.
succès :

Description : Permet d’ajouter un ticket


Méthode HTTP : POST URL : / ticket
Contraintes : - L’attributs « complet» a comme valeur par défaut false
Exemple de corps la de
requête :

Exemple de réponse de
la requête (succès) :

Code de retour en cas 201 Code(s) de retour en - 400 : si au moins l’une des
de succès : cas de non-succès : contraintes n’est pas respecté.
- 500 : problème au niveau du
serveur.

5
Description : Permet de récupérer un ticket par l’id de l’utilisateur
Méthode HTTP : GET URL : / ticket/userId
Contraintes : Aucune contrainte.
Exemple de corps la de Aucun corps.
requête :
Exemple de réponse de
la requête (succès) :

Code de retour en cas 200 Code(s) de retour en - 500 : problème au niveau du


de succès : cas de non-succès : serveur.

Description : Permet de récupérer un menu à l’aide de son id


Méthode HTTP : PATCH URL : / ticket
Contraintes : Aucune contrainte.
Exemple de corps la de
requête :

Exemple de réponse de
la requête (succès) :

Code de retour en cas 200 Code(s) de retour - 500 : problème au niveau du


de succès : en cas de non- serveur.
succès :

6
Partie 4 (5 pts)
Afin de déployer notre application sur un serveur, nous avons besoin de conteneurisé la
solution. Pour ceci, on se propose de créer deux services interconnectés, le premier conteneur
est celui de la base de données MongoDB et le deuxième celui de l’application Node.js.
Pour ce faire, vous allez créer un Dockerfile ainsi qu’un docker-compose avec les spécifications
suivantes :

Docker File (1,5 pts)


- Le mainteneur est booking avec l’adresse email : «booking@booking.tn.com ».
- Le mode de déploiement de Node.js est le mode production.
- Le code source du projet dans être mis sous le dossier « /home/booking ».
- Exposer le port 9090.

Docker-compose (3,5 pts)


Contient deux services :
1. bookingAPI :
● Le nom de l’image est « bookingapp».
● Le TAG de l’image est « 1 ».
● La variable d’environnement « NODE_ENV » est configurer à « production ».
● Le port de ce service est « 6060 ».
● Connecté à l’interface réseau appelé « booking ».
● Dépond du service « databt ».

2. databt :
● Un conteneur à partir de l’image « mongo » avec le tag « 5 ».
● Le port de ce service est « 27018 ».
● Connecté à l’interface réseau appelé « booking ».
● Connecté à un volume appelé « db ».

Bonne chance

Vous aimerez peut-être aussi