ภาพรวม
Domain นี้มี 2 ตาราง: workflow เก็บนิยามเวิร์กโฟลว์ปัจจุบันเป็น JSONB ในคอลัมน์ definition
พร้อมข้อมูล reference ที่ compile แล้วใน compiled_refs และ workflow_version เก็บประวัติ
snapshot ของ definition ทุกครั้งที่มีการเปลี่ยนแปลง เพื่อให้ย้อนดูหรือกู้คืนเวอร์ชันเก่าได้
ตาราง workflow
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL | NO | nextval(...) | Primary key |
name | VARCHAR(255) | NO | - | ชื่อเวิร์กโฟลว์ |
description | TEXT | YES | - | คำอธิบายเวิร์กโฟลว์ |
status | VARCHAR(20) | NO | 'draft' | สถานะเวิร์กโฟลว์ |
definition | JSONB | NO | - | นิยามเวิร์กโฟลว์ทั้งหมด (node และการเชื่อมต่อ) |
compiled_refs | JSONB | YES | - | reference ที่ compile จาก definition เพื่อใช้ตอนรัน |
line_oa_id | INTEGER | NO | - | LINE OA ที่เวิร์กโฟลว์นี้สังกัด |
organization_id | INTEGER | NO | - | องค์กรเจ้าของเวิร์กโฟลว์ |
created_by | INTEGER | YES | - | ผู้สร้าง (user id) |
updated_by | INTEGER | YES | - | ผู้แก้ไขล่าสุด (user id) |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่สร้าง |
updated_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่แก้ไขล่าสุด |
deleted_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่ลบ (soft delete) |
ตาราง workflow_version
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL | NO | nextval(...) | Primary key |
workflow_id | INTEGER | NO | - | เวิร์กโฟลว์ต้นทางของ snapshot นี้ (FK ไป workflow.id) |
version | INTEGER | NO | - | เลขเวอร์ชันของ snapshot |
definition | JSONB | NO | - | snapshot ของนิยามเวิร์กโฟลว์ ณ เวอร์ชันนั้น |
event | VARCHAR(20) | NO | - | เหตุการณ์ที่ทำให้เกิดเวอร์ชันนี้ |
created_by | INTEGER | YES | - | ผู้ทำให้เกิดเวอร์ชันนี้ (user id) |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่บันทึกเวอร์ชัน |
หมายเหตุ
workflow_version.workflow_id เป็น FK ไป workflow.id โดยมี index บน
(workflow_id, version DESC) เพื่อดึงเวอร์ชันล่าสุดได้เร็ว
workflow มี index บน (line_oa_id, organization_id) สำหรับ query แยกตาม tenant และ index
บน deleted_date สำหรับกรองเรกคอร์ดที่ถูก soft delete
trigger_rule อ้างอิงกลับมาที่ workflow.id ผ่าน trigger_rule.workflow_id และระบุตำแหน่ง
node ที่ใช้ผ่าน workflow_node_path (ดู กฎทริกเกอร์และงานตั้งเวลา)
scheduled_action ก็เก็บ workflow_id และ workflow_node_path เช่นกัน เพื่อให้รู้ว่า action
ที่ตั้งเวลาไว้มาจาก node ไหนของเวิร์กโฟลว์
workflow และ workflow_version ไม่มี unique constraint บน (workflow_id, version)
ในระดับ schema — ความไม่ซ้ำของเลขเวอร์ชันถูกควบคุมที่ระดับแอปพลิเคชัน