# Prompt: Redesign Online Lesson Create Workflow (Draft & Submit for Review)

## Objective

ปรับปรุงหน้า **Create Online Lesson**

```
/dashboard/online-lessons/manage/new
```

โดยเปลี่ยนจากการให้ผู้ใช้เลือก **สถานะ (Status)** ผ่าน Dropdown

เป็นการใช้ **Action Button** เพื่อกำหนด Workflow แทน

พร้อมปรับทั้ง Frontend, Backend, Validation, Permission และ Workflow ให้รองรับ Approval Process ของระบบ

---

# Background

ระบบกำลังเปลี่ยนจากการให้ผู้ใช้เลือก Status เอง

เช่น

```
Draft

Pending Review

Published
```

ซึ่งไม่เหมาะสม

เป็น

Workflow Based

โดยผู้ใช้จะไม่สามารถเลือก Status เองได้

แต่ Status จะถูกกำหนดจาก Action ที่ผู้ใช้เลือกแทน

---

# Business Requirement

Staff

สามารถ

- บันทึกฉบับร่าง
- ส่งตรวจสอบ

Manager

สามารถ

- ตรวจสอบ
- อนุมัติ

IT Admin

สามารถ

- ตรวจสอบ
- อนุมัติ
- เผยแพร่

Super Admin

สามารถทำได้ทั้งหมด

---

# IMPORTANT

ก่อนแก้ไข

AI ต้องตรวจสอบ Existing Architecture ก่อน

ต้อง Audit

- Online Lesson Form
- Validation
- Submit Handler
- API
- Status Enum
- Status Constant
- Workflow
- Permission
- Notification
- Audit

ห้ามเดา

ห้าม Hardcode

ห้ามสร้าง Pattern ใหม่ หากระบบมี Pattern เดิมอยู่แล้ว

ต้อง Reuse

- Shared Form
- Shared Button
- Shared Mutation
- Shared Status
- Shared Permission
- Shared Dialog
- Shared Toast
- Shared Validation

---

# Phase 0 — Architecture Audit

ตรวจสอบ

## Frontend

- Create Page
- Edit Page
- Form Component
- Status Select
- Submit Function
- Button Component

---

## Backend

ตรวจสอบ

- API
- Route Handler
- Server Action
- Validation
- Service
- Repository

---

## Database

ตรวจสอบ

Status Field

เช่น

```
status

workflowStatus

lessonStatus
```

และ Enum

ที่ระบบใช้อยู่จริง

---

## Permission

ตรวจสอบ

Permission First

หรือ

Compatibility Mode

ห้ามใช้

```
businessRole

isHRD()
```

หากระบบมี Permission แล้ว

---

# Phase 1 — Remove Status Field

ลบ

```
สถานะ *
```

ออกจาก

Online Lesson Create Form

ผู้ใช้

ห้าม

เลือก Status เอง

---

ตรวจสอบ

- Form
- Schema
- Validation
- Default Value
- Payload

ให้สอดคล้องกันทั้งหมด

---

# Phase 2 — Redesign Action Buttons

เปลี่ยน Footer Action

จาก

```
Cancel

Create
```

เป็น

```
ยกเลิก

บันทึกฉบับร่าง

ส่งตรวจสอบ
```

---

Layout

```
---------------------------------------------------

Cancel

Save Draft

Submit For Review
```

Primary Button

คือ

```
ส่งตรวจสอบ
```

Secondary Button

คือ

```
บันทึกฉบับร่าง
```

---

# Phase 3 — Draft Action

เมื่อกด

```
บันทึกฉบับร่าง
```

ระบบต้อง

Save

พร้อม Status

```
DRAFT
```

หรือ

Status เดิมของระบบ

ห้าม Hardcode

---

Draft

สามารถ

Edit

Delete

ได้

เฉพาะ

Owner

ตาม Permission เดิม

---

# Phase 4 — Submit For Review

เมื่อกด

```
ส่งตรวจสอบ
```

ระบบต้อง

Save

พร้อม Status

```
PENDING_REVIEW
```

หรือ

Status เดิมของระบบ

ห้าม Hardcode

---

Validation

ต้องใช้

Validation

สำหรับ

Ready To Review

ไม่ใช่ Validation ของ Draft

---

เมื่อ Submit สำเร็จ

แสดง Toast

เช่น

```
ส่งบทเรียนเพื่อตรวจสอบเรียบร้อยแล้ว
```

---

# Phase 5 — Validation

ตรวจสอบ

Validation

แยกตาม Action

---

## Save Draft

Validation

สามารถผ่อนปรนได้

หากระบบรองรับ Draft Validation

เช่น

Title

อาจยังไม่ครบ

แต่สามารถ Save ได้

---

## Submit

Validation

ต้องครบทุก Field

เช่น

- Title
- Description
- Category
- Video
- Cover
- Duration

หรือ Field ที่ระบบกำหนด

ต้องผ่านทั้งหมด

---

# Phase 6 — Backend

ตรวจสอบ

API

ห้ามรับ

Status

จาก User

แบบอิสระ

เช่น

```
Published

Approved

Rejected
```

ผ่าน Create API

---

API

ต้องรองรับ

Action

เช่น

```
draft

submit
```

หรือ

Status

ที่ถูกตรวจสอบแล้ว

ตาม Pattern ของระบบ

---

ต้อง Validate

Transition

เช่น

Draft

↓

Pending Review

ถูกต้อง

แต่

Draft

↓

Published

ต้องห้าม

---

# Phase 7 — Permission

## Staff

เห็น

```
Save Draft

Submit
```

ไม่เห็น

Approve

Publish

Reject

---

## Manager

สามารถ

Approve

Return

Reject

จากหน้า Review

ไม่ใช่จากหน้า Create

---

## IT Admin

สามารถ

Approve

Publish

Return

Reject

ตาม Workflow

---

## Super Admin

สามารถ

ทำได้ทั้งหมด

---

# Phase 8 — Notification

เมื่อ

Submit

แจ้ง

Manager

IT

---

เมื่อ

Return

แจ้ง

Author

---

เมื่อ

Approve

แจ้ง

Author

---

เมื่อ

Publish

แจ้ง

Author

---

ใช้

Notification Pattern

เดิมของระบบ

---

# Phase 9 — Audit

สร้าง Audit

เช่น

```
ONLINE_LESSON_DRAFT_SAVED

ONLINE_LESSON_SUBMITTED
```

ข้อมูล

- User
- Action
- Previous Status
- New Status
- Timestamp

---

# Phase 10 — UI

Status

ไม่ต้องแสดง

ใน Form

แต่

List

และ

Detail

ยังต้องแสดง

Badge

ตามเดิม

เช่น

```
Draft

Pending Review

Approved

Published
```

---

# Phase 11 — Regression Testing

ตรวจสอบ

## UI

- ไม่มี Status Dropdown
- มี Save Draft
- มี Submit

---

## Draft

- Save สำเร็จ
- Status ถูกต้อง
- Edit ได้
- Delete ได้

---

## Submit

- Validation ครบ
- Status Pending Review
- Toast ถูกต้อง

---

## Permission

Staff

ไม่สามารถ

Publish

Approve

Reject

---

Manager

Approve

ได้

---

IT

Publish

ได้

---

## Database

Status

ถูกต้อง

---

## API

ไม่สามารถส่ง

Published

ตรงจาก Create

---

## Notification

ส่งครบ

---

## Audit

บันทึกครบ

---

# Code Quality

ตรวจสอบ

- ไม่มี Duplicate Logic
- ไม่มี Hardcode Status
- ไม่มี Hardcode Role
- ไม่มี any ใหม่
- ไม่มี console.log
- ไม่มี Dead Code
- Reuse Existing Components
- Reuse Existing Workflow

---

# Documentation

สร้างรายงาน

```
docs/online-lesson-create-workflow-redesign-report.md
```

---

รายงานต้องมี

```md
# Online Lesson Create Workflow Redesign Report

## Executive Summary

## Current Architecture

## Current Limitation

## Workflow Design

## Status Mapping

## Action Mapping

## Permission Matrix

## Validation Changes

## Backend Changes

## UI Changes

## Notification

## Audit Log

## Files Modified

## Testing Result

## Regression Result

## Risks

## Recommendations
```

---

# Future Improvements

เสนอแนวทาง

เช่น

- Approval Timeline
- Review Comment
- Multiple Reviewer
- Scheduled Publish
- Workflow Configuration
- Content Versioning

---

# Constraints

ห้าม

- ให้ User เลือก Status เอง
- Hardcode Status
- Hardcode Permission
- Duplicate Workflow
- เพิ่ม Library ใหม่
- ใช้ any
- เปลี่ยน Business Logic อื่น

ต้อง

- ใช้ Shared Workflow
- ใช้ Shared Permission
- ใช้ Shared Validation
- ใช้ Shared Status
- ใช้ Shared Notification
- รักษา Type Safety
- รักษา Coding Standard

---

# Final Response

เมื่อดำเนินการเสร็จ

ให้สรุปเป็นภาษาไทย

1. Architecture ที่ตรวจพบ
2. Workflow ใหม่
3. การ Mapping ระหว่าง Action กับ Status
4. Permission Matrix
5. Validation ที่เปลี่ยน
6. Backend ที่แก้ไข
7. Notification
8. Audit Log
9. รายชื่อไฟล์ที่แก้ไข
10. ผลการทดสอบ
11. ความเสี่ยงที่เหลือ
12. Path ของรายงาน

```
docs/online-lesson-create-workflow-redesign-report.md
```
