Como estruturar dados de disponibilidade para reservas

Definições de parâmetro

Conforme especificado nos Availability definição:

  • party_size: o número de pessoas que podem ser acomodadas durante esse período. espaço. Um restaurante pode ser associado a vários slots ao mesmo tempo, cada uma especificando um party_size diferente se, por exemplo, 2, 3 ou 4 pessoas pode ser assentado com reserva
  • spots_open: o número de vagas disponíveis no momento. entrada de disponibilidade
  • spots_total: o número total de vagas que o comerciante tem nesta do Terraform (incluindo aquelas que não estão disponíveis)

Esses três parâmetros trabalham juntos para criar uma representação digital do planta baixa. party_size é o número de pessoas que cada mesa pode conter (haverá ser uma entrada para todos os tamanhos que uma tabela pode acomodar). spots_open e spots_total são contagens de quantas tabelas podem acomodar esse party_size.

Exemplo de planta baixa vazia

Imagine um restaurante com a seguinte planta baixa e nenhum ativo reservas:

Figura 1: planta baixa sem reservas ativas
Figura 1:planta baixa sem reservas ativas

Os valores de party_size, spots_open e spots_total seriam:

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

O feed de disponibilidade para um horário nesse comerciante seria assim:

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

Exemplo de planta baixa com reserva

Agora, imagine que uma das mesas redondas estava reservada:

Figura 2: planta baixa com uma reserva ativa
Figura 2: planta baixa com um reserva ativa

Os valores de party_size, spots_open e spots_total agora seriam:

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

Especificar a disponibilidade de refeições com suporte a tabelas combinadas

Há muitas maneiras de um restaurante combinar mesas para acomodar grandes grupos. Nos seus feeds, é esperado que você especifique spots_open e spots_total de maneira que reflita com precisão se você pode aceitar partes de um determinado tamanho. Veja a seguir um exemplo de como especificar a combinação de tabelas. Seus feeds podem variar um pouco no modo como esse cálculo é feito e é aceitável para você especificar spots_open e spots_total de forma que que corresponda à sua lógica de negócios.

Se um restaurante aceita combinar mesas para formar um grupo maior, você pode Atualize spots_open e spots_total para refletir isso.

Digamos que um restaurante possa combinar duas mesas pequenas para acomodar um grupo de 7 a 10 pessoas as pessoas.

Figura 3: planta baixa sem reservas ativas
Figura 3: planta baixa sem reservas ativas

Caso não haja reservas ativas, os valores de party_size, spots_open, e spots_total são:

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

Agora, com a mesma planta baixa, é feita uma reserva para um grupo de 10 pessoas que combina duas tabelas pequenas.

Figura 4: planta baixa com uma reserva ativa abrangendo duas tabelas
Figura 4:planta baixa com uma reserva ativa abrangendo duas tabelas

Em seguida, os valores de party_size, spots_open e spots_total são:

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