Strukturyzowanie danych o dostępności w przypadku rezerwacji

Definicje parametrów

Zgodnie z definicją Availability:

  • party_size: Liczba osób, które można przyjąć w tym przedziale czasu. Restauracja może być powiązana z kilkoma przedziałami czasowymi w tym samym czasie, z których każdy określa inną party_size, jeśli na przykład można zarezerwować stolik dla 2, 3 lub 4 osób.
  • spots_open: liczba miejsc dostępnych obecnie w przypadku tego wpisu o dostępności.
  • spots_total: łączna liczba miejsc, które sprzedawca ma w tej konfiguracji (w tym te, które nie są dostępne).

Te 3 parametry wspólnie tworzą cyfrową reprezentację planu piętra. party_size to liczba osób, które mogą siedzieć przy każdym stole (będzie wpis dla każdego rozmiaru stołu). spots_openspots_total to liczby stolików, przy których może usiąść party_size.

Przykładowy pusty plan piętra

Wyobraź sobie restaurację z tym planem piętra i bez aktywnych rezerwacji:

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

Wartości party_size, spots_openspots_total to:

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 jednego przedziału czasowego 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ą

Wyobraź sobie, że jeden z okrągłych stolików został zarezerwowany:

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

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

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 miejsc w restauracji z obsługą połączonych stolików

Restauracja może łączyć stoliki na wiele sposobów, aby pomieścić większe grupy. W plikach danych musisz określić spots_open i spots_total w sposób, który dokładnie odzwierciedla, czy możesz przyjąć grupy o danym rozmiarze. Poniżej znajdziesz przykład sposobu łączenia tabel. Sposób obliczania tych wartości może się nieco różnić w zależności od pliku danych. Możesz określić wartości spots_openspots_total w sposób zgodny z logiką biznesową.

Jeśli restauracja umożliwia łączenie stolików w większe grupy, możesz zaktualizować spots_openspots_total, aby to odzwierciedlić.

Załóżmy, że restauracja może połączyć 2 małe stoliki, aby pomieścić grupę 7–10 osób.

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

Jeśli nie ma aktywnych rezerwacji, wartości party_size, spots_open i spots_total są następujące:

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, rezerwacja jest dokonywana dla grupy 10-osobowej, która łączy dwa małe stoliki.

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

Wartości party_size, spots_open i spots_total to 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