ภาพรวม
Domain นี้มี 3 ตาราง คือ friend_track_campaign (แคมเปญติดตามที่มาของการเพิ่มเพื่อน แต่ละแคมเปญ
มี token เฉพาะสำหรับใส่ในลิงก์เชิญ), friend_track_event (เหตุการณ์ follow/unfollow ที่เกิดผ่าน
แคมเปญนั้น) และ friend_track_ref (รายการรหัสอ้างอิงย่อย ref_id ที่แจกไว้ล่วงหน้าใต้แคมเปญเดียวกัน)
ตาราง friend_track_campaign
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL (INTEGER) | NO | nextval(...) | รหัสอ้างอิงหลักของแคมเปญติดตามเพื่อน |
name | TEXT | NO | - | ชื่อแคมเปญ |
token | TEXT | NO | - | token ประจำแคมเปญที่ใช้ในลิงก์เชิญ (unique ทั้งตาราง) |
description | TEXT | YES | - | คำอธิบายแคมเปญ |
status | TEXT | NO | 'active' | สถานะการใช้งานของแคมเปญ |
attribute_config | JSONB | YES | {} | ค่าตั้งต้นของ attribute ที่จะติดให้ผู้ใช้ที่เข้ามาทางแคมเปญนี้ |
line_oa_id | INTEGER | NO | - | รหัส LINE OA เจ้าของแคมเปญ (FK ไป line_oa.id) |
organization_id | INTEGER | NO | - | รหัสองค์กรเจ้าของข้อมูล (FK ไป organization.id) |
created_by | INTEGER | NO | 0 | รหัสผู้ใช้ที่สร้างรายการ |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่สร้างรายการ |
updated_by | INTEGER | YES | 0 | รหัสผู้ใช้ที่แก้ไขล่าสุด |
updated_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่แก้ไขล่าสุด |
deleted_date | TIMESTAMPTZ(3) | YES | - | วันเวลาที่ลบแบบ soft delete |
ref_attribute_key | VARCHAR(255) | YES | - | ชื่อ attribute ที่จะใช้บันทึกค่า ref_id ลงในโปรไฟล์ผู้ใช้ |
ref_upload_status | JSONB | YES | - | สถานะการอัปโหลดรายการ ref_id เข้าแคมเปญ (ความคืบหน้า/ผลลัพธ์) |
ตาราง friend_track_event
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL (INTEGER) | NO | nextval(...) | รหัสอ้างอิงหลักของเหตุการณ์ |
campaign_id | INTEGER | NO | - | รหัสแคมเปญที่เหตุการณ์เกิดขึ้น (FK ไป friend_track_campaign.id) |
line_user_id | TEXT | NO | - | LINE user ID ของผู้ที่เกิดเหตุการณ์ |
event_type | TEXT | NO | - | ประเภทเหตุการณ์ เช่น follow หรือ unfollow |
display_name | TEXT | YES | - | ชื่อที่แสดงของผู้ใช้ ณ เวลาที่เกิดเหตุการณ์ |
picture_url | TEXT | YES | - | URL รูปโปรไฟล์ของผู้ใช้ ณ เวลาที่เกิดเหตุการณ์ |
line_oa_id | INTEGER | NO | - | รหัส LINE OA ที่เกิดเหตุการณ์ |
organization_id | INTEGER | NO | - | รหัสองค์กรเจ้าของข้อมูล |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่เกิดเหตุการณ์ |
ref_id | VARCHAR(255) | YES | - | รหัสอ้างอิงย่อยที่ติดมากับลิงก์ ใช้ระบุช่องทาง/ผู้แนะนำรายย่อย |
ตาราง friend_track_ref
| Column | Type | Nullable | Default | คำอธิบาย |
|---|
id | SERIAL (INTEGER) | NO | nextval(...) | รหัสอ้างอิงหลักของรายการ ref |
campaign_id | INTEGER | NO | - | รหัสแคมเปญที่ ref นี้สังกัด (FK ไป friend_track_campaign.id) |
ref_id | VARCHAR(255) | NO | - | รหัสอ้างอิงย่อยที่แจกไว้ (unique ภายในแคมเปญเดียวกัน) |
line_oa_id | INTEGER | NO | - | รหัส LINE OA เจ้าของข้อมูล |
organization_id | INTEGER | NO | - | รหัสองค์กรเจ้าของข้อมูล |
created_date | TIMESTAMPTZ(3) | NO | now() | วันเวลาที่สร้างรายการ |
หมายเหตุ
friend_track_campaign มี FK ไป line_oa.id และ organization.id แบบ ON DELETE RESTRICT
จึงลบ LINE OA หรือองค์กรที่ยังมีแคมเปญค้างอยู่ไม่ได้
friend_track_event.campaign_id และ friend_track_ref.campaign_id เป็น FK ไปยัง
friend_track_campaign.id แบบ ON DELETE CASCADE — ลบแคมเปญแล้วเหตุการณ์และ ref จะถูกลบตาม
friend_track_campaign.token มี unique constraint ทั้งตาราง
friend_track_ref มี unique constraint บน (campaign_id, ref_id) — ref_id ห้ามซ้ำภายใน
แคมเปญเดียวกัน แต่ต่างแคมเปญใช้ค่าเดียวกันได้
friend_track_campaign ยังถูกอ้างอิงจาก content_page เพื่อผูกหน้าเนื้อหาเข้ากับแคมเปญติดตามเพื่อน
- Index:
friend_track_campaign บน line_oa_id และ deleted_date; friend_track_event บน
campaign_id, (line_user_id, line_oa_id) และ (event_type, campaign_id);
friend_track_ref บน campaign_id
friend_track_event และ friend_track_ref ไม่มีคอลัมน์ soft delete