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 horaires pour le même créneau horaire, chacun spécifiant un party_size différent, si par exemple 2, 3 ou 4 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 dont dispose 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 accueillir (une entrée est associée à chaque taille de table). spots_open et spots_total indiquent le nombre de tables pouvant accueillir cette party_size.

Exemple de plan d'étage vide

Imaginons un restaurant dont le plan d'étage est le suivant et qui n'a aucune réservation active:

Figure 1: Plan d'étage sans réservations actives
Figure 1:Plan d'étage sans 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

Le flux de disponibilité d'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 une réservation

Imaginons maintenant qu'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 sont 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 repas avec la prise en charge des tables combinées

Un restaurant peut combiner des tables de différentes manières 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 parties d'une taille donnée. Voici un exemple de combinaison de tables. La manière dont ce calcul est effectué peut varier légèrement d'un flux à l'autre. Vous pouvez spécifier spots_open et spots_total de manière à ce qu'ils correspondent à votre logique métier.

Si un restaurant accepte de combiner des tables pour former un groupe plus important, vous pouvez mettre à jour vos spots_open et spots_total pour le refléter.

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

Figure 3: Plan d'étage sans réservations actives
Figure 3:Plan d'étage sans réservations actives

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 d'étage, une réservation est effectuée pour un groupe de 10 personnes qui combine 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 alors 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