Directory / Logic & State Engineering

Shopping Cart

เจาะลึกระบบจัดการตะกร้าสินค้าแบบอะตอมมิก ที่เชื่อมโยงระหว่าง Framework ต่างชนิด (Astro & React) ผ่านระบบ Global Event และการเก็บสถานะแบบ Persistent

Cart Architecture Modules

6 Complex State Modules

1. Nanostores Persistent State

ระบบจัดการสถานะสินค้าในตะกร้าแบบถาวร

src/lib/cartStore.js

Local Persistence

ใช้ persistentAtom จาก Nanostores เพื่อเก็บข้อมูลไว้ใน Local Storage ทำให้ข้อมูลไม่หายเมื่อรีเฟรชหรือปิดเบราว์เซอร์

Atomic Updates

ใช้โครงสร้างข้อมูลแบบอะตอมมิกช่วยให้ทุกส่วนของเว็บไซต์ที่เรียกใช้ตะกร้าได้รับข้อมูลล่าสุดในทันที

Automatic Sync

ระบบ Encode/Decode ข้อมูลเป็น JSON อัตโนมัติเมื่อมีการเปลี่ยนแปลงค่าใน Store

2. Dynamic Pricing & Totals

ระบบคำนวณราคาสุทธิและหน่วย Bitcoin

cartStore.totals()

Multi-Currency Calculation

คำนวณราคารวมในหน่วยบาท (THB) และแปลงเป็นหน่วยซาโตชิ (Sats) แบบเรียลไทม์

Quantity Logic

ระบบรวมจำนวนสินค้าแบบแยกตาม SKU เพื่อแสดงราคารวมที่ถูกต้องในแต่ละรายการ

Sats Conversion

ใช้อัลกอริทึมพื้นฐานในการประเมินมูลค่าบิตคอยน์เบื้องต้นเพื่อให้ผู้ใช้เห็นความคุ้มค่า

3. Global Event Bridge

ระบบสื่อสารระหว่าง Astro และ React

CustomEvent Ecosystem

cart-updated Event

ส่งสัญญาณ CustomEvent ไปทั่วเว็บเมื่อมีการเพิ่มหรือลบสินค้า เพื่ออัปเดต Badge บน Navbar

toggle-cart Signal

ระบบรับ-ส่งคำสั่งเปิด/ปิดลิ้นชักตะกร้าข้าม Component (เช่น จากหน้า Product Detail ไปที่ CartDrawer)

Bubbling System

ใช้หลักการ Event Bubbling เพื่อให้ Element ชั้นบนสามารถดักฟังและสั่งงานตะกร้าได้จากทุกจุด

4. Interactive Cart Drawer

อินเทอร์เฟซลิ้นชักตะกร้าสินค้าแบบพรีเมียม

CartDrawer.astro

Sliding Panel

ดีไซน์แผงเลื่อนด้านข้างที่ประหยัดพื้นที่และไม่รบกวนการเลือกชมสินค้าในหน้าหลัก

Micro-Interactions

ปุ่มบวก-ลบจำนวนสินค้าและการลบรายการที่ทำงานได้ทันทีโดยไม่ต้องโหลดหน้าใหม่

Empty State UI

การแสดงผลที่สวยงามเมื่อไม่มีสินค้าในตะกร้า พร้อมปุ่มนำทางกลับไปที่หน้า Shop

5. Checkout Vortex Pipeline

ขั้นตอนการส่งต่อข้อมูลสู่ระบบชำระเงิน

checkout.astro Integration

Data Integrity

การแพ็กข้อมูลสินค้าทั้งหมด (ID, Name, Price, Qty) เตรียมพร้อมสำหรับการคำนวณในหน้าใบกำกับภาษี

Zero-Data Strategy

ระบบล้างข้อมูลในตะกร้า (cart.clear) เฉพาะเมื่อการสั่งซื้อได้รับการยืนยันหรือเข้าสู่สถานะจ่ายเงินแล้ว

Secure Handover

การไหลของข้อมูลที่เน้นความสอดคล้องระหว่างหน้า Cart และหน้าชำระเงินเพื่อป้องกันราคาคลาดเคลื่อน

6. Real-time Stock Sync

ระบบตรวจสอบความถูกต้องของสินค้า

Cart Validation Logic

Instant Validation

ระบบตรวจสอบสต็อกล่าสุดจากฐานข้อมูลทันทีเมื่อเปิดตะกร้า (Trigger Verification)

Auto-Adjustment

หากสินค้าในสต็อกเหลือน้อยกว่าจำนวนในตะกร้า ระบบจะปรับลดให้อัตโนมัติพร้อมแจ้งเตือนผู้ใช้

Expired Item Removal

ระบบลบสินค้าที่ถูกนำออกจากร้านค้า (De-listed) ออกจากตะกร้าโดยอัตโนมัติ

# Cart State Philosophy

Single Source of Truth

ทุก Component ไม่ว่าจะอยู่บนหน้าไหนก็ตาม จะต้องเรียกดูข้อมูลจาก `cartItems` เดียวกันเสมอ เพื่อป้องกันความสับสนของราคาสินค้าหรือจำนวนสต็อกที่อาจเกิดขึ้นจากการแยกตัวแปรสถานะ

Event-Driven Architecture

การใช้ Custom Events ช่วยลดภาระของ Main Framework (Astro) ในการคุมทุกการกระทำ โดยอนุญาตให้เกาะกลุ่มการอัปเดต (Batch Updates) ทำงานในฝั่ง Client-side ได้อย่างสมบูรณ์และรวดเร็ว