Skip to main content

นำเข้าข้อมูลเพื่อน (Import / Mapping)

ภาพรวม

ระบบมีกลไกนำข้อมูลจากภายนอกเข้ามาผูกกับเพื่อน LINE อยู่ 2 แบบ

  1. Import LINE user — อัปโหลดไฟล์ CSV ที่มี LINE userId เพื่อสร้างแถวใหม่ใน line_user ใช้ในกรณีย้ายระบบ หรือกรณีที่มีรายชื่อ userId อยู่แล้ว
  2. Import mapping — อัปโหลด CSV ที่มีข้อมูลลูกค้า แล้ว map ลงบนเพื่อนที่มีอยู่ในระบบแล้ว โดยเลือก "คีย์เชื่อม" เช่น mobile_no หรือคีย์ในรูป custom.<key>

ทั้งสองแบบทำงานแบบ asynchronous ผ่าน worker-go และบันทึกสถิติผลลัพธ์ไว้ในคอลัมน์ JSONB

โครงสร้างข้อมูลหลัก

line_user_import (model LineUserImport)

หนึ่งแถวต่อหนึ่งไฟล์ที่อัปโหลด เก็บ title, file_name, file_path, archive_path พร้อมตัวนับความคืบหน้า total_records, total_processed, process_attempt

สถานะงานอยู่ในคอลัมน์ status (enum LineUserImportStatus: new, processing, completed, failed) และมี summary_stats JSONB, note, line_oa_id, organization_id

line_user_import_detail (model LineUserImportDetail)

หนึ่งแถวต่อหนึ่งบรรทัดใน CSV ใช้ UUID เป็น primary key เชื่อมกลับด้วย import_id (FK ไปยัง line_user_import.id)

เก็บ line_user_id (LINE userId ที่อ่านได้จากไฟล์), line_user_profile JSONB, status (enum LineUserImportDetailStatus: new, insert, exist, undefined, error_format) และ error_message

import_mapping_job

ตารางนี้สร้างด้วย manual SQL เท่านั้น ไม่ปรากฏใน Prisma รองรับงาน import mapping

  • file_name, file_path และ status (pending, processing, success, partial, failed)
  • unique_key JSONB — คีย์ที่ใช้จับคู่ เช่น {"field":"mobile_no","csvColumn":"Phone Number"}
  • mappings JSONB — การจับคู่คอลัมน์ปลายทาง เช่น [{"csvColumn":"Member Tier","target":"custom.member_tier"}]
  • validation JSONB — ผลตรวจสอบก่อน import สรุปจำนวน total, willUpdate, noMatch, errors และเหตุผล
  • stats JSONB — ผลลัพธ์จริงหลังประมวลผล และ error_log_path สำหรับดาวน์โหลด log
  • index (line_oa_id, status)

migration ที่สร้างตารางนี้ยังลงทะเบียนโมดูล import-mapping เข้าไปใน system_module, system_role_module และ organization_module พร้อมกันด้วย

ไฟล์ที่เกี่ยวข้อง

  • prisma/schema.prisma:716 — model LineUserImport
  • prisma/schema.prisma:742 — model LineUserImportDetail
  • manual-sql/9.import_mapping.sql — สร้างตาราง import_mapping_job และ grant สิทธิ์โมดูล
  • schema-dumps/2026-07-24/schema.sql:2281, :2306 และ :1984

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

  • cms-api-go — รับไฟล์อัปโหลด สร้าง job แสดงผลสรุป และให้ดาวน์โหลด error log
  • worker-go — ประมวลผลคิว import_mapping_job และงาน import line user แล้วเขียนผลกลับไปยัง line_user ระหว่างทำ bulk update จะตั้งค่า app.skip_triggers='true' เพื่อไม่ให้ trigger attribute_changed ยิงถี่เกินไป
  • ปลายทางของข้อมูลคือ เพื่อน LINE ส่วนคีย์ที่ใช้ map อ้างอิงนิยามจาก นิยาม Attribute