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 ajoutées pendant ce créneau horaire. Un restaurant peut être associé à plusieurs emplacements en même temps, chacun spécifiant un party_size différent (par exemple, si deux, trois ou quatre personnes peuvent réserver une table).
  • spots_open: nombre de places actuellement disponibles pour cette entrée de disponibilité
  • spots_total: nombre total de places disponibles dans le marchand pour cette configuration (y compris celles qui ne sont pas disponibles)

Ces trois paramètres fonctionnent ensemble pour créer une représentation numérique du plan d'étage. party_size correspond au nombre de personnes que chaque table peut contenir (il existe une entrée pour chaque taille pouvant être acceptée par une table). spots_open et spots_total correspondent au nombre de tables pouvant accueillir cette party_size.

Exemple de plan d'étage vide

Imaginez un restaurant avec le plan d'étage suivant et aucune réservation active:

Figure 1: Plan d'étage sans réservation active
Figure 1:Plan d'étage sans réservation active

Les valeurs de party_size, spots_open et spots_total seraient:

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

Le flux disponibilité pour un créneau horaire chez ce marchand se présente 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 réservation

Imaginons maintenant que l'une des tables rondes ait é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:

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 restaurants avec prise en charge des tables combinées

Un restaurant peut combiner les tables de nombreuses façons pour prendre en charge des groupes plus importants. Dans vos flux, vous devez spécifier les champs spots_open et spots_total de manière à indiquer précisément si vous pouvez accepter des groupes d'une taille donnée. Voici un exemple de la manière dont vous pouvez spécifier des tableaux combinant des tables. La manière dont ce calcul est effectué peut être légèrement différente dans vos flux, et vous êtes autorisé à spécifier spots_open et spots_total conformément à votre logique métier.

Si un restaurant accepte la combinaison de tables pour former un plus grand groupe, vous pouvez mettre à jour vos valeurs spots_open et spots_total en conséquence.

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

Figure 3: Plan d'étage sans réservation active
Figure 3:Plan d'étage sans réservation active

En l'absence de réservation active, 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

Désormais, avec le même plan d'étage, une réservation est effectuée pour un groupe de 10 personnes tout en combinant deux petites tables.

Figure 4: Plan d'étage avec une réservation active couvrant deux tables
Figure 4:Plan d'étage avec une réservation active couvrant deux tables

Les valeurs de party_size, spots_open et spots_total sont maintenant 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