Структура данных о наличии мест для бронирования

Для успешного отображения ваших слотов в процессе бронирования необходимо предоставить точную и актуальную карту вашего инвентаря. Количество свободных мест может значительно меняться после одного бронирования из-за особенностей заведения, возможности объединения столиков или размера группы. Примеры в этом документе помогут вам правильно отслеживать и отображать доступный инвентарь.

Ниже приведены параметры, указанные в Availability definition :

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

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

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

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

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

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

Ниже приведены значения party_size , spots_open и spots_total :

party_size spot_open spot_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1

Лента доступности для одного временного интервала у этого продавца выглядит следующим образом:

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

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

Ресторан, в котором один из круглых столиков был забронирован заранее, выглядит следующим образом:

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

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

Ниже приведены значения party_size , spots_open и spots_total :

party_size spot_open spot_total
4 2 3
5 2 3
6 3 4
7 1 1
8 1 1

Лента доступности для одного временного интервала у этого продавца выглядит следующим образом:

{
  "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 человек:

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

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

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

party_size spot_open spot_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1
9 1 1
10 1 1

Теперь, при той же планировке зала, можно забронировать столик для вечеринки из десяти человек, объединив его за двумя небольшими столиками.

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

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

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

party_size spot_open spot_total
4 1 3
5 1 3
6 2 4
7 1 1
8 1 1
9 0 1
10 0 1