Lego Engine v2 เครื่องยนต์ Onboarding
แบบ Flow-agnostic
1 engine · ทุก flow · admin ตั้งค่าได้โดยไม่ deploy
→ กดลูกศร เพื่อเริ่มนำเสนอ
Concept คำว่า "flow" มี 2 ความหมาย
⚙️
Flow การทำงานของ system
โมเดล runtime ของ engine — รัน flow ใดๆ อย่างไร (generic)
📦
Flow Definition
แคตตาล็อก flow จริงที่ admin ตั้งค่าเก็บใน DB
Runtime Definition → Snapshot → Instance
FlowDefinition→ Snapshot→ FlowInstance→ StepData
Snapshot = แช่แข็ง definition ตอน start → แก้ทีหลังไม่กระทบ instance ที่รันอยู่
Step Step มี 2 โหมดทำงาน
🙋 Interactive
รอ user action (Next/Back/Submit) — engine หยุดรอแล้วคืน nav ให้ FE
⚡ Automatic
engine รัน handler เอง แล้วเดินต่อจนเจอ Interactive หรือจบ
State Machine วงจรชีวิต FlowInstance
stateDiagram-v2
[*] --> Draft
Draft --> Submitted
Draft --> Finalized
Submitted --> Approved
Submitted --> Rejected
Approved --> Finalized
resume ได้เฉพาะ Draft / CorrectionRequested · ที่จบแล้ว = เริ่มใหม่
Catalog Flow Definition ในระบบ
STANDARD_CUSTOMER_ONBOARDING customer ใหม่ · OTP → Consent → NDID → PersonalInfo
CUSTOMER_FIXED_ONBOARDING customer ที่ถูกเชิญ · + provision สิทธิ์
NEW_REQUESTOR นิติบุคคลใหม่ · มี 4-eye approval
RETURNING_REQUESTOR มีบัญชีแล้ว · ไม่มี OTP
Live STANDARD flow — กดดูได้จริง
Interactiveยืนยันตัวตนด้วย OTP → สร้าง User (minimal) + bind owner เข้า instance
👆 คลิกเปลี่ยน step ได้ — ทำงานสดทั้งตอนอ่านและตอนนำเสนอ
Backend เส้นทาง 1 request: API → DB
Controller→ MediatR pipeline→ FlowEngine→ Repository→ PostgreSQL
Clean Architecture 4 ชั้น · StepData เก็บเป็น jsonb
Frontend 1 path วิ่งได้ทุก flow
BE บอก stepType → FE หา component จาก STEP_REGISTRY
currentStep.type→ StepHost→ STEP_REGISTRY→ Angular component
Extend เพิ่ม Step ใหม่ — stepType = contract
StepCatalog ≡ Backend Handler ≡ FE STEP_REGISTRY
string เดียวกันทั้ง 3 ที่ — ไม่ตรง = ไม่ทำงาน
สรุป Lego = ต่อบล็อก
ไม่ใช่เขียนใหม่
flow ใหม่ = seed FlowDefinition + (ถ้ามี step ใหม่) เพิ่ม handler + component
นำเสนอด้วย reveal.js · อ่านฉบับเต็มได้ที่หน้า Docs