การจัดโครงสร้างข้อมูลเวลาว่างสำหรับการจอง

คำจำกัดความของพารามิเตอร์

ตามที่ระบุไว้ในคําจํากัดความของ Availability

  • party_size: จำนวนคนที่รองรับในช่วงเวลาที่ระบุ ร้านอาหารจะเชื่อมโยงกับสล็อตหลายที่พร้อมกันได้ แต่ละช่องจะระบุ party_size ที่แตกต่างกัน ในกรณีที่จองโต๊ะโดยมีผู้ใช้ 2, 3 หรือ 4 คนได้
  • spots_open: จำนวนห้องว่างที่พร้อมให้บริการในขณะนี้สำหรับรายการความพร้อมให้บริการนี้
  • spots_total: จำนวนสปอตทั้งหมดที่ผู้ขายมีสำหรับการกำหนดค่านี้ (รวมถึงสปอตที่ใช้งานไม่ได้)

พารามิเตอร์ทั้ง 3 ตัวนี้จะทำงานร่วมกันเพื่อสร้างการนำเสนอแบบดิจิทัลของแปลนอาคาร party_size คือจำนวนคนที่แต่ละตารางรองรับได้ (จะมีรายการสำหรับทุกขนาดที่ตารางรองรับได้) spots_open และ spots_total คือจำนวนตารางที่รองรับ party_size นั้นได้

ตัวอย่างแปลนอาคารที่ว่างเปล่า

สมมติว่าร้านอาหารที่มีแปลนอาคารต่อไปนี้และไม่มีการจองที่ใช้งานอยู่

รูปที่ 1: แปลนอาคารที่ไม่มีการจองที่ใช้งานอยู่
รูปที่ 1: แปลนอาคารที่ไม่มีการจองที่ใช้งานอยู่

ค่าสำหรับ party_size, spots_open และ spots_total จะเป็น:

party_size spots_open spots_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: แปลนอาคารที่มีการจองที่ใช้งานอยู่ 1 รายการ
รูปที่ 2: แปลนอาคารที่มีการจองที่ใช้งานอยู่ 1 รายการ

ตอนนี้ค่าของ party_size, spots_open และ spots_total จะเป็น:

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

การระบุความพร้อมให้บริการของอาหารด้วยการรองรับโต๊ะแบบรวม

มีหลายวิธีที่ร้านอาหารจะใช้โต๊ะต่างๆ ร่วมกันเพื่อรองรับผู้คนที่นั่งจำนวนมากขึ้นได้ คุณคาดหวังให้ฟีดระบุ spots_open และ spots_total ในลักษณะที่แสดงให้เห็นว่าคุณจะรับกลุ่มตามขนาดที่ระบุได้หรือไม่ ต่อไปนี้เป็นตัวอย่างหนึ่งที่คุณสามารถระบุตารางรวมได้ ฟีดอาจแตกต่างไปบ้างในวิธีการคำนวณนี้ และคุณสามารถระบุ spots_open และ spots_total ในแบบที่ตรงกับตรรกะทางธุรกิจได้

หากร้านอาหารรองรับโต๊ะรวมเพื่อจัดปาร์ตี้ขนาดใหญ่ คุณสามารถอัปเดต spots_open และ spots_total เพื่อให้สอดคล้องกับความต้องการนี้

สมมติว่าร้านอาหารสามารถรวมโต๊ะเล็กๆ 2 โต๊ะเข้าด้วยกัน ซึ่งรองรับแขกได้ถึง 7-10 คน

รูปที่ 3: แปลนอาคารที่ไม่มีการจองที่ใช้งานอยู่
รูปที่ 3: แปลนอาคารที่ไม่มีการจองที่ใช้งานอยู่

ในกรณีที่ไม่มีการจองที่ใช้งานอยู่ ค่าของ party_size spots_open และ spots_total จะเป็นดังนี้

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

แต่ในตอนนี้ เมื่อใช้แปลนอาคารเดียวกัน ระบบจะทำการจองสำหรับจำนวนคน 10 คนที่รวมโต๊ะขนาดเล็ก 2 โต๊ะเข้าด้วยกัน

รูปที่ 4: แปลนอาคารที่มีการจองที่ใช้งานอยู่ 1 รายการที่ครอบคลุม 2 ตาราง
รูปที่ 4: แปลนอาคารที่มีการจองที่ใช้งานอยู่ 1 รายการที่ครอบคลุม 2 ตาราง

จากนั้นค่าของ party_size, spots_open และ spots_total จะเป็นดังนี้

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