# 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 -> published` - `pending_review -> returned` - `pending_review -> rejected` - `published -> archived` - `returned/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 รองรับสถานะ: - `draft` - `pending_review` - `approved` - `published` - `returned` - `rejected` - `archived` ## 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_SUBMITTED` - `CONTENT_APPROVED` - `CONTENT_RETURNED` - `CONTENT_REJECTED` - `CONTENT_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.ts` - `src/db/schema.ts` - `drizzle/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