ค้นหาผู้ใช้จาก Tracking Log (Tracking LINE Users)
ภาพรวม
โมดูลนี้มี endpoint เพียงตัวเดียว ทำหน้าที่ค้นหา LINE user จาก tracking key ที่ระบบบันทึกไว้ว่าใครกดอะไรเมื่อไร ใช้ในกรณีที่ต้องการเจาะจากพฤติกรรมกลับมาเป็นรายชื่อผู้ใช้ เช่น การตอบคำถามว่า "คนที่กดลิงก์ X ในแคมเปญ Y คือใครบ้าง"
จุดที่ต้องทราบคือ endpoint นี้เป็น POST ที่รับ body แบบไม่กำหนด type (untyped) เพราะระบบต้นทางที่เขียนด้วย TypeScript รับแบบนั้น ซึ่งส่งผลต่อพฤติกรรมเมื่อเกิดข้อผิดพลาด ตามที่อธิบายด้านล่าง
Business Flow
- cms-web ส่ง
POST /api/tracking-line-usersพร้อม body ที่ต้องมี fieldtrackingKeysเป็น array - service อ่านค่า
lineOaIdจาก CLS แล้วส่งต่อให้ repository พร้อมกับ body ที่รับมา - repository ค้นตาราง
tracking_line_usersตาม tracking key ที่ระบุ แล้ว join กลับไปยัง ตารางline_userเพื่อดึงข้อมูลผู้ใช้ - ผลลัพธ์ถูกส่งกลับแบบ pass-through คือไม่มีการแปลงรูปข้อมูลใด ๆ ตามระบบเดิม
- กรณีข้อผิดพลาดที่คงพฤติกรรมเดิมไว้ — หาก
trackingKeysไม่ถูกส่งมาหรือไม่ใช่ array ระบบ TypeScript เดิมจะพยายามอ่าน.lengthของค่าundefinedแล้วเกิด TypeError ฝั่ง Go จึงจำลองพฤติกรรมนี้ด้วย error ข้อความCannot read properties of undefined (reading 'length')และ controller ตอบกลับเป็น HTTP 500 พร้อมรหัสAPP_000โดย controller decode body เป็นfindLineUsersPayloadพร้อม flagtrackingKeysUsableเพื่อตรวจจับกรณีนี้
ไฟล์และฟังก์ชันหลัก
โค้ดอยู่ที่ internal/modules/trackinglineusers/ ประกอบด้วย controller.go และ service.go
| Method | Route | Handler | Policy |
|---|---|---|---|
| POST | /api/tracking-line-users | svc.getListHandler | readAll 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