Monitoring และช่องทางรับแจ้งปัญหา
Health check, บันทึกข้อผิดพลาด, webhook แจ้งเตือน, เรื่องที่ผู้ใช้แจ้ง, สถานะและการลบหอพัก
Health check
หัวข้อที่มีชื่อว่า “Health check”GET /api/health → {"ok":true,"db_ms":…} (200) หรือ 503 เมื่อเชื่อมฐานข้อมูลไม่ได้ ไม่ต้องเข้าสู่ระบบ
ตั้ง uptime monitor (เช่น UptimeRobot, Better Stack) ยิงทุก 1–5 นาที และแจ้งเตือนทาง LINE/อีเมลเมื่อไม่ใช่ 200
ข้อผิดพลาดของแอป
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดของแอป”ทุก error ฝั่งเซิร์ฟเวอร์ (instrumentation.ts) และฝั่งเบราว์เซอร์ (error boundary) ถูกส่งไป 3 ที่:
- log ของเซิร์ฟเวอร์ เป็น JSON หนึ่งบรรทัด (
"level":"error") — ค้นใน log ของที่ deploy - ตาราง
app_errors— ดูที่ /platform → ข้อผิดพลาดล่าสุด (เก็บ 90 วัน, จำกัด 30 รายการ/ผู้ใช้/10 นาที) - ถ้าตั้ง
ERROR_WEBHOOK_URL(เช่น Slack/Discord incoming webhook) จะส่งข้อความไปทันที
งานกลางคืน (คำนวณค่าปรับ แผนผ่อนชำระ ปรับค่าเช่าตามกำหนด งานซ่อมตามรอบ สร้างข้อความเตือนทาง LINE) ถ้ารายการใดผิดพลาด ระบบข้ามรายการนั้นแล้วทำรายการอื่นต่อ และบันทึกลง app_errors ประเภท งานกลางคืน (ช่อง path = ชื่องาน, มีหอที่เกี่ยวข้อง) — รายการที่ข้ามจะถูกลองใหม่ในคืนถัดไป ถ้าเจอซ้ำทุกคืนให้ตรวจข้อมูลของหอนั้น
ผู้ใช้เห็นหน้า “เกิดข้อผิดพลาด” พร้อม รหัสอ้างอิง (digest) ใช้ค้นหาใน log ได้
เรื่องที่ผู้ใช้แจ้ง
หัวข้อที่มีชื่อว่า “เรื่องที่ผู้ใช้แจ้ง”ปุ่ม แจ้งปัญหา / สอบถาม ในเมนูของทุกหอ (ปิดไว้ชั่วคราว — ซ่อนจากเมนูแล้ว ผู้ใช้แจ้งเรื่องใหม่ไม่ได้) → /platform → เรื่องที่แจ้งเข้ามา (ผู้ดูแลแพลตฟอร์ม) กด ปิดเรื่อง พร้อมคำตอบ — ผู้แจ้งเห็นคำตอบนี้ในหน้าต่างแจ้งปัญหา (มีป้าย “คำตอบใหม่” จนกว่าจะเปิดอ่าน) เจ้าของ/ผู้จัดการของหอเห็นเรื่องที่ทีมของตัวเองแจ้ง
สถานะหอพัก
หัวข้อที่มีชื่อว่า “สถานะหอพัก”/platform → หอพักทั้งหมด → ปุ่ม ⋯ → เปลี่ยนสถานะ (ผู้ดูแลแพลตฟอร์มเท่านั้น) — ระบบไม่เปลี่ยนสถานะให้เอง
| สถานะ | ผล |
|---|---|
| ทดลองใช้ | ค่าเริ่มต้นของหอใหม่ ใช้งานได้ครบ ลบได้ |
| ใช้งาน | ลูกค้าจริง ลบไม่ได้จนกว่าจะปิดบัญชี |
| ระงับ | ไม่ให้ใช้เลยทุกอย่าง (เช่น ค้างค่าบริการ): ทีมงานเข้าแล้วเห็นแค่หน้า “ถูกระงับการใช้งาน” ผู้เช่าเข้าผ่าน LINE ไม่ได้ ระบบหยุดส่ง LINE (ข้อความที่ค้างอยู่ถูกทิ้ง) หยุดออกบิลอัตโนมัติ งานบำรุงตามรอบ และบิลงวดผ่อน · ข้อมูลยังอยู่ครบ เปลี่ยนกลับเป็นใช้งานแล้วทุกอย่างกลับมา งานตามรอบและงวดผ่อนที่ถึงกำหนดระหว่างนั้นจะทำในรอบถัดไป ลบไม่ได้ |
| ปิดบัญชี | ทีมงานและผู้เช่าเข้าไม่ได้ (ข้อมูลยังอยู่ เปลี่ยนกลับได้) ลบได้ |
ลบหอพัก
หัวข้อที่มีชื่อว่า “ลบหอพัก”/platform → ปุ่ม ⋯ → ลบหอพัก… ใช้ได้เฉพาะหอที่สถานะ ทดลองใช้ หรือ ปิดบัญชี (ลูกค้าจริงให้ปิดบัญชีก่อน)
ลบได้เฉพาะ หอเดโม่ และหอที่ ยังไม่ได้ใช้งานจริง (ทดลองตั้งค่า/ทดสอบ ยังไม่เคยออกใบแจ้งหนี้ — รวมใบแจ้งหนี้ที่ยกเลิกแล้ว — ไม่เคยรับเงินหรือคืนเงิน) หอที่ใช้งานจริงแล้วเมื่อเลิกใช้ให้ เปลี่ยนสถานะเป็นปิดบัญชี แทนการลบ ข้อมูลและเอกสารยังอยู่ครบ และเปิดกลับได้ หน้าต่างยืนยันแสดงจำนวนข้อมูลที่จะถูกลบ ต้องพิมพ์ชื่อย่อ (slug) ของหอให้ตรงจึงกดลบได้ — ลบถาวร กู้คืนไม่ได้
สิ่งที่ถูกลบ:
- ข้อมูลทุกอย่างของหอ (โครงการ ห้อง ผู้เช่า สัญญา ใบแจ้งหนี้ การรับเงิน ประวัติการแก้ไข ข้อผิดพลาดที่บันทึกไว้ ฯลฯ)
- โทเคน/ข้อมูลลับ LINE ใน Vault
- บัญชี LINE ของผู้เช่าหอนี้
- บัญชีทีมงานที่ใช้เฉพาะหอนี้ — ไม่ลบ บัญชีของผู้ดูแลแพลตฟอร์ม คนที่เป็นสมาชิกหอพักอื่นด้วย และคนที่ยังมีประวัติในหอพักอื่น
- ไฟล์ของหอ ทั้งใน Cloudflare R2 (รูปและเอกสาร) และ Supabase Storage (ไฟล์เก่าก่อนย้าย และรูปหน้าห้องว่าง) — ลบต่อทันทีหลังลบหอ ถ้ายังค้าง ดูหัวข้อถัดไป
ระบบเก็บไว้เพียงบันทึกว่าใครลบหอไหนเมื่อไหร่ (audit ระดับแพลตฟอร์ม)
ไฟล์ขององค์กรที่ถูกลบ
หัวข้อที่มีชื่อว่า “ไฟล์ขององค์กรที่ถูกลบ”ลบองค์กรแล้ว ไฟล์ของหอ (R2 + Storage) จะเข้าคิวและถูกลบต่อทันที ถ้ายังค้าง (เช่น Edge Function ยังไม่ได้ deploy หรือยังไม่ได้ตั้ง secret ของ R2) — /platform → ไฟล์ขององค์กรที่ลบแล้ว รอลบ → ลบไฟล์ที่ค้างตอนนี้
(เรียก Edge Function purge-org-files; deploy ด้วย pnpm functions:deploy) · ทุกคืนระบบยังลบไฟล์ที่อัปโหลดแล้วไม่ได้ใช้ (อัปโหลดไม่เสร็จเกิน 1 ชม. และรูปมิเตอร์ที่ผู้เช่าถ่ายแล้วไม่ได้ส่งเกิน 1 วัน) และรูปมิเตอร์/รูปงานซ่อมที่เก่ากว่า 1 ปี (ยกเว้นรายการที่ยังรอตรวจหรืองานที่ยังไม่ปิด)