Skip to main content

ค้นหาผู้ใช้จาก Tracking Log (Tracking LINE Users)

ภาพรวม

โมดูลนี้มี endpoint เพียงตัวเดียว ทำหน้าที่ค้นหา LINE user จาก tracking key ที่ระบบบันทึกไว้ว่าใครกดอะไรเมื่อไร ใช้ในกรณีที่ต้องการเจาะจากพฤติกรรมกลับมาเป็นรายชื่อผู้ใช้ เช่น การตอบคำถามว่า "คนที่กดลิงก์ X ในแคมเปญ Y คือใครบ้าง"

จุดที่ต้องทราบคือ endpoint นี้เป็น POST ที่รับ body แบบไม่กำหนด type (untyped) เพราะระบบต้นทางที่เขียนด้วย TypeScript รับแบบนั้น ซึ่งส่งผลต่อพฤติกรรมเมื่อเกิดข้อผิดพลาด ตามที่อธิบายด้านล่าง

Business Flow

  1. cms-web ส่ง POST /api/tracking-line-users พร้อม body ที่ต้องมี field trackingKeys เป็น array
  2. service อ่านค่า lineOaId จาก CLS แล้วส่งต่อให้ repository พร้อมกับ body ที่รับมา
  3. repository ค้นตาราง tracking_line_users ตาม tracking key ที่ระบุ แล้ว join กลับไปยัง ตาราง line_user เพื่อดึงข้อมูลผู้ใช้
  4. ผลลัพธ์ถูกส่งกลับแบบ pass-through คือไม่มีการแปลงรูปข้อมูลใด ๆ ตามระบบเดิม
  5. กรณีข้อผิดพลาดที่คงพฤติกรรมเดิมไว้ — หาก trackingKeys ไม่ถูกส่งมาหรือไม่ใช่ array ระบบ TypeScript เดิมจะพยายามอ่าน .length ของค่า undefined แล้วเกิด TypeError ฝั่ง Go จึงจำลองพฤติกรรมนี้ด้วย error ข้อความ Cannot read properties of undefined (reading 'length') และ controller ตอบกลับเป็น HTTP 500 พร้อมรหัส APP_000 โดย controller decode body เป็น findLineUsersPayload พร้อม flag trackingKeysUsable เพื่อตรวจจับกรณีนี้

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

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

MethodRouteHandlerPolicy
POST/api/tracking-line-userssvc.getListHandlerreadAll tracking-log

Route ลงทะเบียนบน group authed ซึ่งบังคับ JWT แต่ ไม่มี ModuleGate ครอบ

ตัวแปรที่กำหนดพฤติกรรมข้อผิดพลาดคือ errTrackingKeysNotIterable ใน service.go

จุดเชื่อมต่อกับ Service อื่น

  • Permission — ต้องผ่าน global JwtAuth ซึ่งบังคับให้มี lineOaId ส่วน PolicyModuleTrackingLog ยังเป็นเพียง metadata และไม่ได้บังคับใช้
  • ตารางที่เกี่ยวข้องtracking_line_users และ line_user
  • CLS — ใช้ lineOaId จาก context ในการ scope query
  • โมดูลที่เกี่ยวข้อง — Tracking Link ในฐานะผู้สร้าง tracking token, Campaign Management ในฐานะผู้สร้าง tracking event และ LINE User Management