15 KiB
Prompt: Implement Approval & Publishing Workflow for Announcement and Online Lesson
Objective
ปรับปรุงระบบหลังบ้านของ Training Management System (TMS) ให้รองรับ Approval & Publishing Workflow สำหรับโมดูล:
- ประกาศ (Announcement)
- บทเรียนออนไลน์ (Online Lesson)
โดยให้ HRD Staff / Admin สามารถสร้างและส่งอนุมัติได้ แต่ไม่สามารถเผยแพร่สู่สาธารณะได้เอง ยกเว้น Admin IT ซึ่งเป็น Super Admin และสามารถดำเนินการได้ทั้งหมด
Scope
ให้ดำเนินการเฉพาะโมดูล:
- Announcement
- Online Lesson
ยังไม่ต้องขยายไปยังโมดูลอื่น
Roles & Permissions
Admin IT / Super Admin
มีสิทธิ์ทำได้ทั้งหมด ได้แก่:
- Create
- Edit
- Delete
- Submit for Approval
- Approve
- Reject
- Publish
- Schedule Publish
- Unpublish
- Archive
- Preview
- Manage all records
HRD Staff
มีสิทธิ์:
- Create
- Edit Draft
- Delete Draft
- Submit for Approval
- Preview Draft
ไม่มีสิทธิ์:
- Approve
- Reject
- Publish
- Schedule Publish
- Unpublish
- Archive
HRD Manager
มีสิทธิ์:
- View Pending Approval
- Approve
- Reject
- Publish
- Schedule Publish
- Unpublish
- Archive
- Preview before Publish
- View HRD Manager Dashboard
Employee
มีสิทธิ์:
- เห็นเฉพาะรายการที่มีสถานะ Published เท่านั้น
- ไม่สามารถเห็น Draft, Pending Approval, Approved, Scheduled, Rejected หรือ Archived
Required Status
ให้รองรับสถานะดังนี้:
Draft
Pending Approval
Approved
Scheduled
Published
Rejected
Archived
Workflow
Create Flow
Create
↓
Draft
↓
Submit for Approval
↓
Pending Approval
↓
Approve
↓
Approved
↓
Publish Now / Schedule Publish
↓
Published
Reject Flow
Pending Approval
↓
Reject
↓
Draft
เมื่อ Reject:
- ต้องบันทึกเหตุผลการ Reject
- รายการกลับเป็น Draft
- ผู้สร้างสามารถแก้ไขได้
- ผู้สร้างสามารถลบได้
- สามารถ Submit for Approval ใหม่ได้
Schedule Publish Flow
Approved
↓
Schedule Publish
↓
Scheduled
↓
ถึงเวลาที่กำหนด
↓
Published
ต้องรองรับ:
- ตั้งวันเวลาเผยแพร่
- แก้ไขวันเวลาเผยแพร่
- ยกเลิก Schedule
- Publish ทันที แม้เคยตั้ง Schedule ไว้แล้ว
Versioning Requirement
ต้องเพิ่ม Versioning สำหรับ Announcement และ Online Lesson
กรณีรายการยังไม่ Published
- สามารถแก้ไข Draft ได้ตามปกติ
กรณีรายการ Published แล้ว
ห้ามแก้ไข Published Record โดยตรง
เมื่อมีการแก้ไขรายการที่ Published แล้ว ให้สร้าง Draft Revision ใหม่ เช่น:
Published V1
↓
Create Draft Revision
↓
Draft V2
↓
Submit for Approval
↓
Pending Approval
↓
Approved
↓
Published V2
ข้อกำหนด:
- ต้องเก็บ version number
- ต้องระบุ parent/original record
- ต้องรู้ได้ว่า version ไหนเป็น current published version
- เมื่อ Publish version ใหม่ ให้ version เดิมไม่แสดงเป็น current แล้ว
- ต้องมีประวัติ version ให้ตรวจสอบย้อนหลังได้
Preview Before Publish
ต้องเพิ่ม Preview ก่อน Publish
HRD Staff
- Preview ได้เฉพาะ Draft / Revision ของตนเองหรือรายการที่มีสิทธิ์
HRD Manager
- Preview รายการ Pending Approval, Approved, Scheduled ได้
- Preview ต้องแสดงหน้าตาใกล้เคียงกับที่ Employee จะเห็นจริง
Admin IT
- Preview ได้ทุกสถานะและทุกรายการ
Preview ต้องไม่ทำให้สถานะเปลี่ยน
HRD Manager Dashboard
เพิ่มหรือปรับหน้า Dashboard สำหรับ HRD Manager เพื่อดูรายการที่ต้องดำเนินการ
ควรมี Section หรือ Tab อย่างน้อย:
- Pending Approval
- Approved รอ Publish
- Scheduled
- Published
- Rejected
- Archived
ควรแสดงข้อมูลสำคัญ:
- ชื่อรายการ
- ประเภท: Announcement / Online Lesson
- ผู้สร้าง
- วันที่สร้าง
- วันที่ส่งอนุมัติ
- สถานะ
- วันที่ตั้งเผยแพร่ ถ้ามี
- ปุ่ม Action ตามสิทธิ์
Frontend Requirement
HRD Staff / Admin User
ในหน้า Create/Edit ต้องมีปุ่ม:
- Save Draft
- Submit for Approval
- Preview
ห้ามแสดงปุ่ม:
- Approve
- Reject
- Publish
- Schedule Publish
- Unpublish
- Archive
ยกเว้นผู้ใช้เป็น Admin IT
HRD Manager
ต้องมีปุ่มตามสถานะ:
Pending Approval
- Preview
- Approve
- Reject
Approved
- Preview
- Publish Now
- Schedule Publish
Scheduled
- Preview
- Edit Schedule
- Cancel Schedule
- Publish Now
Published
- Preview
- Unpublish
- Archive
Admin IT
ต้องเห็นและใช้งานปุ่มทั้งหมดได้ทุกสถานะตามความเหมาะสม
Backend Requirement
ห้ามตรวจสอบสิทธิ์เฉพาะหน้า UI
ต้องตรวจสอบ Role/Permission ที่ API ทุกครั้ง
API สำคัญที่ต้องป้องกัน:
- Submit for Approval
- Approve
- Reject
- Publish
- Schedule Publish
- Cancel Schedule
- Unpublish
- Archive
- Delete
- Create Revision
หากไม่มีสิทธิ์ ให้ return:
403 Forbidden
Database Requirement
ตรวจสอบ schema เดิมก่อนเสมอ ห้ามเดาโครงสร้าง
ถ้ายังไม่มี field ที่จำเป็น ให้เพิ่มโดยออกแบบให้สอดคล้องกับ project pattern เดิม
ควรมี field ประมาณนี้:
status
version
parent_id
is_current
submitted_by
submitted_at
approved_by
approved_at
rejected_by
rejected_at
rejected_reason
scheduled_publish_at
published_by
published_at
unpublished_by
unpublished_at
archived_by
archived_at
created_by
updated_by
created_at
updated_at
ถ้ามี Audit Log เดิม ให้ใช้ของเดิม ถ้าไม่มี ให้เพิ่มตาม pattern ของโปรเจกต์
Audit Log Requirement
ต้องบันทึกทุก action สำคัญ:
- Create
- Update
- Delete
- Submit for Approval
- Approve
- Reject
- Create Revision
- Schedule Publish
- Cancel Schedule
- Publish
- Unpublish
- Archive
Audit Log ควรเก็บ:
- module
- record_id
- action
- old_value
- new_value
- actor_id
- actor_role
- created_at
- note / reason
Notification Requirement
ถ้ามีระบบ notification เดิม ให้ reuse ของเดิม
ต้องแจ้งเตือนอย่างน้อยในเหตุการณ์:
- HRD Staff ส่งอนุมัติ → แจ้ง HRD Manager
- HRD Manager Approve → แจ้งผู้สร้าง
- HRD Manager Reject → แจ้งผู้สร้าง พร้อมเหตุผล
- ตั้งเวลาเผยแพร่ → แจ้งผู้เกี่ยวข้อง
- Publish สำเร็จ → แจ้งผู้เกี่ยวข้อง
- Unpublish / Archive → แจ้งผู้เกี่ยวข้อง
Scheduled Publish Job
ต้องตรวจสอบว่าระบบมี cron/job/scheduler อยู่แล้วหรือไม่
ถ้ามี ให้ใช้ pattern เดิม
ถ้าไม่มี ให้เสนอแนวทางที่เหมาะสมก่อนลงมือแก้
Scheduled Job ต้องทำงานประมาณนี้:
ค้นหารายการ status = Scheduled
และ scheduled_publish_at <= current time
จากนั้นเปลี่ยนสถานะเป็น Published
บันทึก published_at
บันทึก Audit Log
ต้องระวัง timezone และใช้แนวทางเดียวกับ project เดิม
Employee Visibility Rule
ทุกหน้า Employee ต้อง query เฉพาะ:
status = Published
is_current = true
ห้ามแสดง:
- Draft
- Pending Approval
- Approved
- Scheduled
- Rejected
- Archived
- version เก่า
Validation
ใช้ validation เดิมของ Create/Edit ให้มากที่สุด
ก่อน Submit for Approval ต้อง validate ข้อมูลเหมือนกับการเตรียมเผยแพร่จริง
หากข้อมูลไม่ครบ:
- ไม่เปลี่ยนสถานะ
- แสดง error ให้ครบทุกจุด
- ยังคงเป็น Draft
Required Implementation Steps
- ตรวจสอบโครงสร้างโปรเจกต์เดิมก่อนแก้ไข
- ตรวจสอบ Announcement module
- ตรวจสอบ Online Lesson module
- ตรวจสอบ Role/Permission เดิม
- ตรวจสอบ API routes / server actions / services เดิม
- ตรวจสอบ Database schema เดิม
- สร้าง
plan.mdก่อนเริ่มแก้ไข - Implement database migration
- Implement backend permission checks
- Implement workflow actions
- Implement versioning
- Implement preview page/modal
- Implement HRD Manager dashboard
- Implement scheduled publish
- Update employee visibility query
- Add audit log
- Add notification
- Test role-based behavior
- Test regression ทั้ง Announcement และ Online Lesson
- สร้างเอกสารสรุปหลังทำงานเสร็จ
Required Documents
หลังดำเนินการเสร็จ ต้องสร้างเอกสารไว้ในโฟลเดอร์ docs
ชื่อไฟล์แนะนำ:
docs/approval-publishing-workflow.md
เนื้อหาในเอกสารต้องมี:
- Summary
- Objective
- Scope
- Role & Permission Matrix
- Workflow Diagram
- Status Transition
- Versioning Design
- Preview Before Publish
- HRD Manager Dashboard
- Database Changes
- API Changes
- Security / Permission Checks
- Audit Log
- Notification
- Testing Summary
- Files Changed
- Known Issues / Follow-up Items
Testing Checklist
ต้องทดสอบอย่างน้อย:
HRD Staff
- สร้าง Draft ได้
- แก้ไข Draft ได้
- ลบ Draft ได้
- Submit ได้
- Publish ไม่ได้
- Approve ไม่ได้
- Schedule Publish ไม่ได้
HRD Manager
- เห็นรายการ Pending Approval
- Preview ได้
- Approve ได้
- Reject ได้
- Publish ได้
- Schedule Publish ได้
- Unpublish ได้
- Archive ได้
Admin IT
- ทำได้ทุก action
- เห็นทุกสถานะ
- Override Publish ได้
Employee
- เห็นเฉพาะ Published
- ไม่เห็น Draft / Pending / Approved / Scheduled / Rejected / Archived
- ไม่เห็น version เก่า
Versioning
- Published แล้วแก้ไขต้องสร้าง Draft Revision
- Publish version ใหม่แล้ว version เดิมไม่เป็น current
- Employee เห็นเฉพาะ current published version
Schedule Publish
- ตั้งเวลาเผยแพร่ได้
- ถึงเวลาแล้วเปลี่ยนเป็น Published
- ยกเลิก Schedule ได้
- Publish ทันทีได้
Important Rules
- ห้ามสร้างระบบใหม่ซ้ำ หากมี pattern เดิมอยู่แล้ว
- ต้อง reuse component, service, hook, validation, permission helper เดิมให้มากที่สุด
- ห้ามแก้เฉพาะ UI โดยไม่ป้องกัน backend
- ห้ามให้ HRD Staff publish ได้
- Admin IT ต้องเป็น Super Admin
- Employee ต้องเห็นเฉพาะ Published current version เท่านั้น
- ต้องสร้างเอกสารสรุปไว้ใน
docs - ต้องสร้าง
plan.mdก่อนลงมือแก้ไข - ต้องสร้าง report หลังแก้ไขเสร็จ
Final Deliverables
เมื่อทำเสร็จ ต้องมี:
- Code changes สำหรับ Approval & Publishing Workflow
- Database migration หรือ schema update
- Updated frontend pages/components
- Updated backend API/server actions
- Role-based permission enforcement
- Versioning support
- Preview before Publish
- HRD Manager Dashboard
- Scheduled Publish support
- Audit Log
- Notification integration
plan.mddocs/approval-publishing-workflow.md- Final implementation report