Skip to main content

โควตาการใช้งานตามแพ็กเกจ (Plan Limits)

ภาพรวม

Plan Limits คือกลไกจำกัดปริมาณทรัพยากรที่แต่ละองค์กรสร้างได้ เช่น จำนวน audience, workflow ที่ active พร้อมกัน, template, custom attribute รวมถึงสิทธิ์ในการใช้ auto-refresh ค่าเริ่มต้นเป็นค่าระดับแพลตฟอร์ม แล้ว override รายองค์กรได้ผ่านคอลัมน์ organization.plan_limits ซึ่งเป็น JSONB

โมดูลนี้ไม่มี route ของตัวเองเลย โดย RegisterRoutes เป็น no-op โดยเจตนา สถานะของมันคือ provider-only ที่โมดูลอื่นเรียกใช้ตอนกำลังจะสร้างข้อมูลใหม่ เพื่อตรวจว่าเกินโควตาแล้วหรือยัง

Business Flow

  1. ผู้ใช้กดสร้าง audience, workflow หรือ template ใหม่
  2. service ของโมดูลนั้นเรียก planlimits เพื่อหา effective limits ขององค์กร
    • อ่านค่าจาก organization.plan_limits (JSONB) หากมี key นั้นอยู่ก็ใช้ค่านั้น
    • หากไม่มี ให้ใช้ค่าจาก DefaultPlanLimits
    • maxChannels เป็นกรณีพิเศษ โดยอ่านจากคอลัมน์ legacy organization.max_channel (ชนิด varchar) เสมอ และไม่มีอยู่ในค่า constant default
    • ค่า -1 หมายถึงไม่จำกัด
  3. เทียบจำนวนที่มีอยู่จริง ซึ่ง count จากตารางของโมดูลนั้น กับค่า limit ที่ได้
  4. หากเกินโควตา ระบบตอบ error กลับไปให้ cms-web แสดงข้อความว่าถึงเพดานของแพ็กเกจแล้ว
  5. platform admin ปรับ limit ได้ผ่าน PUT /api/org-module-setting/:orgId/limits

ค่าเริ่มต้นใน DefaultPlanLimits

keyค่าเริ่มต้นความหมาย
maxSegments5จำนวน audience/segment สูงสุด
maxActiveWorkflows3จำนวน workflow ที่ active พร้อมกันได้
maxTemplates20จำนวน template message
maxAttributes30จำนวน custom attribute
autoRefreshfalseอนุญาตให้ audience auto-refresh หรือไม่
maxChannelsอ่านจาก organization.max_channelจำนวน LINE OA ที่สร้างได้

ไฟล์และฟังก์ชันหลัก

โค้ดอยู่ที่ internal/modules/planlimits/ ประกอบด้วย service.go, constant.go และ controller.go

  • controller.goRegisterRoutes เป็น no-op โดยเจตนา เพราะเป็น provider-only ซึ่งตรงกับระบบ NestJS เดิมที่ไม่มี controller
  • constant.go — นิยาม DefaultPlanLimits
  • service.goGetEffectiveLimits และ helper สำหรับตรวจโควตาแยกตาม resource

โมดูลที่บริโภค planlimits ตามที่ระบุใน doc comment ของโค้ด ได้แก่ lineoa, audience, audiencefilter, workflow, templatemessage, attributemaster และ orgmodulesetting

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

  • Permission — ไม่มี route จึงไม่มี guard สิทธิ์ถูกบังคับที่โมดูลผู้เรียกแทน
  • ตารางที่เกี่ยวข้องorganization เฉพาะคอลัมน์ plan_limits (JSONB) และ max_channel (varchar)
  • CLS — อ่านค่า organizationId เพื่อ scope ข้อมูล
  • ผู้ตั้งค่า — คอนโซลตั้งค่าโมดูลและโควตารายองค์กร
  • ผู้บริโภค — การจัดการ audience, workflow, template message, attribute master และการจัดการ LINE OA