Structurer les données de disponibilité pour les réservations

Définition des paramètres

Comme indiqué dans la définition de Availability :

  • party_size : nombre de personnes pouvant être incluses dans la réservation de ce créneau. Un restaurant peut être associé à plusieurs créneaux en même temps, chacun spécifiant un party_size différent, si par exemple 2, 3 ou 4 personnes peuvent être assis pour la même réservation.
  • spots_open : nombre de places actuellement disponibles pour cette entrée de disponibilité.
  • spots_total : nombre total d'emplacements dont dispose le marchand pour cette configuration (y compris ceux qui ne sont pas disponibles).

Ces trois paramètres fonctionnent ensemble pour créer une représentation numérique du plan de l'étage. party_size correspond au nombre de personnes que chaque table peut accueillir (il y aura une entrée pour chaque taille de table). spots_open et spots_total indiquent le nombre de tables pouvant accueillir ce party_size.

Exemple de plan d'étage vide

Imaginez un restaurant avec le plan de salle suivant et sans réservation active :

Figure 1 : Plan de salle sans réservations actives
Figure 1 : Plan de l'étage sans réservation active

Les valeurs de party_size, spots_open et spots_total seraient les suivantes :

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1

Le flux de disponibilité pour un créneau horaire chez ce marchand se présenterait comme suit :

JSON

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 4,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

Exemple de plan d'étage avec une réservation

Imaginez maintenant que l'une des tables rondes a été réservée :

Figure 2 : Plan d'étage avec une réservation active
Figure 2 : Plan d'étage avec une réservation active

Les valeurs de party_size, spots_open et spots_total seraient désormais les suivantes :

party_size spots_open spots_total
4 2 3
5 2 3
6 3 4
7 1 1
8 1 1

JSON

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

Spécifier la disponibilité des tables combinées

Il existe de nombreuses façons pour un restaurant de combiner des tables pour accueillir des groupes plus importants. Dans vos flux, vous devez spécifier spots_open et spots_total de manière à refléter précisément si vous pouvez accepter des groupes d'une taille donnée. Vous trouverez ci-dessous un exemple de spécification de la combinaison de tables. La façon dont ce calcul est effectué peut varier légèrement selon vos flux. Vous pouvez spécifier spots_open et spots_total de manière à correspondre à votre logique métier.

Si un restaurant autorise la combinaison de tables pour accueillir un groupe plus important, vous pouvez modifier vos spots_open et spots_total pour refléter cette possibilité.

Imaginons qu'un restaurant puisse combiner deux petites tables pour accueillir un groupe de 7 à 10 personnes.

Figure 3 : Plan de salle sans réservation active
Figure 3 : Plan de salle sans réservation active

En l'absence de réservations actives, les valeurs de party_size, spots_open et spots_total sont les suivantes :

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1
9 1 1
10 1 1

Maintenant, avec le même plan, une réservation est effectuée pour un groupe de 10 personnes qui combine deux petites tables.

Figure 4 : Plan de salle avec une réservation active pour deux tables
Figure 4 : Plan de salle avec une réservation active pour deux tables

Les valeurs de party_size, spots_open et spots_total sont désormais les suivantes :

party_size spots_open spots_total
4 1 3
5 1 3
6 2 4
7 1 1
8 1 1
9 0 1
10 0 1