Структурирование данных о доступности для резервирований

Определения параметров

Как указано в определении Availability :

  • party_size : размер вечеринки, который может быть размещен в течение этого временного интервала. Ресторан может быть связан с несколькими слотами одновременно, в каждом из которых указан разный party_size , если, например, при резервировании могут разместиться 2, 3 или 4 человека.
  • spots_open : количество мест, доступных в настоящее время для этой записи о доступности.
  • spots_total : общее количество мест, которые есть у продавца для этой конфигурации (включая те, которые недоступны).

Эти три параметра работают вместе, чтобы создать цифровое представление плана этажа. party_size — это количество человек, которое может вместить каждый стол (для каждого размера стола будет своя запись). spots_open и spots_total — это количество столов, которые могут вместить этот party_size .

Пример пустого плана этажа

Представьте себе ресторан со следующей планировкой и без активных заказов:

Рисунок 1. План этажа без активных бронирований.
Рисунок 1. План этажа без активных бронирований.

Значения party_size , spots_open и spots_total будут следующими:

party_size пятна_открыть пятна_всего
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1

Фид доступности для одного временного интервала у этого продавца будет выглядеть так:

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

Пример плана этажа с бронированием

А теперь представьте, что один из круглых столов забронирован:

Рисунок 2. План этажа с одним активным бронированием.
Рисунок 2. План этажа с одним активным бронированием.

Значения party_size , spots_open и spots_total теперь будут такими:

party_size пятна_открыть пятна_всего
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
          }
        }
      ]
}

Указание доступности столовой с поддержкой комбинированных столов

Есть много способов, которыми ресторан может объединить столы для обслуживания больших групп. Ожидается, что в ваших фидах вы укажете spots_open и spots_total таким образом, чтобы точно отражать, можете ли вы принимать вечеринки заданного размера. Ниже приведен один из примеров того, как можно указать объединение таблиц. Ваши каналы могут несколько отличаться в том, как производится этот расчет, и вы можете указать spots_open и spots_total способом, соответствующим вашей бизнес-логике.

Если ресторан поддерживает объединение столов в большую вечеринку, вы можете обновить spots_open и spots_total чтобы отразить это.

Скажем, в ресторане можно объединить два небольших столика, чтобы вместить группу из 7–10 человек.

Рисунок 3. План этажа без активных бронирований.
Рисунок 3. План этажа без активных бронирований.

В случае отсутствия активных бронирований значения party_size , spots_open и spots_total будут следующими:

party_size пятна_открыть пятна_всего
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1
9 1 1
10 1 1

Теперь, при той же планировке, делается заказ на вечеринку из 10 человек, состоящую из двух небольших столиков.

Рисунок 4. План этажа с одним активным бронированием, охватывающим два стола.
Рисунок 4. План этажа с одним активным бронированием, охватывающим два стола.

Затем значения party_size , spots_open и spots_total теперь будут такими:

party_size пятна_открыть пятна_всего
4 1 3
5 1 3
6 2 4
7 1 1
8 1 1
9 0 1
10 0 1