# SAÉ S4.A02. : Web Backend [TOC] ### Objectif: Savoir réaliser et mettre en place une architecture REST. Cette SAÉ ne met en oeuvre que les compétences REST. ## Base de données La base de données est une base de données relationnelle. Elle est composée de 5 tables: - **`ingredients`** : contient tout les ingrédients qui commposent les pizzas (id, name, price) - **`pizzas`** : contient les pizzas (nom, pate, prixbase) - **`pizzas_ingredients`** : contient les ingrédients qui composent les pizzas (nom, id) nom est le nom de la pizza et id est l'id de l'ingrédient - **`commandes`** : contient les commandes (id, nom, date) - **`commande_detail`** : contient les pizzas commandées (id, nom) id est l'id de la commande et nom est le nom de la pizza commandée ## API Ingredients ### GET /ingredients Renvoie la liste des ingrédients présents dans la base de données ```json [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement ### GET /ingredients/{id} Renvoie l'ingrédient correspondant à l'id passé en paramètre ```json { "id": 1, "name": "pomme de terre", "price": 1 } ``` Status | Description ------------ | ------------- 302 FOUND | La requête s'est effectuée correctement 404 NOT FOUND | L'ingrédient n'existe pas ### GET /ingredients/{id}/name Renvoie le nom de l'ingrédient correspondant à l'id passé en paramètre ```json { "name": "pomme de terre" } ``` Status | Description ------------ | ------------- 302 FOUND | La requête s'est effectuée correctement 404 NOT FOUND | L'ingrédient n'existe pas ### POST /ingredients Ajoute un ingrédient à la base de données avec les informations passées en paramètre au format JSON. Body: ```json { "id": 1, "name": "pomme de terre", "price": 1 } ``` et renvoie l'ingrédient ajouté ```json { "id": 1, "name": "pomme de terre", "price": 1 } ``` Status | Description ------------ | ------------- 201 CREATED | La requête s'est effectuée correctement 409 CONFLICT | L'ingrédient existe déjà 500 INTERNAL SERVER ERROR | Erreur interne ### DELETE /ingredients/{id} Supprime l'ingrédient correspondant à l'id passé en paramètre et ne renvoie rien Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND| L'ingrédient n'existe pas ### PUT /ingredients Modifie l'ingrédient avec les informations passées en paramètre au format JSON. Body: ```json { "id": 1, "name": "truffe", "price": 10 } ``` et renvoie l'ingrédient modifié ```json { "id": 1, "name": "truffe", "price": 10 } ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND |L'ingrédient n'existe pas ### PATCH /ingredients/{id} Modifie l'ingrédient correspondant à l'id passé en paramètre avec les informations passées en paramètre au format JSON. Body: ```json { "price": 5.5 } ``` et renvoie l'ingrédient modifié ```json { "id": 1, "name": "pomme de terre", "price": 5.5 } ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND |L'ingrédient n'existe pas 500 INTERNAL SERVER ERROR | Erreur interne ## API Pizzas ### GET /pizzas Renvoie la liste des pizzas présentes dans la base de données ```json [ { "nom": "4 fromages", "pate": "fine", "prixbase": 10 }, { "nom": "reine", "pate": "fine", "prixbase": 12 } ] ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement ### GET /pizzas/{nom} Renvoie la pizza correspondant au nom passé en paramètre et les ingrédients qui la composent ```json { "nom": "4 fromages", "pate": "fine", "prixbase": 10, "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] } ``` Status | Description ------------ | ------------- 302 FOUND | La requête s'est effectuée correctement 404 NOT FOUND | La pizza n'existe pas ### GET /pizzas/{nom}/prixfinal Renvoie le prix final de la pizza correspondant au nom passé en paramètre ```json { 13 } ``` Status | Description ------------ | ------------- 302 FOUND | La requête s'est effectuée correctement 404 NOT FOUND | La pizza n'existe pas ### POST /pizzas Ajoute une pizza à la base de données avec les informations passées en paramètre au format JSON Body: ```json { "nom": "4 fromages", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, }, { "id": 2, "name": "crème", } ] } ``` et renvoie la pizza ajoutée ```json { "nom": "4 fromages", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] } ``` Status | Description ------------ | ------------- 201 CREATED | La requête s'est effectuée correctement 409 CONFLICT | La pizza existe déjà 500 INTERNAL SERVER ERROR | Erreur interne ### DELETE /pizzas/{nom} Supprime la pizza correspondant au nom passé en paramètre et ne renvoie rien Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La pizza n'existe pas ### DELETE /pizzas/{nom}/{id} Supprime la relation entre la pizza correspondant au nom passé en paramètre et l'ingrédient correspondant à l'id passé en paramètre et ne renvoie rien Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La pizza ou l'ingrédient n'existe pas ### PUT /pizzas/{nom} Modifie la pizza correspondant au nom passé en paramètre avec les informations passées en paramètre au format JSON Body: ```json { "nom": "hawaienne", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, }, { "id": 10, "name": "ananas", }, { "id": 5, "name":" sauce tomate" } ] } ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La pizza n'existe pas 500 INTERNAL SERVER ERROR | Erreur interne ### PATCH /pizzas/{nom} Modifie la pizza correspondant au nom passé en paramètre avec les informations passées en paramètre au format JSON. Body: ```json { "prixbase": 15 } ``` qui modifie le prix de la pizza correspondant au nom passé en paramètre et renvoie la pizza modifiée et renvoie la pizza modifiée ```json { "nom": "4 fromages", "pate": "fine", "prixbase": 15 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] } ``` ou Body: ```json { "ingredients": [ { "id": 1, }, { "id": 10, } ] } ``` qui modifie les ingrédients de la pizza correspondant au nom passé en paramètre et renvoie la pizza modifiée ```json { "nom": "4 fromages", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 10, "name": "ananas", "price": 3 } ] } ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La pizza n'existe pas 500 INTERNAL SERVER ERROR | Erreur interne ## API Commandes ### GET /commandes Renvoie la liste des commandes présentes dans la base de données ```json [ { "id": 1, "nom": "commande1", "date": "2021-03-01" }, { "id": 2, "nom": "commande2", "date": "2021-03-02" } ] ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement ### GET /commandes/{id} Renvoie la commande correspondant à l'id passé en paramètre et les pizzas commandées ```json { "id": 1, "nom": "commande1", "date": "2024-03-01", "pizzas": [ { "nom": "4 fromages", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] }, { "nom": "reine", "pate": "fine", "prixbase": 12 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] } ] } ``` Status | Description ------------ | ------------- 302 FOUND | La requête s'est effectuée correctement 404 NOT FOUND | La commande n'existe pas ### GET /commandes/{id}/prixfinal Renvoie le prix final de la commande correspondant à l'id passé en paramètre ```json { 25 } ``` Status | Description ------------ | ------------- 302 FOUND | La requête s'est effectuée correctement 404 NOT FOUND | La commande n'existe pas ### POST /commandes Ajoute une commande à la base de données avec les informations passées en paramètre au format JSON Body: ```json { "id": 1, "nom": "commande1", "date": "2024-03-01", "pizzas": [ { "nom": "4 fromages", }, { "nom": "reine", } ] } ``` et renvoie la commande ajoutée ```json { "id": 1, "nom": "commande1", "date": "2024-03-01", "pizzas": [ { "nom": "4 fromages", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] }, { "nom": "reine", "pate": "fine", "prixbase": 12 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] } ] } ``` Status | Description ------------ | ------------- 201 CREATED | La requête s'est effectuée correctement 409 CONFLICT | La commande existe déjà 500 INTERNAL SERVER ERROR | Erreur interne ### DELETE /commandes/{id} Supprime la commande correspondant à l'id passé en paramètre et ne renvoie rien Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La commande n'existe pas ### DELETE /commandes/{id}/{nom} Supprime la relation entre la commande correspondant à l'id passé en paramètre et la pizza correspondant au nom passé en paramètre et ne renvoie rien Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La commande ou la pizza n'existe pas ### PUT /commandes/{id} Modifie la commande correspondant à l'id passé en paramètre avec les informations passées en paramètre au format JSON Body: ```json { "id": 1, "nom": "commande1", "date": "2024-03-01", "pizzas": [ { "nom": "4 fromages", }, { "nom": "reine", } ] } ``` et renvoie la commande modifiée ```json { "id": 1, "nom": "commande1", "date": "2024-03-01", "pizzas": [ { "nom": "4 fromages", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] }, { "nom": "reine", "pate": "fine", "prixbase": 12 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] } ] } ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La commande n'existe pas 500 INTERNAL SERVER ERROR | Erreur interne ### PATCH /commandes/{id} Modifie la commande correspondant à l'id passé en paramètre avec les informations passées en paramètre au format JSON Body: ```json { "date": "2024-03-02" "pizzas": [ { "nom": "4 fromages", } ] } ``` et renvoie la commande modifiée ```json { "id": 1, "nom": "commande1", "date": "2024-03-02", "pizzas": [ { "nom": "4 fromages", "pate": "fine", "prixbase": 10 "ingredients": [ { "id": 1, "name": "pomme de terre", "price": 1 }, { "id": 2, "name": "crème", "price": 2 } ] } ] } ``` Status | Description ------------ | ------------- 200 OK | La requête s'est effectuée correctement 404 NOT FOUND | La commande n'existe pas 500 INTERNAL SERVER ERROR | Erreur interne ## Restrictions d'accès La partie restriction d'accès n'est pas implémentée par manque de temps. ## Bruno Bruno est organisé de façon à pouvoir lancer le runnner de l'application sans avoir d'erreur. - Ingredients - ingredientsFail - Pizzas - PizzasFail - Commandes - CommandesFail