# Announcement Approval Workflow ## Background ปัจจุบันโมดูล Announcement และ Online Lesson มี Workflow ที่แตกต่างกัน ส่งผลให้ผู้ใช้งานเกิดความสับสน และทำให้ระบบมี Business Logic ซ้ำกันหลายส่วน ต้องการให้ Announcement ใช้ Approval Workflow เดียวกับ Online Lesson ทั้งในด้าน UI, Validation, Permission, Status และ Notification โดยยังคงพฤติกรรมของ Online Lesson ที่ทำงานถูกต้องอยู่แล้ว --- # Requirement ที่เข้าใจ ## Objective ปรับปรุงโมดูล Announcement ให้ใช้ Approval Workflow เดียวกับ Online Lesson ### Workflow ผู้สร้าง - Admin - HRD Staff สามารถ - บันทึกฉบับร่าง - ส่งตรวจสอบ HRD Manager สามารถ - Preview - Approve - Reject พร้อม Comment หลัง Approve เปลี่ยนสถานะเป็น Approved โดยไม่ Publish ทันที HRD Manager จึงสามารถ - Publish - Schedule Publish ได้ภายหลัง IT Admin และ Super Admin ยังคงสามารถดำเนินการทุกขั้นตอนได้ตามสิทธิ์ --- ## UI หน้าเพิ่มประกาศ - ลบ Dropdown สถานะ - ใช้ปุ่ม - บันทึกฉบับร่าง - ส่งตรวจสอบ เหมือนหน้าเพิ่มบทเรียนออนไลน์ทุกประการ --- ## Validation ใช้ Validation เดียวกับ Online Lesson Draft - บันทึกได้ตาม Logic ปัจจุบัน Submit - ต้องผ่าน Validation ทั้งหมด หาก Validation ไม่ผ่าน - ไม่เปลี่ยน Status - แสดง Error ทุก Field - ผู้ใช้สามารถแก้ไขแล้ว Submit ใหม่ได้ --- ## Status Announcement ต้องรองรับ - Draft - Pending Approval - Approved - Published - Scheduled - Rejected - Archived ใช้ Business Logic เดียวกับ Online Lesson --- ## Permission Admin / HRD Staff - Create - Edit Draft - Delete Draft - Submit HRD Manager - View Pending - Approve - Reject - Publish - Schedule Publish - Archive IT Admin - Full Access Super Admin - Full Access Employee - View Published Only --- ## Notification เมื่อ Submit แจ้งเตือน HRD Manager เมื่อ Approve แจ้งเตือนผู้สร้าง เมื่อ Reject แจ้งเตือนผู้สร้างพร้อมเหตุผล เมื่อ Publish แจ้งเตือนผู้สร้าง ใช้ Notification Pattern เดียวกับ Online Lesson --- # Scope of Work - แก้ไขเฉพาะโมดูล Announcement - ห้ามเปลี่ยนพฤติกรรมของ Online Lesson ที่ทำงานถูกต้องอยู่แล้ว - ห้ามเกิด Regression กับ Online Lesson - หากพบ Business Logic ซ้ำ สามารถ Refactor ได้เฉพาะส่วนที่ปลอดภัย - Reuse Shared Component, Shared Hook และ Shared Service หากมีอยู่แล้ว - ห้าม Copy Logic ของ Online Lesson มาใหม่โดยไม่จำเป็น --- # Technical Requirements ก่อนแก้ไขโค้ด - ตรวจสอบ Architecture ปัจจุบัน - ตรวจสอบ Shared Component - ตรวจสอบ Shared Hook - ตรวจสอบ Shared Service - ตรวจสอบ Permission Middleware - ตรวจสอบ Approval Flow - ตรวจสอบ Notification Flow ระหว่างแก้ไข - ใช้มาตรฐานของ Project - รักษา Type Safety - ไม่เพิ่ม Dead Code - ไม่เพิ่ม Duplicate Logic หลังแก้ไข - ตรวจสอบ TypeScript Error - ตรวจสอบ ESLint - ตรวจสอบ Build Error - ตรวจสอบ Permission - ตรวจสอบ Approval Workflow - ตรวจสอบ Notification - ตรวจสอบ UI Regression --- # Deliverables เมื่อดำเนินการเสร็จ ต้องส่งมอบ - โค้ดที่แก้ไขเรียบร้อย - ไม่มี TypeScript Error - ไม่มี ESLint Error - ไม่มี Build Error - Permission ทำงานถูกต้อง - Workflow ทำงานถูกต้อง - Validation ทำงานถูกต้อง - Notification ทำงานถูกต้อง - ไม่กระทบ Online Lesson และสร้างเอกสาร docs/announcement-approval-workflow-implementation-report.md ภายในเอกสารต้องประกอบด้วย 1. Executive Summary 2. Architecture Review 3. Files Modified 4. Business Logic Changes 5. UI Changes 6. Permission Changes 7. Workflow Changes 8. Refactoring Summary 9. Breaking Changes (ถ้ามี) 10. Regression Risk 11. Test Checklist - Create Draft - Submit - Approve - Reject - Publish - Schedule Publish - Notification - Permission - UI - Validation 12. Known Issues (ถ้ามี) 13. Recommendation