Strutturazione dei dati sulla disponibilità per le prenotazioni

Definizioni dei parametri

Come specificato nella definizione Availability:

  • party_size: Il numero di persone che possono essere ospitate durante questo orario. Un ristorante può essere associato a più slot per lo stesso orario, ognuno dei quali specifica un diverso party_size, ad esempio 2, 3 o 4 persone possono sedersi con una prenotazione
  • spots_open: Il numero di posti attualmente disponibili per questa voce di disponibilità
  • spots_total: Il numero totale di posti che il commerciante ha per questa configurazione (inclusi quelli non disponibili)

Questi tre parametri lavorano insieme per creare una rappresentazione digitale della planimetria. party_size è il numero di persone che ogni tavolo può ospitare (ci sarà una voce per ogni dimensione che un tavolo può ospitare). spots_open e spots_total sono conteggi di quante tabelle possono ospitare quel party_size.

Esempio di planimetria vuota

Immagina un ristorante con la seguente planimetria e nessuna prenotazione attiva:

Figura 1: planimetria senza prenotazioni attive
Figura 1: planimetria senza prenotazioni attive

I valori per party_size, spots_open e spots_total sarebbero:

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

Il feed di disponibilità per una fascia oraria presso questo commerciante sarebbe simile al seguente:

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
          }
        }
      ]
}

Esempio di planimetria con una prenotazione

Ora immagina che uno dei tavoli rotondi sia stato prenotato:

Figura 2: planimetria con una prenotazione attiva
Figura 2: planimetria con una prenotazione attiva

I valori per party_size, spots_open e spots_total ora saranno:

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
          }
        }
      ]
}

Specificare la disponibilità di ristoranti con il supporto delle tabelle combinate

Esistono molti modi in cui un ristorante può combinare i tavoli per ospitare gruppi più grandi. Nei feed devi specificare spots_open e spots_total in modo da riflettere con precisione se puoi accettare gruppi di una determinata dimensione. Di seguito è riportato un esempio di come specificare la combinazione delle tabelle. I tuoi feed potrebbero differire leggermente nel modo in cui viene eseguito questo calcolo ed è accettabile specificare spots_open e spots_total in modo da corrispondere alla tua logica di business.

Se un ristorante supporta la combinazione di tavoli per formare un gruppo più grande, puoi aggiornare spots_open e spots_total per riflettere questa modifica.

Supponiamo che un ristorante possa unire due tavoli piccoli per ospitare un gruppo di 7-10 persone.

Figura 3: planimetria senza prenotazioni attive
Figura 3: planimetria senza prenotazioni attive

In caso di nessuna prenotazione attiva, i valori per party_size, spots_open e spots_total sono:

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

Ora, con la stessa planimetria, viene effettuata una prenotazione per un gruppo di 10 persone che combina due tavoli piccoli.

Figura 4: planimetria con una prenotazione attiva che occupa due tavoli
Figura 4: planimetria con una prenotazione attiva che occupa due tavoli

I valori di party_size, spots_open e spots_total sono ora:

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