คุณสมบัติระดับระบบ (System Attribute)
ภาพรวม
System Attribute คือ attribute มาตรฐานที่ระบบนิยามไว้ส่วนกลาง ไม่ใช่สิ่งที่ลูกค้าตั้งขึ้นเอง จึงต่างจาก Attribute Master ซึ่งเป็น custom attribute แยกตาม LINE OA
attribute กลุ่มนี้ทำหน้าที่เป็นชุด attribute พื้นฐานที่ทุก OA มีเหมือนกัน เช่น field มาตรฐาน ของ LINE profile หรือ attribute ที่ใช้ประกอบเป็น merge tag ระบบใน Template Message
ในเชิงโครงสร้างเป็นโมดูล CRUD ที่เรียบง่าย มีเพียง 4 endpoint
Business Flow
- ดูรายการ —
GET /api/system-attributeคืน attribute ระบบทั้งหมด โดย GORM เติมเงื่อนไขdeleted_date IS NULLให้อัตโนมัติ เพราะ entity ประกาศgorm.DeletedAt - สร้างใหม่ —
POST /api/system-attributeสร้าง attribute ระบบด้วยCreateSystemAttributeDto - แก้ไข —
PUT /api/system-attribute/:idการอัปเดตต้องใช้Unscoped()เพราะระบบเดิมที่เขียนด้วย TypeORM ไม่ได้ใส่ soft-delete filter ในคำสั่งupdate()จึงต้องทำให้ตรงกันเพื่อรักษา behavior parity - ลบ —
DELETE /api/system-attribute/:idเป็นการ soft delete - การนำไปใช้ — ผลลัพธ์ถูกนำไปใช้ต่อสองทางหลัก คือ
GET /api/template-message/merge-tags?showSystem=trueที่รวม attribute ระบบเข้าไปในรายการ merge tag และการประกอบร่วมกับ custom attribute เวลาสร้างฟอร์มหรือรายงาน
ไฟล์และฟังก์ชันหลัก
โค้ดอยู่ที่ internal/modules/systemattribute/ ประกอบด้วย controller.go, service.go และ dto.go
Route ทั้งหมดลงทะเบียนบน authed.Group("/system-attribute")
| Method | Route | Handler | Policy |
|---|---|---|---|
| GET | /api/system-attribute | h.findAll | read system-attribute |
| POST | /api/system-attribute | h.create | create system-attribute |
| PUT | /api/system-attribute/:id | h.update | update system-attribute |
| DELETE | /api/system-attribute/:id | h.remove | delete system-attribute |
โมดูลนี้ ไม่มี ModuleGate และไม่มี SuperAdminGuard ครอบ ผู้เรียกเพียงต้องผ่าน
global JwtAuth เท่านั้น
จุดเชื่อมต่อกับ Service อื่น
- Permission — ต้องผ่าน global
JwtAuthซึ่งบังคับให้มีlineOaIdใน token ส่วนPolicyModuleSystemAttributeยังเป็นเพียง metadata และไม่ได้บังคับใช้ - ตารางที่เกี่ยวข้อง —
system_attributeซึ่งใช้ soft delete ผ่านgorm.DeletedAt - ผู้บริโภคข้อมูล — Template Message (สำหรับ merge tag ระบบ), Form Builder และรายงานเพื่อนทั้งหมด
- เปรียบเทียบ — Attribute Master ทำหน้าที่เดียวกันแต่เป็น custom attribute แยกตาม OA