Description

Afin de rester populaire parmis sa clientèle, le café organise divers évènements de temps-en-temps.

Ces évènements impliquent souvent une méthode de réservation de groupe différentes de l’habitude.

Par exemple, durant les party de Noel il est important de ne pas défaire les groupes.

Vous devez donc permettre la modification de méthode de réservation des sièges de groupe à travers la configuration du café.

Important: La modification de la configuration doit également fermer le café.

Note: Votre application doit supporter un JSON de configuration contenant plus d’élément qu’attendu. Ces éléments doivent être ignorés. Voir la documentation pour apprendre comment le faire en Java.

Méthodes de réservations des groupes

# Group Reservation Method Description
1 Default Les sièges sont réservés en ordre croissant de numéro de siège disponible, peu importe le cube.
2 Full Cubes Les réservations doivent réserver des cubes au complet.
3 No Loners Aucun membre du groupe doit se retrouver seul dans un cube. Il faut au minimum faire des paires.

Mise en situation

Légende: [#=disponible, X=occupé].

Imaginez le layout suivant:

Cube 1: [1, X, X, X]

Cube 2: [X, 6, 7, 8]

Cube 3: [9, X, X, 12]

Cube 4: [13, 14, 15, 16]

Exemple 1: Default

Les sièges réservés sont en ordre croissant de numéro de siège.

Réservation de 4: [1, 6, 7, 8].

Réservation de 6: [1, 6, 7, 8, 9, 12].


Exemple 2: Full Cubes

Les réservations doivent être d’un cube au complet. Il est donc possible de réservé plus de siège que ce qui est demandé par le client.

Réservation de 4:

  • Le seul cube contenant 4 sièges de disponibles est le cube 4.
  • Les sièges réservés sont donc: [13, 14, 15, 16].

Réservation de 6:

  • Pour avoir 6 sièges, il est nécessaire de réserver 2 cubes complets (8 sièges).
  • Puisqu’il n’y a pas deux cubes complets de disponible, la demande de réservation est rejetée.

Exemple 3: No Loners

La base de cet algorithme est simple: “À chaque cube, on réserve tous les sièges de disponibles.”

Cependant, il y a deux restrictions à respecter:

  • On ne doit pas réserver de siège seul dans un cube.
  • S’il nous reste à réserver la quantité de sièges disponibles d’un cube + 1, alors nous réservons un siège de moins dans ce cube afin de laisser une paire de sièges à réserver au prochain cube.

En bref, nous ne voulons pas que des membres du groupe se retrouve seul dans un cube avec des étrangers.

Réservation de 4:

  • Cube 1: Aucun, car il n’y a qu’un siège seul.
  • Cube 2: 3 sièges de disponibles, mais vu que nous avons 4 sièges à réserver (3 + 1), nous ne réservons que 2 des 3 sièges.
  • Cube 3: 2 sièges de disponibles, nous réservons les 2 sièges.

Les sièges réservés sont donc: [6, 7, 9, 12].

Réservation de 6:

  • Cube 1: Aucun, car il n’y a qu’un siège seul.
  • Cube 2: 3 sièges de disponibles, nous réservons les 3 sièges.
  • Cube 3: 2 sièges de disponibles, mais vu que nous avons 3 sièges à réserver (2 + 1), nous ne réservons pas de sièges.
  • Cube 4: 4 sièges de disponibles, nous réservons 3 des 4 sièges.

Les sièges réservés sont donc: [6, 7, 8, 13, 14, 15]


Conditions de succès

# Description
1 Configurer la méthode de réservation des sièges de groupe.
2 Default: Les sièges sont réservés en ordre croissant de numéro de siège disponible, peu importe le cube.
3 Full Cubes: Les réservations doivent réserver des cubes au complet.
4 No Loners: Aucun membre du groupe doit se retrouver seul dans un cube. Il faut au minimum faire des paires.
5 La configuration de réservation des groupes n’est pas modifiée par des configurations invalides.
6 Tout appel à la configuration doit fermer le café.

API

:white_check_mark: Modifier la configuration des groupes

Requête

POST /config

{
  "group_reservation_method": "Default|Full Cubes|No Loners"::string,
  ...
}

Attention: Toutes les configurations doivent être envoyées à chaque appel sans exception, mais toutes options supplémentaires (non reconnues) seront ignorées (voir comment faire en Java avec Jackson).

Réponses

:arrow_right: HTTP 200 Ok

:arrow_right: HTTP 400 Bad Request - Quand la méthode de réservation n’est pas supportée.

{
  "error": "INVALID_GROUP_RESERVATION_METHOD"::string,
  "description": "The group reservation method is not supported."::string
}