# ข้อมูลในเว็บไซต์สาธิตและขอบเขตการใช้งาน

เว็บไซต์บริษัท เว็บเช่า และเว็บสินค้าในหลักสูตรนี้เป็นธุรกิจสมมติ ใช้เพื่อทดลองทำงานของหน้าเว็บและ API เท่านั้น ไม่มีการให้บริการ รับชำระเงิน ส่งอีเมล ยืนยันสัญญาเช่า หรือจัดส่งสินค้า กรุณาใช้ชื่อและอีเมลตัวอย่าง เช่น `learner@example.test` และไม่ส่งข้อมูลลูกค้าจริง

## ข้อมูลที่ส่งและข้อมูลที่จัดเก็บ

แบบฟอร์มส่งชื่อ อีเมล และข้อความตัวอย่างให้ Worker เพื่อตรวจรูปแบบ ใน `DEMO_MODE=true` server แทนค่าชื่อ อีเมล และข้อความด้วย `[demo-redacted]` ก่อนเก็บใน D1 ข้อมูลที่จำเป็นต่อแบบฝึกหัด เช่น รหัสสินค้า วันที่ จำนวน ยอดเงิน และเลขอ้างอิง ยังคงจัดเก็บเพื่อให้ตรวจพฤติกรรมระบบได้

การปกปิด fields เหล่านี้ไม่ได้แปลว่า request ไม่มีข้อมูลทางเทคนิค ระบบใช้รหัส HMAC จาก IP ที่ Cloudflare ส่งให้และวันที่ เพื่อจำกัดคำขอ โดยไม่ใช้ User-Agent เป็นตัวแยกสิทธิ์และไม่เก็บ IP ต้นฉบับในตารางของแอป ส่วน idempotency ใช้ HMAC ของข้อมูลธุรกิจเพื่อแยกการส่งซ้ำ ค่าที่ได้ยังเป็นข้อมูลเชิงเทคนิคที่ต้องจำกัดการเข้าถึง ไม่เรียกว่า anonymous โดยสมบูรณ์

Cloudflare และ browser อาจประมวลผล metadata ตามการตั้งค่าของบริการเอง ข้อความนี้อธิบายตารางและโค้ดของแอปสาธิต ไม่ใช่คำรับรองว่าผู้ให้บริการโครงสร้างพื้นฐานไม่เก็บ log ใด ๆ

## อายุข้อมูลสาธิต

![แผนภาพวงจรชีวิตข้อมูลสาธิต ตั้งแต่รับ request และสร้าง HMAC โดยไม่เก็บ IP ดิบ แยก pending claim 5 นาที rental และ key 30 นาที contact quote และ key 7 วัน กับตัวนับตามหน้าต่างวันที่ ก่อน scheduled cleanup รายชั่วโมง](/diagrams/data-lifecycle.svg)

[เปิดแผนภาพวงจรชีวิตข้อมูลแบบเต็มหน้า](/diagrams/data-lifecycle.html) เพื่อแยก redaction ตอนเขียน, pending claim 5 นาที, rental hold/key 30 นาที, contact/quote/key 7 วัน และหน้าต่างวันที่ของตัวนับ; ระยะเวลาและข้อยกเว้นให้ยึดรายการด้านล่างกับ source ปัจจุบัน

- การจองทดลองถืออุปกรณ์ไว้ **30 นาที** จากนั้นหมดอายุและคืนจำนวนว่าง ตรวจ `expiresAt` ที่ตอบกลับจาก API; idempotency record ของ rental ที่สำเร็จใช้เวลา expiry เดียวกับการจองนั้น
- pending idempotency claim ที่ยังทำ mutation ไม่สำเร็จหมดอายุหลัง **5 นาที** เพื่อให้ request ใหม่ reclaim งานที่ค้างได้
- ข้อมูลผู้ติดต่อ ใบเสนอราคา และ idempotency record ที่สำเร็จของ contact/quote มีนโยบายเก็บ **7 วัน**
- ตัวนับคำขอใช้วันที่ปฏิทินและเก็บหน้าต่าง 7 วัน คือวันนี้กับ 6 วันก่อนหน้า ไม่ใช่ TTL 168 ชั่วโมงราย row
- การล้างทำผ่าน scheduled Worker ทุกชั่วโมง จึงอาจมีเวลาหน่วงจนถึงรอบถัดไป
- การตรวจวันว่างและสร้างการจองใหม่ล้าง hold ที่หมดอายุเพื่อให้การแสดงจำนวนไม่ขึ้นกับรอบ cron เพียงอย่างเดียว
- ในชุด API integration tests ใช้ D1 local แยกต่อรอบ และลบเฉพาะ state ของรอบนั้นเมื่อจบ ไม่ล้างฐานข้อมูล production

ตรวจพฤติกรรมกับ `src/worker.ts` และ migrations เวอร์ชันที่นำไปใช้อีกครั้งเมื่อปรับนโยบาย ห้ามเปลี่ยนโหมดสาธิตเป็นธุรกิจจริงแล้วคาดหวังว่านโยบายนี้เหมาะกับทุกธุรกิจ

## ความคืบหน้าการเรียน

ปุ่ม “ทำบทเรียนนี้เสร็จแล้ว” เก็บรายการบทที่เรียนจบใน localStorage ของ browser นี้ ไม่ส่งความคืบหน้าไป Worker/D1 และไม่มีบัญชีผู้เรียนร่วมกับเครื่องอื่น ล้าง site data ของ browser เพื่อล้างความคืบหน้าได้

## ก่อนนำไปเปิดธุรกิจจริง

กำหนดผู้ควบคุมข้อมูล วัตถุประสงค์ สิทธิ์เข้าถึง ระยะเก็บ ช่องทางติดต่อ และกระบวนการลบข้อมูลให้ตรงกับธุรกิจ ตรวจข้อกำหนดที่ใช้บังคับกับองค์กรกับผู้เชี่ยวชาญที่เกี่ยวข้อง เพิ่ม authentication/authorization และ anti-abuse ที่เหมาะกับ traffic จริง หน้าเดโมและเอกสารนี้ไม่ใช่คำปรึกษากฎหมายหรือระบบรับชำระเงินพร้อมใช้
