Skip to main content

แดชบอร์ดสรุปตัวเลข (Dashboard)

ภาพรวม

Dashboard เป็นหน้าแรกที่ผู้ใช้เห็นหลังเลือก LINE OA แสดงตัวเลขสำคัญของ OA นั้น

ในฝั่ง API โมดูลนี้มีขนาดเล็กมาก มี endpoint เพียงตัวเดียวสำหรับดึงสถิติจำนวนเพื่อน ส่วนตัวเลขอื่น ๆ ที่ปรากฏบนหน้า dashboard ของ cms-web มาจาก endpoint ของโมดูลอื่น เช่น campaign tracking และ friend track report โดยไม่ได้รวมศูนย์ไว้ที่โมดูลนี้

Business Flow

  1. ผู้ใช้เข้าหน้า dashboard จากนั้น cms-web เรียก GET /api/dashboard/total-friends พร้อม query parameter ตาม QueryDashboardStatsDto
  2. service _getLineUserStats สร้าง query บนตาราง line_user ด้วยเงื่อนไขพื้นฐาน
    • line_oa_id ต้องตรงกับค่า lineOaId ที่อ่านจาก CLS
    • created_date ต้องไม่เกินวันที่ที่ระบุ เพื่อให้ดูข้อมูลย้อนหลังได้
    • user_id IS NOT NULL เพื่อนับเฉพาะแถวที่ผูกกับ LINE user จริง
    • soft delete จัดการโดย GORM ซึ่งเติม deleted_date IS NULL ให้อัตโนมัติ เพราะ entity ประกาศ gorm.DeletedAt เช่นเดียวกับที่ TypeORM QueryBuilder ทำในระบบเดิม
  3. ระบบเพิ่มเงื่อนไขเฉพาะของแต่ละ metric ต่อจาก query พื้นฐาน เช่น การแยกนับจำนวนผู้ที่ follow, unfollow และ block
  4. คืนชุดตัวเลขทั้งหมดให้ cms-web นำไป render เป็นการ์ดสถิติและกราฟ

ไฟล์และฟังก์ชันหลัก

โค้ดอยู่ที่ internal/modules/dashboard/ ประกอบด้วย controller.go, service.go และ dto.go

Route ลงทะเบียนบน authed.Group("/dashboard")

MethodRouteHandlerPolicy
GET/api/dashboard/total-friendssvc.getTotalFriendsHandlerread 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 (สถิติที่มาของเพื่อน)