4.3 KiB
4.3 KiB
Content Approval Workflow Report
Executive Summary
เพิ่ม shared approval workflow สำหรับ announcements และ online-lessons บนสถาปัตยกรรมเดิมของโปรเจกต์ โดย reuse Route Handlers, Drizzle, Auth.js permission helpers, audit logs, notifications, และ TanStack Query mutation flow ที่มีอยู่แล้ว
Current Architecture
- Frontend ใช้ Next.js App Router + feature modules ใต้
src/features - Backend ใช้
src/app/api/**/route.tsเป็น app boundary - Authorization ใช้
requireOrganizationAccess()และ effective permissions - Persistence ใช้ PostgreSQL + Drizzle
- Client data flow ใช้ React Query ผ่าน
api/service.ts
Workflow Design
ใช้ shared workflow logic กลางที่ src/features/content-approval/lib/workflow.ts
รองรับ flow:
draft -> pending_review -> approved -> publishedpending_review -> returnedpending_review -> rejectedpublished -> archivedreturned/rejected -> submit ใหม่
Permission Matrix
- Staff: create, edit draft, delete draft, submit
- Reviewer/Manager/IT/Admin: approve, return, reject, publish, archive
- Owner สามารถแก้ไขได้เฉพาะ
draft,returned,rejectedตาม permission - Server-side route handlers ตรวจ permission และ transition ทุกครั้ง
Status Transition
รองรับสถานะ:
draftpending_reviewapprovedpublishedreturnedrejectedarchived
UI Changes
- เพิ่ม shared
ContentApprovalStatusBadge - Announcement form/list/detail รองรับ workflow ใหม่
- Online lesson form/list/detail/action menu รองรับ workflow ใหม่
- ปุ่ม/เมนู action แสดงตาม permission และสถานะจริง
- เพิ่ม draft delete flow สำหรับ announcements
Backend Changes
- ขยาย schema และ migration สำหรับ workflow metadata
- เพิ่ม validation และ status transition guard ใน route handlers
- เพิ่ม announcement delete endpoint
- serialize metadata กลับไปยัง frontend ทั้งสองโมดูล
Notification
reuse notification service เดิม และเพิ่ม event:
CONTENT_SUBMITTEDCONTENT_APPROVEDCONTENT_RETURNEDCONTENT_REJECTEDCONTENT_PUBLISHED
Audit Log
เพิ่ม audit actions สำหรับ:
- announcement submit/approve/return/reject/publish/archive/delete
- online lesson submit/approve/return/reject/publish/archive/delete
Files Modified
src/features/content-approval/**src/app/api/announcements/**src/app/api/online-lessons/**src/features/announcements/**src/features/online-lessons/**src/features/notifications/**src/features/audit-logs/server/audit-service.tssrc/db/schema.tsdrizzle/0019_content_approval_workflow.sql
Testing Result
npx tsc --noEmit- workflow-related changesผ่าน
- ยังเหลือ error เดิมใน
src/features/permission-management/components/user-permission-sheet.tsx
Regression Result
- Announcement และ Online Lesson ใช้ workflow shared เดียวกันแล้ว
- Route handlers บังคับ permission และ invalid transition แล้ว
- List/detail/form ของทั้งสองโมดูลรับ metadata และสถานะใหม่แล้ว
Risks
- review comment ตอน approve/return/reject ยังไม่ได้ทำเป็น dedicated form/dialog กลาง
- ไฟล์บางส่วนมีข้อความไทย encoding เพี้ยนจาก state เดิมของ repo ควรเก็บ cleanup แยก
Recommendations
- เพิ่ม shared reviewer action dialog สำหรับ comment-required actions
- เพิ่ม pending review dashboard widget
- เพิ่ม integration tests สำหรับ permission matrix และ transition rules
Future Improvements
- Scheduled publish
- Multiple reviewers
- Approval history timeline
- Versioning
- Workflow configuration per module