Files
alla-tms/docs/content-approval-workflow-implementation-report.md
2026-07-16 09:53:14 +07:00

120 lines
4.3 KiB
Markdown

# 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