หมวดหมู่คอนเทนต์
ภาพรวม
Content Category คือหมวดหมู่ระดับบนสุดสำหรับจัดระเบียบหน้าคอนเทนต์ ถือเป็นชั้นที่ 1 ของโครงสร้างหมวดหมู่ ส่วนชั้นถัดไปคือ Content Subcategory ที่ซ้อนกันได้อีกหลายระดับ
นอกจากการทำ CRUD ตามปกติแล้ว โมดูลนี้ยังมี endpoint สำหรับสร้าง dropdown สองรูปแบบ และ endpoint สรุปสถิติจำนวนคอนเทนต์ในแต่ละหมวด
ข้อควรระวัง: entity ContentCategory ใช้คอลัมน์ deleted_date แบบธรรมดา ไม่ใช่
gorm.DeletedAt ดังนั้น GORM จะไม่เติมเงื่อนไข filter ให้อัตโนมัติ โค้ดจึงต้องใส่
deleted_date IS NULL เองในทุกจุดที่เวอร์ชัน TypeScript ใส่ และต้องไม่ใส่ในจุดที่เวอร์ชันเดิม
ไม่ได้ใส่ เช่น การ update และ save
Business Flow
GET /api/content-categoriesลิสต์หมวดหมู่ พร้อมตัวกรองตามQueryContentCategoryDtoGET /api/content-categories/dropdownคืนข้อมูลในรูปแบบ dropdown แบบแบนGET /api/content-categories/dropdown-groupคืนข้อมูลแบบจัดกลุ่ม สำหรับ UI ที่ใช้ optgroupGET /api/content-categories/statsคืนสถิติจำนวนคอนเทนต์ในแต่ละหมวดPOST /api/content-categoriesสร้างหมวดใหม่ด้วยCreateContentCategoryDtoGET /api/content-categories/:idดูรายละเอียดของหมวดหนึ่ง ๆPATCH /api/content-categories/:idแก้ไขข้อมูลหมวดDELETE /api/content-categories/:idลบหมวด โดยตอบกลับสถานะ 204 No Content- หมวดที่สร้างไว้จะปรากฏเป็นตัวเลือกตอนสร้างหน้าคอนเทนต์
และแสดงในเส้นทางสาธารณะ
GET /api/public/contents/categories
ไฟล์และฟังก์ชันหลัก
โค้ดหลักอยู่ที่ internal/modules/contentcategory/ ประกอบด้วย controller.go, service.go
และ dto.go โดย register บน group authed.Group("/content-categories")
| Method | Route | Handler | Policy (metadata) |
|---|---|---|---|
| GET | /api/content-categories | h.findAll | readAll line-oa |
| GET | /api/content-categories/dropdown | h.getDropdown | readAll line-oa |
| GET | /api/content-categories/dropdown-group | h.getDropdownGroup | readAll line-oa |
| GET | /api/content-categories/stats | h.getStats | readAll line-oa |
| GET | /api/content-categories/:id | h.findOne | read line-oa |
| POST | /api/content-categories | h.create | create line-oa |
| PATCH | /api/content-categories/:id | h.update | update line-oa |
| DELETE | /api/content-categories/:id | h.remove | delete line-oa |
route ที่เป็น static path ได้แก่ /dropdown, /dropdown-group และ /stats
ถูก register ก่อน /:id เพื่อให้ gin resolve ไปยัง handler ที่ถูกต้อง
จุดเชื่อมต่อกับ Service อื่น
- สิทธิ์การเข้าถึง — ต้องผ่าน global
JwtAuthโดย policy metadata เป็นPolicyModuleLineOaซึ่งยังไม่บังคับใช้ และไม่มีModuleGateครอบ - ตารางที่เกี่ยวข้อง —
content_category,content_subcategory,content_page,line_oa - Context — อ่าน
lineOaIdและorganizationIdจาก CLS เพื่อกำหนดขอบเขตข้อมูล - โมดูลที่เกี่ยวข้อง — Content Subcategory, Content Page, Content Link และ Public API