Tworzenie struktury danych o dostępności dotyczących Rezerwacji

Definicje parametrów

Zgodnie z definicją Availability:

  • party_size: liczba osób, które mogą obsłużyć w tym czasie. Restauracja może być powiązana z wieloma przedziałami czasu, z których każdy może określać inną właściwość party_size, np. dla 2, 3 lub 4 osób z rezerwacją
  • spots_open: liczba miejsc obecnie dostępnych dla tego wpisu dostępności
  • spots_total: łączna liczba miejsc, które sprzedawca ma w tej konfiguracji (w tym te, które są niedostępne).

Współdziałanie tych 3 parametrów powoduje utworzenie cyfrowej reprezentacji planu piętra. party_size to liczba osób, które może pomieścić każda tabela (dla każdego rozmiaru tabeli dostępny jest wpis). spots_open i spots_total to liczba tabel, które mogą pomieścić ten party_size.

Przykład pustego planu piętra

Wyobraź sobie restaurację o tym planie piętra i braku aktywnych rezerwacji:

Rysunek 1. Plan piętra bez aktywnych rezerwacji
Rysunek 1. Plan piętra bez aktywnych rezerwacji

Wartości party_size, spots_open i spots_total powinny wyglądać tak:

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

Plik danych o dostępności dla jednorazowego przedziału czasu u tego sprzedawcy wyglądałby tak:

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

Przykładowy plan piętra z rezerwacją

A teraz wyobraźmy sobie, że jeden z okrągłych stołów jest zarezerwowany:

Rysunek 2. Plan piętra z jedną aktywną rezerwacją
Rysunek 2. Plan piętra z 1 aktywną rezerwacją

Wartości party_size, spots_open i spots_total będą teraz wynosić:

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

Określanie dostępności posiłków za pomocą obsługi tabel łączonych

Jest wiele sposobów na to, aby restauracja mogła łączyć tabele w celu obsługi większych grup. Pliki danych powinny zawierać właściwości spots_open i spots_total w sposób, który dokładnie określa, czy do przyjęcia są firmy o określonej wielkości. Poniżej przedstawiamy przykład sposobu łączenia tabel. Twoje pliki danych mogą nieco różnić się sposobem obliczania, dlatego możesz określać spots_open i spots_total w sposób zgodny z logiką biznesową.

Jeśli restauracja umożliwia łączenie tabel w celu utworzenia większej liczby uczestników, możesz odpowiednio zaktualizować spots_open i spots_total.

Załóżmy, że w restauracji można połączyć 2 małe stoły, aby pomieścić 7–10 osób.

Rysunek 3. Plan piętra bez aktywnych rezerwacji
Rysunek 3. Plan piętra bez aktywnych rezerwacji

W przypadku braku aktywnych rezerwacji wartości party_size, spots_open i spots_total to:

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

Teraz, przy tym samym planie piętra, tworzona jest rezerwacja dla 10-osobowej grupy, która obejmuje 2 małe stoły.

Rysunek 4. Plan piętra z jedną aktywną rezerwacją obejmującą 2 stoliki
Rysunek 4. Plan piętra z 1 aktywną rezerwacją obejmującą 2 stoliki

Zatem wartości dla party_size, spots_open i spots_total wynoszą teraz:

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