Description

Désormais, en plus de pouvoir boire leur café seuls, les clients auront également l’option de faire partie d’un groupe.

La réservation d’un groupe nécessite deux informations: un nom de groupe unique pour la journée et la quantité de clients attendue pour ce groupe (2 minimum).

Les sièges sont mis dans l’état “Reserved” au moment de la réservation. S’il n’y a pas suffisamment de sièges disponibles alors la réservation est rejetée.

À l’arrivée d’un client membre d’un groupe, il se voit assigner le premier siège réservé au groupe de disponible, selon l’ordre croissant de numéro de siège.

Les clients d’un groupe n’ayant plus de siège réservé se verront l’accès refusé. Par exemple, si le groupe a réservé 4 sièges et qu’un 5ième client se présente disant faire partie du groupe, il se fera refuser l’accès, même s’il y a des sièges non-réservés de disponibles.

Dans le cas inverse, il se peut que certains sièges réservés ne soient jamais utilisés.

Tous les sièges réservés sont mis dans l’état “Available” et tous les clients sont jetés dehors à la fermeture du café.

Réservation des sièges

La réservation des sièges d’un groupe sera prochainement configurable. Mais, pour l’instant, nous allons garder ça simple.

La réservation se fait en ordre croissant de numéro de siège. La seule chose qui importe est donc que le siège soit disponible.

Par exemple, dans la réservation de 4 sièges et que les sièges 1, 3 et 6 son déjà occupés, alors nous allons réserver les sièges 2, 4, 5 et 7 au nom du groupe.

Conditions de succès

# Description
1 Il est possible de créer une réservation de groupe d’au moins deux personnes.
2 Tous les groupes ont une quantité de client et un nom unique pour la journée.
3 Les clients peuvent faire partie d’aucun ou d’un seul groupe.
4 Les sièges doivent être réservés lors de la réservation d’un nouveau groupe.
5 La réservation est rejetée, s’il n’y a pas suffisamment de sièges pour accomoder le nombre de sièges demandés.
6 Les clients d’un groupe qui n’existe pas sont refusés.
7 S’il y a plus de clients d’un groupe que le nombre précisé lors de la réservation, les clients supplémentaires sont refusés.
8 Tous les sièges réservés sont libérés à la fermeture du café.
9 Les clients d’un groupe sont placés selon l’ordre croissant de numéro des sièges réservés au groupe.
10 La réservation se fait en ordre croissant de numéro de siège.

API

:white_check_mark: Réserver les sièges d’un groupe

Requête

POST /reservations

{
  "group_name": "Bulletproof Boy Scouts"::string,
  "group_size": 4::int
}

Réponses

:arrow_right: HTTP 200 OK

:arrow_right: HTTP 400 Bad Request - Lorsque la quantité de sièges à réserver est inférieure à 2.

{
  "error": "INVALID_GROUP_SIZE"::string,
  "description": "Groups must reserve at least two seats."::string
} 

:arrow_right: HTTP 400 Bad Request - Lorsque le nom du groupe n’est pas unique pour la journée.

{
  "error": "DUPLICATE_GROUP_NAME"::string,
  "description": "The specified group already made a reservation today."::string
} 

:arrow_right: HTTP 400 Bad Request - Lorsqu’il n’y a pas assez de sièges pour combler la réservation.

{
  "error": "INSUFFICIENT_SEATS"::string,
  "description": "There are currently no available seats. Please come back later."::string
}

:white_check_mark: Voir les réservations de groupe pour la journée

Requête

GET /reservations

Réponses

:arrow_right: HTTP 200 OK

[
  {
    "group_name": "Bulletproof Boy Scouts"::string,
    "group_size": 4::int
  },
  {
    "group_name": "Love Birds"::string,
    "group_size": 2::int
  }
]

Note: Un array vide est retourné si aucune réservation n’a été effectuée cette journée.

:white_check_mark: MISE-À-JOUR: L’ajout de client permet maintenant de préciser le nom d’un groupe

Requête

POST /check-in

Exemple d’un client dans un groupe

{
  "customer_id": "abd4bced-4fce-44a0-aa41-c41c5777e679"::string,
  "customer_name": "Keanu Reeves"::string,
  "group_name": "Math-Tricks"::string
}

Exemple d’un client sans groupe

{
  "customer_id": "abd4bced-4fce-44a0-aa41-c41c5777e679"::string,
  "customer_name": "Forever Alone"::string,
  "group_name": null::string
}

Réponses

Voici les réponses additionnelles à la story CLIENT:

:arrow_right: NOUVEAU: HTTP 400 Bad Request - Quand le groupe spécifié n’a pas fait de réservation cette journée.

{
  "error": "NO_RESERVATIONS_FOUND"::string,
  "description": "No reservations were made today for that group."::string
} 

:arrow_right: NOUVEAU: HTTP 400 Bad Request - Quand il n’y a pas de sièges réservés disponibles au nom du groupe.

{
  "error": "NO_GROUP_SEATS"::string,
  "description": "There are no more seats reserved for that group."::string
}

:white_check_mark: MISE-À-JOUR: L’affichage des informations d’un client doit contenir son groupe

Requête

GET /customers/{CUSTOMER_ID}

Réponses

:arrow_right: HTTP 200 Ok

{
  "name": "Keanu Reeves"::string,
  "seat_number": 1::int,
  "group_name": "Rise Against the Machine"::string
}

Note: Le nom de groupe est null si le client fait partie d’aucun groupe.

:white_check_mark: MISE-À-JOUR: L’affichage du plan de salle doit maintenant contenir l’identifiant de groupe des sièges réservés.

Requête

GET /layout

Réponses

:arrow_right: HTTP 200 Ok

{
  "name": "Les 4-Fées"::string,
  "cubes": [
    {
      "name": "Bloom"::string,
      "seats": [
        {
          "number": 1::int,
          "status": "Occupied"::string,
          "customer_id": "abd4bced-4fce-44a0-aa41-c41c5777e679"::string,
          "group_name": "Live, love, laugh"::string
        },
        {
          "number": 2::int,
          "status": "Reserved"::string,
          "customer_id": null::string,
          "group_name": "Live, love, laugh"::string
        },
        {
          "number": 3::int,
          "status": "Available"::string,
          "customer_id": null::string,
          "group_name": null::string
        },
        ...
      ]
    },
    ...
  ]
}