GLI - Gérer les ingrédients
En tant que propriétaire du restaurant, je peux gérer les quantités d’ingrédients pour effectuer les commandes par la suite.
Il faut donc créer un rapport qui indique quoi commander pour que les chefs puissent mettre la main à la pâte. Le menu est défini par les restrictions alimentaires des clients et demandent de commander certains ingrédients via un fournisseur.
Menu ★★★★★
Restriction / Repas | Entrée | Plat principal | Dessert | Boisson |
---|---|---|---|---|
Aucune | 5kg Pork loin & 8kg Carrots |
10kg Pepperoni |
5kg Roast beef |
100ml Water |
Végétarienne | 5kg Pumpkin & 8kg Chocolate |
10kg Tuna |
5kg Mozzarella |
100ml Water |
Végétalienne | 5kg Tomato & 8kg Kiwi |
10kg Kimchi |
5kg Worcestershire sauce |
100ml Water |
Allergie | 5kg Marmalade & 8kg Plantain |
10kg Tofu |
5kg Bacon |
100ml Water |
Maladie | 2kg Scallops & 4kg Butternut squash |
5kg Kiwi |
2kg Pepperoni |
100ml Water |
Prix par kg
Ceux-ci sont disponibles via un API externe. Ils sont tous indiqués en CAD$.
Conditions de succès
Condition | Description |
---|---|
GLI 1 | Les ingrédients sont calculés dès que quelqu’un complète sa réservation. |
GLI 2 | Les prix et les quantités sont retournés pour chaque journée si le paramètre unit est passé pour le type. |
GLI 3 | Les prix et les quantités sont retournés pour le total de la période si le paramètre total est passé pour le type. |
GLI 4 | Les informations retournées considèrent toujours la période donnée par startDate et endDate . Les deux dates sont inclusives. |
API
Requête
GET /reports/ingredients?startDate=2020-07-21&endDate=2020-07-23&type=total|unit
Réponses
Le totalPrice
indique le prix total.
- Dans le cas d’un ingrédient précis à 2$, si on en achète deux (2), le
totalPrice
est de 4$ et lequantity
, 2. - Dans le cas d’une date, le prix total est la somme de tous les coûts totaux des ingrédients.
- Dans le cas de
&type=total
, letotalPrice
précis de cette réponse est la somme de tous les prix d’ingrédients.
Avec &type=unit
HTTP 200 OK
{
"dates": [
{
"date": "2020-07-20",
"ingredients": [
{
"name": "Carrots",
"totalPrice": 3.00::long,
"quantity": 3.00::long
}
],
"totalPrice": 3.00::long,
},
{
"date": "2020-07-21",
"ingredients": [
{
"name": "Pork loin",
"totalPrice": 5.00::long,
"quantity": 2.00::long
}
],
"totalPrice": 5.00::long
}
]
}
Avec &type=total
Ici, le coût total
HTTP 200 OK
{
"ingredients": [
{
"name": "Tuna",
"totalPrice": 5.00::long,
"quantity": 2.00::long
},
{
"name": "Pork loin",
"totalPrice": 3.00::long,
"quantity": 3.00::long
}
],
"totalPrice": 8.00::long
}
Autre exmeple &type=total
Plusieurs réservations au long
HTTP 200 OK
{
"ingredients": [
{
"name": "Tuna",
"totalPrice": 5.00::long,
"quantity": 18.00::long
},
{
"name": "Pork loin",
"totalPrice": 3.00::long,
"quantity": 3.00::long,
},
{
"name": "Kimchi",
"totalPrice": 19.00::long,
"quantity": 3.00::long,
}
],
"totalPrice": 27.00::long
}
Erreurs
HTTP 400 Bad Request
Si une des deux dates (début ou fin) est à l’extérieur de la période du Hoppening. Aussi, si la endDate
est avant la startDate
. Aussi, si une des deux dates est manquante.
{
"error": "INVALID_DATE"::string,
"description" : "Dates should be between July 20 2150 and July 30 2150 and must be specified."::string
}
HTTP 400 Bad request
Pour le type
qui est invalide ou manquant.
{
"error": "INVALID_TYPE"::string,
"description": "Type must be either total or unit and must be specified."::string
}
Précisions
L’API est fourni dans le projet (voir le README du projet de départ pour les instructions du Swagger). Tous les prix retournés par l’API externe sont unitaires. Pour le poids, l’unité est le kg. Pour les liquides, l’unité est en litre. Donc, si par exemple, l’API dit que le prix des scallops
est de 50$, et qu’il en faut 2kg, on doit avoir un coût total de 100$.
Notez que le jeu de données pourrait être différent lors de la correction. Le menu doit donc être facilement modifiable.
Ceux-ci sont disponibles via un API externe. Ils sont tous indiqués en CAD$.
05-10-2020 Les prix ne doivent pas être arrondis.