Skip to main content

หมวดหมู่คอนเทนต์และลิงก์รวม

ภาพรวม

Domain นี้มี 3 ตาราง: content_category เก็บหมวดหมู่ระดับบนของคอนเทนต์แยกตาม LINE OA, content_subcategory เก็บหมวดหมู่ย่อยที่รองรับโครงสร้างหลายชั้นผ่าน parent_id/level และ content_link เก็บลิงก์รวมคอนเทนต์ (สร้างลิงก์เดียวที่ชี้ไปยังชุดคอนเทนต์ตามเงื่อนไขหมวดหมู่ และช่วงวันที่เผยแพร่) พร้อมนับจำนวนคลิก

ตาราง content_category

ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
uuidUUIDNOgen_random_uuid()รหัสอ้างอิงภายนอกของหมวดหมู่ (unique)
line_oa_idINTEGERNO-LINE OA ที่หมวดหมู่นี้สังกัด (FK ไป line_oa.id)
organization_idINTEGERNO-องค์กรเจ้าของหมวดหมู่
nameVARCHAR(255)NO-ชื่อหมวดหมู่
slugVARCHAR(255)NO-slug ของหมวดหมู่ใน URL
descriptionTEXTYES-คำอธิบายหมวดหมู่
thumbnailVARCHAR(500)YES-URL รูปภาพประจำหมวดหมู่
sort_orderINTEGERNO0ลำดับการแสดงผล
statusContentCategoryStatus (ENUM)NOactiveสถานะ: active, inactive, delete
created_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่สร้าง
created_byINTEGERNO0ผู้สร้าง (user id)
updated_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่แก้ไขล่าสุด
updated_byINTEGERNO0ผู้แก้ไขล่าสุด (user id)
deleted_dateTIMESTAMPTZ(3)YES-วันเวลาที่ลบ (soft delete)

ตาราง content_subcategory

ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
uuidUUIDNOgen_random_uuid()รหัสอ้างอิงภายนอกของหมวดหมู่ย่อย (unique)
category_idINTEGERNO-หมวดหมู่แม่ (FK ไป content_category.id)
line_oa_idINTEGERNO-LINE OA ที่หมวดหมู่ย่อยนี้สังกัด
organization_idINTEGERNO-องค์กรเจ้าของหมวดหมู่ย่อย
nameVARCHAR(255)NO-ชื่อหมวดหมู่ย่อย
slugVARCHAR(255)NO-slug ของหมวดหมู่ย่อยใน URL
descriptionTEXTYES-คำอธิบายหมวดหมู่ย่อย
thumbnailVARCHAR(500)YES-URL รูปภาพประจำหมวดหมู่ย่อย
sort_orderINTEGERNO0ลำดับการแสดงผล
statusContentCategoryStatus (ENUM)NOactiveสถานะ: active, inactive, delete
parent_idINTEGERYES-หมวดหมู่ย่อยระดับบนกว่า (ใช้ทำโครงสร้างหลายชั้น)
content_subcategory_idINTEGERYES-คอลัมน์อ้างอิงหมวดหมู่ย่อยที่เกี่ยวข้อง (self-reference)
levelINTEGERNO2ระดับชั้นของหมวดหมู่ย่อย (ระดับ 1 คือ category)
created_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่สร้าง
created_byINTEGERNO0ผู้สร้าง (user id)
updated_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่แก้ไขล่าสุด
updated_byINTEGERNO0ผู้แก้ไขล่าสุด (user id)
deleted_dateTIMESTAMPTZ(3)YES-วันเวลาที่ลบ (soft delete)
ColumnTypeNullableDefaultคำอธิบาย
idSERIALNOnextval(...)Primary key
uuidUUIDNOgen_random_uuid()รหัสอ้างอิงภายนอกของลิงก์ (unique)
tokenVARCHAR(64)NO-โทเคนที่ใช้ในลิงก์สาธารณะ (unique)
line_oa_idINTEGERNO-LINE OA ที่ลิงก์นี้สังกัด (FK ไป line_oa.id)
organization_idINTEGERNO-องค์กรเจ้าของลิงก์
nameVARCHAR(255)NO-ชื่อลิงก์รวม
descriptionTEXTYES-คำอธิบายลิงก์รวม
category_idINTEGERYES-กรองคอนเทนต์ตามหมวดหมู่ (FK ไป content_category.id)
subcategory_idINTEGERYES-กรองคอนเทนต์ตามหมวดหมู่ย่อย (FK ไป content_subcategory.id)
published_date_fromTIMESTAMPTZ(3)YES-กรองคอนเทนต์ที่เผยแพร่ตั้งแต่วันเวลานี้
published_date_toTIMESTAMPTZ(3)YES-กรองคอนเทนต์ที่เผยแพร่จนถึงวันเวลานี้
audience_idsJSONBYES'[]'รายการ audience ที่กำหนดให้เข้าถึงลิงก์นี้
statusVARCHAR(20)NO'active'สถานะลิงก์
click_countBIGINTNO0จำนวนคลิกสะสมของลิงก์
created_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่สร้าง
created_byINTEGERNO-ผู้สร้าง (user id)
updated_dateTIMESTAMPTZ(3)NOnow()วันเวลาที่แก้ไขล่าสุด
updated_byINTEGERNO-ผู้แก้ไขล่าสุด (user id)
deleted_dateTIMESTAMPTZ(3)YES-วันเวลาที่ลบ (soft delete)
deleted_byINTEGERYES-ผู้ลบ (user id)

หมายเหตุ

  • content_category มี unique constraint บน (line_oa_id, slug) — slug ห้ามซ้ำภายใน OA เดียวกัน
  • content_subcategory มี unique constraint บน (category_id, slug) — slug ของหมวดหมู่ย่อย ห้ามซ้ำภายในหมวดหมู่แม่เดียวกัน
  • content_subcategory.category_id เป็น FK ไป content_category.id แบบ ON DELETE CASCADE — ลบหมวดหมู่แม่แล้วหมวดหมู่ย่อยทั้งหมดจะถูกลบตาม
  • content_subcategory รองรับโครงสร้างหลายชั้นผ่าน parent_id และ level (ค่า default 2 หมายถึงระดับที่สองถัดจาก category) โดยมี index บนทั้งสองคอลัมน์
  • content_link.token มี unique constraint และมี index แยก เพราะใช้เป็น key ในการเปิดลิงก์ จากภายนอก
  • content_link เก็บเฉพาะ "เงื่อนไขการกรอง" ไม่ได้เก็บรายการคอนเทนต์ตรง ๆ — คอนเทนต์ที่แสดง ถูกคำนวณจาก category_id, subcategory_id และช่วง published_date_from/published_date_to
  • ทั้งสามตารางใช้ soft delete ผ่าน deleted_date และมี index บนคอลัมน์นี้
  • content_category และ content_subcategory ถูกอ้างอิงจาก content_page และ content_link (ดู หน้าคอนเทนต์)