Skip to main content

เพื่อน LINE (LINE User)

ภาพรวม

Domain นี้มีตารางเดียวคือ line_user เก็บโปรไฟล์ของเพื่อน (ผู้ติดตาม) แต่ละคนใน LINE OA หนึ่ง record คือหนึ่งคู่ของ LINE user กับ channel รวมข้อมูลจาก LINE profile, ข้อมูลที่ลูกค้ากรอกเอง, สถานะ follow/unfollow, rich menu ที่ผูกอยู่, สมาชิกภาพใน audience และ attribute ที่กำหนดเอง (custom_attribute)

ตาราง line_user

ColumnTypeNullableDefaultคำอธิบาย
idUUIDNOT NULLgen_random_uuid()Primary key ภายในระบบ
user_idTEXTNOT NULLLINE user ID (Uxxxxxxxx...) จาก LINE Platform
display_nameTEXTNOT NULLชื่อที่แสดงบนโปรไฟล์ LINE
picture_urlTEXTNOT NULLURL รูปโปรไฟล์จาก LINE
user_infoJSONBNULLข้อมูลโปรไฟล์ดิบที่ได้จาก LINE API
languageTEXTNOT NULL'th'ภาษาที่ใช้สื่อสารกับเพื่อนคนนี้
firstnameTEXTNULLชื่อจริง (ได้จากฟอร์มลงทะเบียนหรือการนำเข้าข้อมูล)
lastnameTEXTNULLนามสกุล
emailTEXTNULLอีเมล
mobile_noTEXTNULLเบอร์โทรศัพท์มือถือ
followCommonConfirm (enum)NOT NULLสถานะการเป็นเพื่อนปัจจุบัน: yes = ยังติดตามอยู่, no = บล็อก/เลิกติดตาม
rich_menu_idINTEGERNULLRich menu ที่ผูกกับผู้ใช้คนนี้ (FK ไป rich_menu.id)
registered_dateTIMESTAMPTZ(3)NULLวันที่ลงทะเบียน (กรอกฟอร์ม/ยืนยันตัวตน)
unfollow_dateTIMESTAMPTZ(3)NULLวันที่เลิกติดตาม/บล็อก OA
statusCommonStatus (enum)NOT NULLactiveสถานะของ record
deleted_dateTIMESTAMPTZ(3)NULLวันที่ลบแบบ soft delete
created_byINTEGERNULLuser id ของผู้สร้าง (กรณีสร้างจาก CMS/import)
updated_byINTEGERNULLuser id ของผู้แก้ไขล่าสุด
created_dateTIMESTAMPTZ(3)NOT NULLCURRENT_TIMESTAMPวันที่สร้าง record
updated_dateTIMESTAMPTZ(3)NULLวันที่แก้ไขล่าสุด
organization_idINTEGERNOT NULLองค์กรเจ้าของข้อมูล
line_oa_idINTEGERNOT NULLLINE OA channel ที่ผู้ใช้คนนี้เป็นเพื่อนอยู่
user_typeLineUserType (enum)NULLguestประเภทเพื่อน: guest (ยังไม่ลงทะเบียน) หรือ member (ลงทะเบียนแล้ว)
last_activity_typeActivityType (enum)NULLfollowประเภทกิจกรรมล่าสุด: follow, unfollow, message, tracking
last_activity_periodActivityPeriod (enum)NULLช่วงเวลาของกิจกรรมล่าสุด: morning, afternoon, evening, night
last_activity_dateTIMESTAMPTZ(3)NULLCURRENT_TIMESTAMPวันเวลาของกิจกรรมล่าสุด
last_activity_statusActivityStatus (enum)NULLactiveสถานะความเคลื่อนไหว: active หรือ inactive
audience_idsJSONBNULLรายการ id ของ audience/segment ที่ผู้ใช้คนนี้เป็นสมาชิก (JSON array)
rich_menu_archive_idINTEGERNULLRich menu ที่ถูก archive แล้วซึ่งเคยผูกกับผู้ใช้ (FK ไป rich_menu_archive.id)
custom_attributeJSONBNULL{}Attribute ที่องค์กรกำหนดเอง เก็บเป็น key-value ตามที่ประกาศไว้ใน attribute_master

หมายเหตุ

  • Unique constraint: (user_id, line_oa_id, organization_id) — LINE user คนเดียวกันเป็นเพื่อนของ หลาย channel ได้ แต่จะมีได้ record เดียวต่อ channel
  • Index: line_user_line_oa_id_idx (btree บน line_oa_id) และ line_user_audience_ids_idx (GIN บน audience_ids สำหรับ query สมาชิก audience ให้เร็ว)
  • Foreign key: rich_menu_id -> rich_menu.id, rich_menu_archive_id -> rich_menu_archive.id ส่วน organization_id และ line_oa_id ไม่ได้ประกาศเป็น FK constraint ใน Prisma แต่ใช้อ้างอิง เชิงตรรกะ
  • custom_attribute เป็น JSON object แบบ key-value เช่น {"member_tier":"gold","birth_month":"05"} โดยรายการ key ที่อนุญาตและชนิดข้อมูลถูกกำหนดไว้ใน ตาราง attribute_master ของแต่ละ channel ค่า default คือ object ว่าง
  • audience_ids เป็น JSON array ของ audience id ที่ถูกอัปเดตเมื่อมีการรีเฟรช audience — ใช้ GIN index ทำให้ค้นหาสมาชิกของ audience หนึ่งๆ ได้โดยไม่ต้อง join ตารางกลาง
  • คู่ last_activity_* ใช้สร้าง segment เชิงพฤติกรรม (เช่น เพื่อนที่ไม่มีความเคลื่อนไหวเกิน N วัน)