แดชบอร์ดสรุปตัวเลข (Dashboard)
ภาพรวม
Dashboard เป็นหน้าแรกที่ผู้ใช้เห็นหลังเลือก LINE OA แสดงตัวเลขสำคัญของ OA นั้น
ในฝั่ง API โมดูลนี้มีขนาดเล็กมาก มี endpoint เพียงตัวเดียวสำหรับดึงสถิติจำนวนเพื่อน ส่วนตัวเลขอื่น ๆ ที่ปรากฏบนหน้า dashboard ของ cms-web มาจาก endpoint ของโมดูลอื่น เช่น campaign tracking และ friend track report โดยไม่ได้รวมศูนย์ไว้ที่โมดูลนี้
Business Flow
- ผู้ใช้เข้าหน้า dashboard จากนั้น cms-web เรียก
GET /api/dashboard/total-friendsพร้อม query parameter ตามQueryDashboardStatsDto - service
_getLineUserStatsสร้าง query บนตารางline_userด้วยเงื่อนไขพื้นฐานline_oa_idต้องตรงกับค่าlineOaIdที่อ่านจาก CLScreated_dateต้องไม่เกินวันที่ที่ระบุ เพื่อให้ดูข้อมูลย้อนหลังได้user_id IS NOT NULLเพื่อนับเฉพาะแถวที่ผูกกับ LINE user จริง- soft delete จัดการโดย GORM ซึ่งเติม
deleted_date IS NULLให้อัตโนมัติ เพราะ entity ประกาศgorm.DeletedAtเช่นเดียวกับที่ TypeORM QueryBuilder ทำในระบบเดิม
- ระบบเพิ่มเงื่อนไขเฉพาะของแต่ละ metric ต่อจาก query พื้นฐาน เช่น การแยกนับจำนวนผู้ที่ follow, unfollow และ block
- คืนชุดตัวเลขทั้งหมดให้ cms-web นำไป render เป็นการ์ดสถิติและกราฟ
ไฟล์และฟังก์ชันหลัก
โค้ดอยู่ที่ internal/modules/dashboard/ ประกอบด้วย controller.go, service.go และ dto.go
Route ลงทะเบียนบน authed.Group("/dashboard")
| Method | Route | Handler | Policy |
|---|---|---|---|
| GET | /api/dashboard/total-friends | svc.getTotalFriendsHandler | read dashboard |
ฟังก์ชันภายในที่สำคัญคือ _getLineUserStats ซึ่ง port มาจาก
DashboardService._getLineUserStats ของระบบเดิมโดยตรง
โมดูลนี้ ไม่มี ModuleGate และไม่มี SuperAdminGuard ครอบ ผู้เรียกเพียงต้องผ่าน
global JwtAuth เท่านั้น
จุดเชื่อมต่อกับ Service อื่น
- Permission — ต้องผ่าน global
JwtAuthซึ่งบังคับให้มีlineOaIdใน token ส่วนPolicyModuleDashboardยังเป็นเพียง metadata และไม่ได้บังคับใช้ - ตารางที่เกี่ยวข้อง —
line_userและline_oa - CLS — ใช้
lineOaIdจาก context ในการ scope query - โมดูลที่เกี่ยวข้อง — LINE User Management, All Friend Listing (รายงานฉบับละเอียด), Campaign Management (สถิติแคมเปญ) และ Friend Track (สถิติที่มาของเพื่อน)