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.

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 le quantity, 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, le totalPrice 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.