Description

L’élément le plus important de tout café n’est pas la nourriture, le café ou les chats. C’est le client!

Sans client, il ne peut exister de café!

Il est donc essentiel que notre application permette l’ajout de clients dans le café. Les clients doivent être ajoutés en ordre croissant du numéro des sièges.

Nos clients ont un identifiant unique et un nom.

Les clients se voient refuser l’accès lorsqu’il n’y a plus de siège libre dans le café. Notez que dans les prochaines stories, les clients pourront se voir refuser l’accès pour plusieurs raisons configurables.

Chaque siège ne peut accommoder qu’un seul client à la fois. Lorsqu’un siège est occupé par un client il prend l’état: “Occupied”.

Un même client ne peut pas visiter le café plus d’une fois par période d’ouverture.

À la fermeture du café, tous les sièges sont libérés, c’est-à-dire que les clients sont retirés et les sièges sont remis à libre.

Conditions de succès

# Description
1 L’ajout de client dans le café se fait en ordre croissant du numéro des sièges.
2 Le plan de la salle (layout) permet de situer le siège des clients.
3 Les clients se font refuser l’accès lorsqu’il n’y a plus de siège de disponible dans le café.
4 Chaque siège ne peut avoir qu’un seul client à la fois.
5 Un siège prend l’état “Occupied” lorsqu’il est occupé par un client.
6 Un client se voit refuser l’accès lorsqu’il tente de visiter le café plus d’une fois par période d’ouverture.
7 À la fermeture du café, les clients quittent et les sièges sont mis dans l’état “Available”.

API

:white_check_mark: Ajouter un client

Requête

POST /check-in

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

:warning: Notez que dans une application réelle les ID seraient générés par l’application et non ajoutés en paramètre de l’API. Dans notre cas, c’est pour faciliter nos tests automatisés lors de la correction des projets. Ne vous préoccupez pas du format des identifiants.

Réponses

:arrow_right: HTTP 201 Created

Headers

  Location: /customers/<customerId::string>

:arrow_right: HTTP 400 Bad Request - Quand le client a déjà visité le café cette journée.

{
  "error": "DUPLICATE_CUSTOMER_ID"::string,
  "description": "The customer cannot visit the café multiple times in the same day."::string
} 

:warning: C’est la même exception lorsque le client est présentement dans le café.

:arrow_right: HTTP 400 Bad Request - Quand il n’y a pas de sièges disponibles.

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

:white_check_mark: Afficher les informations d’un client

Requête

GET /customers/{CUSTOMER_ID}

Réponses

:arrow_right: HTTP 200 Ok

{
  "name": "Keanu Reeves"::string,
  "seat_number": 1::int
}

:arrow_right: HTTP 404 Not Found - Quand le client n’existe pas.

{
  "error": "INVALID_CUSTOMER_ID"::string,
  "description": "The customer does not exist."::string
} 

:white_check_mark: Fermeture du café

Requête

POST /close

Réponses

:arrow_right: HTTP 200 Ok

:white_check_mark: MISE-À-JOUR: L’affichage du plan de salle doit maintenant contenir l’identifiant du client par siège.

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
        },
        {
          "number": 2::int,
          "status": "Available"::string,
          "customer_id": null::string
        },
        ...
      ]
    },
    ...
  ]
}