Process engine (/process) เรียก action อย่างไร และเพิ่ม action ใหม่ต้องแก้ที่ไหนบ้าง
ตอบสั้น: ไม่มีตัวกระจายกลางไฟล์เดียว — router.go จับ URL (/process/{กลุ่ม}/{action}) แล้ว handler ของกลุ่มทำ switch ตาม {action} เรียกเมธอดของ appprocess.Service ส่วนสิทธิ์เมนูถูกตัดสินจากตาราง routeRights — ถ้าเพิ่ม action แล้วไม่ใส่ตารางนี้ จะต้องเป็น Admin เท่านั้น
รายละเอียด
เส้นทางคำขอ: Auth (JWT) → RequireRight(..., processhttp.RequiredRight) → handler → Service → ฐานข้อมูลบริษัทใน token ลงทะเบียนซ้ำ 2 prefix เหมือนกัน คือ /process และ /api/v1/process (router.go:127 และ :168) Next เรียกตัวหลัง ภาพรวม action ทั้งหมดอยู่ที่ ตัวกระจายคำขอของ process (Process dispatcher) และ API เครื่องยนต์ process /process/* — เส้นทาง สิทธิ์ ขนาดบอดี้ (Process engine run API)
เพิ่ม action ใหม่ในกลุ่มที่มีอยู่แล้ว (กลุ่ม {action} เช่น master, stocktools):
- เขียนเมธอดใน
backend/internal/application/process/พร้อม struct input ที่ฝังStockScope(ฟิลด์ProviderCode/DatabaseName/UserCodeเป็นjson:"-"และมีSetScope—stock_tools.go:21) เพื่อให้ session มาจาก token ไม่ใช่ body - เพิ่ม
case "ชื่อ-action":ใน handler ของกลุ่ม เรียกserve(h, w, r, "กลุ่ม/ชื่อ-action", limit, func ... )(master_handler.go:19)serveถอด JSON, ประทับ session แล้วตอบ{"ok": true, "data": ...} - ใส่
"กลุ่ม/ชื่อ-action": read|write|del|adminในrouteRights(permission.go:23) หรือ case พิเศษในRequiredRight(permission.go:57) ถ้าสิทธิ์ขึ้นกับ body (เช่นtrans/saveที่แยกisNewเป็น Add/Edit) - ฝั่ง Next: เพิ่มชื่อใน
ACTIONSของfrontend/src/app/api/process/<กลุ่ม>/[action]/route.tsมิฉะนั้นได้ "ไม่พบคำสั่ง" 404 ก่อนถึง backend
เพิ่มกลุ่ม/route ตรงใหม่: ต้องลงทะเบียนใน router.go ทั้ง /process และ /api/v1/process (โค้ดเป็นสำเนาสองชุด ไม่ได้ใช้ฟังก์ชันร่วม)
action ที่ไม่รู้จัก ในกลุ่ม {action} ตอบ KindNotFound เช่น "unknown master action"
ข้อควรระวัง
- route ที่ไม่อยู่ใน
routeRightsตกเป็นadmin(permission.go:132) — ผู้ใช้ทั่วไปจะได้ 403 ทั้งที่โค้ดถูก ให้ตรวจตารางนี้ก่อนเสมอ (ทำไมเข้าเมนู/กดบันทึกแล้วขึ้น 403 ไม่มีสิทธิ์ และตั้งสิทธิ์เมนูให้ผู้ใช้อย่างไร) - ตารางเงิน/สต็อก/GL ต้องเขียนผ่านกลุ่มนี้เท่านั้น ไม่ใช่
/query/exec(ทำไมเขียนข้อมูลผ่าน /query/exec ไม่ได้ (error 403 ตารางเงิน/สต็อก/GL)) - ห้ามอ่านชื่อฐานข้อมูล/บริษัทจาก body — struct ทุกตัวใช้
SetScopeจาก claims
ดูเพิ่ม
- ตัวกระจายคำขอของ process (Process dispatcher)
- ภาพรวมกลุ่ม process ของ Backend (Process overview)
- API เครื่องยนต์ process /process/* — เส้นทาง สิทธิ์ ขนาดบอดี้ (Process engine run API)
- การตรวจสิทธิ์เมนูของ route process (Process route rights)
- Router, middleware และแผนผัง route ทั้งหมดของ backend (chi router)
- เพิ่มจอข้อมูลหลัก (master) ใหม่ต้องแก้ที่ไหนบ้าง และทำไมผู้ใช้ทั่วไปบันทึกไม่ได้
ที่มาในโค้ด
backend/internal/adapter/inbound/http/router.go:127กลุ่ม/process(ซ้ำที่:168สำหรับ/api/v1/process)backend/internal/adapter/inbound/http/process/master_handler.go:15Masterswitch ตาม{action}+defaultunknown action (บรรทัด 41)backend/internal/adapter/inbound/http/process/stocktools_handler.go:23ฟังก์ชัน genericservebackend/internal/application/process/stock_tools.go:21StockScopeและSetScope(บรรทัด 27)backend/internal/adapter/inbound/http/process/permission.go:23routeRights(comment: route ที่ไม่อยู่ในตารางต้องเป็น Admin)backend/internal/adapter/inbound/http/process/permission.go:57RequiredRightและ defaultreturn admin(บรรทัด 132)frontend/src/app/api/process/master/[action]/route.ts:11ACTIONSที่อนุญาตและ proxy ไป/api/v1/process/master/${action}