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

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

Как указано в определении 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 spot_open spot_total
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 spot_open spot_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
          }
        }
      ]
}

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

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

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

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

Рисунок 3: План этажа без активных бронирований
Рисунок 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

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

Рисунок 4: План этажа с одним активным бронированием на два стола
Рисунок 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