อัปเดตล่าสุด: 2026-08-08
nawin-resort-khaokho (ref espxwmnaoauhsdgckwpr, ap-southeast-1) — แยกขาดจาก nawin-hotel-management สมบูรณ์units, guests, guest_documents, bookings, booking_status_history, payments, notifications_log, profiles, audit_log, line_webhook_eventsprofiles, ตาราง units อ่านสาธารณะได้ (สำหรับ guest-app)btree_gist บน unit_id + ช่วงวันที่) — ทดสอบผ่านcheck_availability(unit_id, checkin, checkout) RPC — SECURITY DEFINER, grant ให้ anon/authenticatednotify_booking_confirmed (ยิง LINE push อัตโนมัติเมื่อ booking confirmed) + log_booking_status_change (log ทุกการเปลี่ยนสถานะ)guest-api, line-webhook, line-notify (ทดสอบ auth guard ผ่าน: ไม่มี idToken → 400, signature ผิด → 401, internal secret ผิด → 401)guest-app/ ครบ 3 หน้า: index.html (LIFF login), booking.html (เลือกยูนิต+วันที่+จอง), my-bookings.html (ดู/ยกเลิกการจอง)staff-app/ ใหม่ — index.html (LIFF login + เช็คว่าผูกบัญชีหรือยัง), booking.html (พนักงานคีย์จองแทนลูกค้า พร้อมราคาอัตโนมัติ+ปรับได้) — ใช้ edge function staff-api แยกจาก guest-apidashboard/ ครบ 4 หน้า: index.html (login), bookings.html (ปฏิทินรายเดือน + รายการจอง + ค้นหา + filter “จองโดย”), new-booking.html (walk-in, ราคาปรับได้), units.html (owner เท่านั้น — แก้ไขยูนิต, KPI รายได้/occupancy, สรุปคอมมิชชั่นรายพนักงาน, ผูกบัญชี LINE พนักงาน)owner (เห็นทุกอย่าง) / manager / staff (เห็นแค่การจอง+เพิ่มการจอง ไม่เห็นยูนิต/รายงาน)created_by อัตโนมัติ ใช้คิดคอมมิชชั่นได้khaokho.nawingroup.com ตั้งค่าแล้ว (DNS ชี้แล้ว รอ GitHub ออก SSL cert)@428gpjds, secrets ทั้งหมดอยู่ใน Supabase Vault แล้ว, LIFF ID ใส่ใน config.js ทั้ง 2 แอปแล้วkhaokho.nawingroup.com — DNS record เพิ่มที่ Squarespace (ผ่าน Google Workspace) แล้ว, GitHub Pages ตั้ง custom domain แล้ว — เหลือแค่รอ GitHub ออก SSL certificate เองอัตโนมัติ (มักไม่เกิน 1 ชม. หลัง DNS ตั้งเสร็จ)wayupatza@gmail.com) ผูก role owner แล้ว, login dashboard ได้เลยstaff-app)staff-app ไม่มีหน้า login แยก — ระบุตัวพนักงานจาก LINE account ที่ผูกไว้ในตาราง profiles โดยตรง ขั้นตอน:
https://khaokho.nawingroup.com/staff-app/ ผ่าน LINE (ใน LINE app จริง ไม่ใช่เบราว์เซอร์ปกติ — ต้องเปิดจากลิงก์ที่ส่งผ่านแชท LINE หรือปุ่มเมนู richmenu ของ OA)staff-app ใหม่อีกครั้ง — คราวนี้จะเข้าหน้ากรอกจองได้เลย ไม่ต้อง login ซ้ำอีกทุกการจองที่พนักงานคีย์ผ่าน staff-app จะถูกบันทึก “จองโดย” อัตโนมัติ (เห็นในหน้า “การจอง” + นับรวมในตาราง “สรุปตามพนักงาน (สำหรับคิดคอมมิชชั่น)” ที่หน้า “ยูนิต & รายงาน” เหมือนการจองที่คีย์ผ่าน Dashboard ทุกประการ)
หมายเหตุเรื่อง internal_functions_secret: สุ่มค่าไว้แล้วตอน setup (SECURITY DEFINER trigger ↔ line-notify function ใช้ยืนยันกัน) ไม่ต้องแก้อะไรเพิ่ม เว้นแต่ต้องการหมุนค่าใหม่ (rotate) — ทำผ่าน vault.update_secret เหมือน secret อื่นๆ แล้วอย่าลืมว่าไม่มีที่อื่นอ้างอิงค่านี้นอกจาก DB trigger เอง
ตอนนี้ระบบสร้าง QR PromptPay ให้อัตโนมัติในแอปแขก แต่ต้องใส่เลข PromptPay จริงก่อน:
0891234567 หรือเลขบัตรประชาชน 13 หลักของบัญชีที่จะรับเงิน) และ ชื่อบัญชี ที่จะโชว์ให้ลูกค้าเห็นเข้า Dashboard → เมนู “ชำระเงิน” — จะเห็นรายการสลิปที่รอตรวจสอบทั้งหมด (พนักงานทุกคนเห็นได้ ไม่ใช่แค่ owner) คลิกรูปเพื่อดูขยาย กด “ยืนยันการชำระเงิน” จะเปลี่ยนสถานะการจองเป็น “ยืนยันแล้ว” ทันทีและส่ง LINE แจ้งเตือนลูกค้าอัตโนมัติ หรือกด “ปฏิเสธสลิป” ถ้าสลิปไม่ถูกต้อง (ลูกค้าจะอัปโหลดใหม่ได้)
เข้า Dashboard → ยูนิต & รายงาน → เลื่อนลงหัวข้อ “รูปภาพยูนิต” อัปโหลดรูปจริงของแต่ละห้อง/เต็นท์ได้เลย (ไม่จำกัดจำนวน) รูปจะโชว์ให้ลูกค้าดูตอนเลือกยูนิตในหน้าจองทันที — ตอนนี้ยังไม่มีรูปเลย แนะนำอัปโหลดก่อนเริ่มรับจองจริงจัง
มี cron job รันทุก 15 นาที ยกเลิกการจองที่ยังเป็น “รอยืนยัน” (ลูกค้าจองเองผ่านแอป ยังไม่จ่ายเงิน) เกิน 24 ชม. อัตโนมัติ — การจองที่พนักงานคีย์ผ่าน Dashboard/staff-app เป็น “ยืนยันแล้ว” ทันทีอยู่แล้วไม่โดนยกเลิก
ระบบตั้งค่าไว้ให้แล้วว่า “จะไม่มีการขอให้โอนเงินผ่านแชท” (ขึ้นแบนเนอร์เตือนในแอปทุกครั้งก่อนโชว์ QR) แต่แนะนำเพิ่ม:
bookings/guests ตรงๆ เลย ทุกอย่างผ่าน guest-api edge function ด้วย service-role key + ยืนยัน LIFF ID token ทุก requestbtree_gist) ระดับ DB เป็นด่านสุดท้าย — RPC check_availability เป็นแค่ด่านตรวจก่อนเพื่อ UX ที่ดีกว่า (error message ชัดเจน) ไม่ใช่จุดเดียวที่กันชนline-notify ยิงจาก DB trigger ผ่าน pg_net (async, ไม่บล็อก transaction การอัปเดตสถานะจอง)