PlusMagi's Blog By Pitt Phunsanit Backend,Database,Database ORM Astro: Astro DB & Actions (การจัดการ Type-safe ORM และ Form/Action handling)

Astro: Astro DB & Actions (การจัดการ Type-safe ORM และ Form/Action handling)

ในโลกของการพัฒนาเว็บยุคใหม่ การผสานรวมระหว่าง Front-end ที่รวดเร็วและ Back-end ที่เชื่อถือได้เป็นสิ่งสำคัญ Astro ได้ก้าวข้ามขีดจำกัดของ Static Site Generator (SSG) ด้วยการนำเสนอระบบจัดการข้อมูลที่ทรงพลังผ่าน Astro DB และ Actions ซึ่งออกแบบมาเพื่อมอบประสบการณ์การพัฒนาแบบ Full-stack ที่มี Type-safety สูง โดยเฉพาะเมื่อทำงานร่วมกับฐานข้อมูลเชิงสัมพันธ์อย่าง PostgreSQL

Understanding Astro DB and PostgreSQL Integration

Astro DB ทำหน้าที่เป็นชั้น ORM (Object-Relational Mapping) ที่ช่วยให้นักพัฒนาสามารถโต้ตอบกับ PostgreSQL ได้อย่างเป็นธรรมชาติและปลอดภัย การใช้ ORM ที่มาพร้อมกับ Type-safety หมายความว่าเมื่อคุณกำหนด Schema ของโมเดลข้อมูลแล้ว Astro จะสามารถตรวจสอบประเภทข้อมูล (Data Types) ได้ตั้งแต่ขั้นตอนการพัฒนา ทำให้ลดข้อผิดพลาดที่เกิดจากการส่งข้อมูลผิดประเภท (Type Mismatch) ได้อย่างมาก

The Power of Type-Safe Actions

หัวใจสำคัญของระบบนี้คือ ‘Actions’ ซึ่งเป็นกลไกที่ช่วยจัดการการส่งฟอร์ม (Form Handling) และการดำเนินการทางธุรกิจ (Business Logic) ทั้งหมด เมื่อผู้ใช้ส่งฟอร์มบนหน้าเว็บ Astro จะไม่เพียงแค่ส่งข้อมูลเท่านั้น แต่ยังเรียกใช้ Action ที่กำหนดไว้ ซึ่ง Action เหล่านี้จะทำหน้าที่เป็นตัวกลางในการตรวจสอบความถูกต้องของข้อมูล (Validation) และดำเนินการกับฐานข้อมูล PostgreSQL อย่างเป็นระเบียบ

การผสานรวมนี้ทำให้การจัดการ CRUD (Create, Read, Update, Delete) เป็นเรื่องง่ายและปลอดภัยยิ่งขึ้น โดยคุณสามารถกำหนด Query ที่ซับซ้อนใน PostgreSQL และเรียกใช้มันผ่าน API ที่ถูกห่อหุ้มด้วย Type-safety ของ Astro ได้อย่างราบรื่น

PostgreSQL Example: Handling Data Actions

สมมติว่าเราต้องการสร้าง Action ที่รับรายการ ID ของสินค้า (เช่น ‘1,2,3’) และทำการอัปเดตสถานะสินค้าเหล่านี้ในตาราง `products` ของ PostgreSQL การใช้ Astro Actions จะช่วยให้เรามั่นใจได้ว่าข้อมูลที่ส่งเข้ามานั้นเป็น Array ของ Integers เสมอ

SQL

-- 1. Schema Definition (PostgreSQL) --
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    sku VARCHAR(255) UNIQUE NOT NULL,
    status VARCHAR(50) DEFAULT 'pending',
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- 2. Example Action Function (Conceptual Astro/TS) --
-- This function simulates the action logic triggered by a form submission.
async function updateProductStatus(productIds: string[]) { 
    // Input: ['1', '2', '3']
    const idList = productIds.map(id => parseInt(id));

    // PostgreSQL Query Execution via ORM layer
    const result = await db.query(`
        UPDATE products
        SET status = 'processed', updated_at = NOW()
        WHERE id = ANY($1)
        RETURNING *;
    `, [idList]);

    return result.rows;
}

-- 3. Execution Example (Calling the Action)
// await updateProductStatus(['1', '2', '3']);

โค้ดตัวอย่างนี้แสดงให้เห็นว่า Astro Action ได้รับรายการ ID เป็น Array และใช้ PostgreSQL’s `ANY()` operator เพื่ออัปเดตสถานะสินค้าหลายรายการพร้อมกันอย่างมีประสิทธิภาพ โดยทั้งหมดนี้ถูกห่อหุ้มด้วยการตรวจสอบ Type-safety ตั้งแต่ต้นทางจนถึงการส่งคำสั่ง SQL

Conclusion

Astro DB และ Actions ได้ยกระดับการพัฒนา Full-stack ด้วยการผสานพลังของ Type-safety เข้ากับความแข็งแกร่งของ PostgreSQL ทำให้การจัดการ ORM และการประมวลผลฟอร์มที่ซับซ้อนเป็นเรื่องที่ง่ายและเชื่อถือได้ นักพัฒนาสามารถมุ่งเน้นไปที่ Business Logic โดยไม่ต้องกังวลเรื่องความไม่สอดคล้องกันของประเภทข้อมูลระหว่าง Front-end และ Back-end อีกต่อไป

Exit mobile version