Description

À chaque conclusion de tour, 10 kilolitres d’eau, 250 salades et 100 hamburgers sont automatiquement ajoutés au garde-manger, grâce à notre abonnement Cook It pour dinosaures.

En tant que propriétaire du parc, je peux effectuer l’action de commander de la nourriture et de l’eau pour mes dinosaures. Ces ressources ne sont pas ajoutées immédiatement au garde-manger, car les actions sont seulement exécutées lors du déroulement du tour.

Chaque ressource périme après un certain nombre de tours et doit être retirée de la section de nourriture fraîche du garde-manger lorsqu’elle est périmée.

Un rapport est retourné afin de savoir combien de burgers, d’eau et de salade sont frais, périmés, consommés.

Afin d’optimiser la distribution des ressources fraîches disponibles, il est IMPORTANT d’utiliser les ressources plus vieilles en priorité.

Ressource Durée avant péremption
Burger 4 tours
Salade 3 tours
Eau 10 tours

:warning: Note: Une durée de péremption de 4 tours implique que la ressource est retirée du garde-manger à la fin du 5e tour (voir exemple plus bas).

Conditions de succès

# Description
1 10 kilolitres d’eau, 250 salades et 100 hamburgers sont ajoutés à chaque conclusion de tour.
2 Les commandes de nourriture contenant une erreur sont entièrement rejetées.
3 La liste des ressources du garde-manger énumère les quantités d’eau, de salade et de burgers.
4 À chaque tour, les commandes de ressources accumulées s’exécutent dans l’ordre qu’ils sont arrivés.
5 À chaque conclusion de tour, les ressources périmées sont enlevées de la section fraîche du garde-manger.
6 Les ressources de la section fraîche du garde-manger sont retirées par ordre de date d’expiration, les plus vieilles d’abord.

Déroulement d’un tour

Super! Nous avons maintenant accès à notre première action: Ajouter des ressources.

Actions possibles
Ajouter des ressources.

:warning: Note: Ces actions sont accumulées et exécutées, en ordre d’arrivée, lors du déroulement du tour.

Voici les deux nouvelles conséquences qui auront lieu à la conclusion de chaque tour:

Conséquences d’un tour (en ordre)
1. Ajouter 10 kilolitres d’eau, 250 salades et 100 hamburgers.
2. Retirer les ressources périmées.

:warning: Note: À partir de maintenant, assurez-vous de respecter l’ordre indiqué dans le tableau des conséquences d’un tour.

API

:white_check_mark: Ajouter des ressources

Requête

POST /resources

{
  "qtyBurger": 0::int,
  "qtySalad": 0::int,
  "qtyWater": 0::int
}

:warning: Note: Si un des champs est manquant, considérez que la quantité ajoutée est “0”. Par exemple, si “qtySalad” n’est pas dans le payload, on n’ajoute aucune salade.

:warning: Note: La quantité d’eau ajoutée est en litres.

Réponses

:arrow_right: HTTP 200 Ok

:arrow_right: HTTP 400 Bad Request Si au moins une des quantités de ressources fournies est négative.

{
  "error": "INVALID_RESOURCE_QUANTITY"::string,
  "description" : "Resource quantities must be positive."::string
} 

:white_check_mark: Connaître la quantité de nos ressources

Requête

GET /resources

Réponses

:arrow_right: HTTP 200 Ok

{
  "fresh": {
    "qtyBurger": 0::int,
    "qtySalad": 0::int,
    "qtyWater": 0::int
  },
  "expired": {
    "qtyBurger": 0::int,
    "qtySalad": 0::int,
    "qtyWater": 0::int
  },  
  "consumed": {
    "qtyBurger": 0::int,
    "qtySalad": 0::int,
    "qtyWater": 0::int
  } 
}

:bulb: Exemple:

  1. POST /resources => Ajout d’un burger
{
  "qtyBurger": 1,
  "qtySalad": 0,
  "qtyWater": 0
}
  1. GET /resources *Le burger n’a pas encore été ajouté puisque le tour ne s’est pas exécuté!
{
  "fresh": {
    "qtyBurger": 0,
    "qtySalad": 0,
    "qtyWater": 0
  },
  "expired": {
    "qtyBurger": 0,
    "qtySalad": 0,
    "qtyWater": 0
  },
  "consumed": {
    "qtyBurger": 0,
    "qtySalad": 0,
    "qtyWater": 0
  }
}
  1. POST /turn - Tour 1 (+101 burgers, +250 salades, +10000 litres d’eau)

  2. GET /resources *Le burger a maintenant été ajouté avec succès! Ainsi, que les ressources automatiques!

{
  "fresh": {
    "qtyBurger": 101,
    "qtySalad": 250,
    "qtyWater": 10000
  },
  "expired": {
    "qtyBurger": 0,
    "qtySalad": 0,
    "qtyWater": 0
  },
  "consumed": {
    "qtyBurger": 0,
    "qtySalad": 0,
    "qtyWater": 0
  }
}
  1. POST /turn - Tour 2 (+100 burgers, +250 salades, +10000 litres d’eau)
  2. POST /turn - Tour 3 (+100 burgers, +250 salades, +10000 litres d’eau)
  3. POST /turn - Tour 4 (+100 burgers, +250 salades, +10000 litres d’eau) (Expiration de 250 salades)
  4. POST /turn - Tour 5 (+100 burgers, +250 salades, +10000 litres d’eau) (Expiration de 101 burgers et 250 salades)
  5. GET /resources => Puisque les burgers et les salades n’ont pas été consommés, ceux qui ont dépassé leur date de péremption entrent dans la catégorie “expiré”.
{
  "fresh": {
    "qtyBurger": 400,
    "qtySalad": 750,
    "qtyWater": 50000
  },
  "expired": {
    "qtyBurger": 101,
    "qtySalad": 500,
    "qtyWater": 0
  },
  "consumed": {
    "qtyBurger": 0,
    "qtySalad": 0,
    "qtyWater": 0
  }
}

Précisions/Changements

  • 15 septembre: Ajout du critère d’acceptation #6.