# 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
