830 lines
11 KiB
Markdown
830 lines
11 KiB
Markdown
# Prompt: Organizers Module Enhancement (CRUD + Soft Delete + Permission + Audit)
|
|
|
|
## Objective
|
|
|
|
ดำเนินการตรวจสอบ วิเคราะห์ ออกแบบ และพัฒนา Module **Organizers** ให้รองรับการจัดการข้อมูลแบบสมบูรณ์ (CRUD) โดยใช้หลักการ **Soft Delete** และสอดคล้องกับ Architecture ของระบบปัจจุบัน
|
|
|
|
การดำเนินการต้องครอบคลุม
|
|
|
|
- Create Organizer
|
|
- View Organizer
|
|
- Edit Organizer
|
|
- Soft Delete Organizer
|
|
- Permission Control
|
|
- Validation
|
|
- Audit Log
|
|
- UI/UX Improvement
|
|
- Regression Testing
|
|
- Documentation
|
|
|
|
---
|
|
|
|
# Background
|
|
|
|
ระบบนี้เป็น Training Management System (TMS)
|
|
|
|
Architecture หลัก
|
|
|
|
- Next.js App Router
|
|
- TypeScript
|
|
- Prisma ORM
|
|
- TanStack Query
|
|
- TanStack Form
|
|
- shadcn/ui
|
|
- Permission Template First
|
|
- RBAC + Permission
|
|
- Audit Log
|
|
- Multi Organization
|
|
|
|
ปัจจุบันหน้า Organizers สามารถสร้าง Organizer ได้เพียงบางส่วน และยังไม่มีความสามารถในการ
|
|
|
|
- แก้ไข
|
|
- ลบ
|
|
- Soft Delete
|
|
- Validation ครบถ้วน
|
|
- Audit
|
|
- Permission ครบ
|
|
|
|
---
|
|
|
|
# IMPORTANT
|
|
|
|
ก่อนแก้ไข
|
|
|
|
AI ต้องตรวจสอบ Architecture เดิมก่อนทุกครั้ง
|
|
|
|
ห้ามสร้าง Pattern ใหม่ หากระบบมี Pattern เดิมอยู่แล้ว
|
|
|
|
ต้อง Reuse
|
|
|
|
- Shared Components
|
|
- Shared Dialog
|
|
- Shared Form
|
|
- Shared Validation
|
|
- Shared Permission
|
|
- Shared Toast
|
|
- Shared Table/Card Pattern
|
|
- Shared API Pattern
|
|
- Shared Service Layer
|
|
|
|
---
|
|
|
|
# Phase 0 — Architecture Audit
|
|
|
|
ก่อนแก้ไข
|
|
|
|
ตรวจสอบ
|
|
|
|
## Frontend
|
|
|
|
- Organizer Page
|
|
- Organizer List
|
|
- Organizer Card
|
|
- Create Form
|
|
- Existing Components
|
|
- Dialog Pattern
|
|
- Sheet Pattern
|
|
- Toast Pattern
|
|
|
|
---
|
|
|
|
## Backend
|
|
|
|
ตรวจสอบ
|
|
|
|
- API Routes
|
|
- Route Handlers
|
|
- Server Actions
|
|
- Service Layer
|
|
- Repository
|
|
- Prisma Queries
|
|
|
|
---
|
|
|
|
## Database
|
|
|
|
ตรวจสอบ
|
|
|
|
Organizer Model
|
|
|
|
เช่น
|
|
|
|
- id
|
|
- name
|
|
- slug
|
|
- createdAt
|
|
- updatedAt
|
|
|
|
ตรวจสอบว่ามี
|
|
|
|
- status
|
|
- isActive
|
|
- deletedAt
|
|
- deletedBy
|
|
|
|
อยู่แล้วหรือไม่
|
|
|
|
ห้ามเดา
|
|
|
|
ต้องอ้างอิงจาก Schema จริง
|
|
|
|
---
|
|
|
|
## Permission
|
|
|
|
ตรวจสอบ
|
|
|
|
ระบบใช้
|
|
|
|
Permission
|
|
|
|
หรือ
|
|
|
|
Business Role
|
|
|
|
หรือ
|
|
|
|
ทั้งสอง
|
|
|
|
ให้ใช้ Pattern เดิมของระบบ
|
|
|
|
---
|
|
|
|
# Phase 1 — Feature Analysis
|
|
|
|
วิเคราะห์ Feature ปัจจุบัน
|
|
|
|
ระบุว่า
|
|
|
|
สิ่งใดทำได้แล้ว
|
|
|
|
สิ่งใดยังไม่มี
|
|
|
|
เช่น
|
|
|
|
✅ View
|
|
|
|
✅ Create
|
|
|
|
❌ Edit
|
|
|
|
❌ Delete
|
|
|
|
❌ Soft Delete
|
|
|
|
❌ Validation
|
|
|
|
❌ Audit
|
|
|
|
---
|
|
|
|
# Phase 2 — UI Enhancement
|
|
|
|
ปรับปรุงหน้า Organizers
|
|
|
|
## Organizer List
|
|
|
|
แต่ละ Organizer Card
|
|
|
|
ให้มี
|
|
|
|
- Name
|
|
- Slug
|
|
- Status
|
|
- Created Date
|
|
|
|
และ Action
|
|
|
|
```
|
|
Edit
|
|
Delete
|
|
```
|
|
|
|
ใช้ Component Pattern เดิมของระบบ
|
|
|
|
---
|
|
|
|
## Empty State
|
|
|
|
หากไม่มี Organizer
|
|
|
|
แสดง
|
|
|
|
```
|
|
ยังไม่มี Organizer
|
|
```
|
|
|
|
พร้อมปุ่ม
|
|
|
|
```
|
|
สร้าง Organizer
|
|
```
|
|
|
|
---
|
|
|
|
## Loading
|
|
|
|
รองรับ
|
|
|
|
Loading
|
|
|
|
Skeleton
|
|
|
|
Spinner
|
|
|
|
ตามมาตรฐานของระบบ
|
|
|
|
---
|
|
|
|
## Error State
|
|
|
|
รองรับ
|
|
|
|
Error
|
|
|
|
Retry
|
|
|
|
---
|
|
|
|
# Phase 3 — Create Organizer
|
|
|
|
ตรวจสอบ Flow เดิม
|
|
|
|
ปรับปรุง Validation
|
|
|
|
Required
|
|
|
|
- Organizer Name
|
|
|
|
Validation
|
|
|
|
- Required
|
|
- Trim
|
|
- Duplicate
|
|
- Max Length
|
|
- Invalid Character
|
|
|
|
Slug
|
|
|
|
สร้างตาม Pattern เดิมของระบบ
|
|
|
|
ห้าม Hardcode
|
|
|
|
---
|
|
|
|
# Phase 4 — Edit Organizer
|
|
|
|
เพิ่มความสามารถ
|
|
|
|
Edit Organizer
|
|
|
|
สามารถแก้ไข
|
|
|
|
- Organizer Name
|
|
|
|
หากระบบรองรับ
|
|
|
|
สามารถแก้ไข
|
|
|
|
- Description
|
|
- Status
|
|
|
|
ห้ามแก้ไข
|
|
|
|
- Organizer ID
|
|
|
|
ห้ามเปลี่ยนข้อมูลที่กระทบ Foreign Key
|
|
|
|
---
|
|
|
|
ใช้
|
|
|
|
Dialog
|
|
|
|
หรือ
|
|
|
|
Sheet
|
|
|
|
ตาม Pattern เดิมของระบบ
|
|
|
|
---
|
|
|
|
# Phase 5 — Soft Delete
|
|
|
|
ระบบต้องใช้
|
|
|
|
Soft Delete เท่านั้น
|
|
|
|
ห้ามใช้
|
|
|
|
```ts
|
|
delete()
|
|
```
|
|
|
|
เด็ดขาด
|
|
|
|
ต้องใช้
|
|
|
|
```ts
|
|
update();
|
|
```
|
|
|
|
พร้อมเปลี่ยนสถานะ
|
|
|
|
เช่น
|
|
|
|
```
|
|
isActive = false
|
|
```
|
|
|
|
หรือ
|
|
|
|
```
|
|
status = INACTIVE
|
|
```
|
|
|
|
หรือ Pattern เดิมของระบบ
|
|
|
|
หากไม่มี Field รองรับ
|
|
|
|
ให้เพิ่มตามมาตรฐานเดิมของ Project
|
|
|
|
เช่น
|
|
|
|
```prisma
|
|
isActive Boolean @default(true)
|
|
|
|
deletedAt DateTime?
|
|
|
|
deletedBy String?
|
|
```
|
|
|
|
---
|
|
|
|
# Soft Delete Rule
|
|
|
|
เมื่อ Delete
|
|
|
|
ข้อมูล
|
|
|
|
Users
|
|
|
|
Training
|
|
|
|
Permission
|
|
|
|
Audit
|
|
|
|
History
|
|
|
|
ต้องยังอยู่ครบ
|
|
|
|
Frontend
|
|
|
|
ต้องไม่แสดง Organizer
|
|
|
|
แต่ Database
|
|
|
|
ต้องยังมีข้อมูล
|
|
|
|
---
|
|
|
|
# Confirmation Dialog
|
|
|
|
ก่อน Delete
|
|
|
|
แสดง Dialog
|
|
|
|
```
|
|
ยืนยันการปิดใช้งาน Organizer
|
|
|
|
Organizer นี้จะไม่ถูกลบออกจากฐานข้อมูล
|
|
|
|
ข้อมูลทั้งหมดจะยังคงอยู่
|
|
|
|
แต่จะไม่สามารถใช้งานได้
|
|
|
|
ต้องการดำเนินการต่อหรือไม่
|
|
```
|
|
|
|
Buttons
|
|
|
|
```
|
|
Cancel
|
|
|
|
Delete
|
|
```
|
|
|
|
Delete
|
|
|
|
ใช้
|
|
|
|
Destructive Variant
|
|
|
|
---
|
|
|
|
# Phase 6 — Query Update
|
|
|
|
ทุก Query
|
|
|
|
ที่ดึง Organizer
|
|
|
|
ต้องกรองเฉพาะ
|
|
|
|
Active
|
|
|
|
เช่น
|
|
|
|
```ts
|
|
where;
|
|
|
|
status = ACTIVE;
|
|
```
|
|
|
|
หรือ
|
|
|
|
```
|
|
isActive = true
|
|
```
|
|
|
|
ตาม Pattern เดิม
|
|
|
|
รวมถึง
|
|
|
|
- Organizer Switcher
|
|
- Dropdown
|
|
- Select
|
|
- Search
|
|
- API
|
|
- Dashboard
|
|
|
|
---
|
|
|
|
# Phase 7 — Validation
|
|
|
|
ตรวจสอบ
|
|
|
|
Frontend
|
|
|
|
Backend
|
|
|
|
API
|
|
|
|
Validation
|
|
|
|
ทั้งหมด
|
|
|
|
เช่น
|
|
|
|
Required
|
|
|
|
Duplicate
|
|
|
|
Slug
|
|
|
|
Name Length
|
|
|
|
Invalid Character
|
|
|
|
Inactive Record
|
|
|
|
Not Found
|
|
|
|
---
|
|
|
|
# Phase 8 — Permission
|
|
|
|
ใช้
|
|
|
|
Permission First
|
|
|
|
หากระบบรองรับแล้ว
|
|
|
|
ห้ามใช้
|
|
|
|
```
|
|
isHRD()
|
|
|
|
businessRole
|
|
```
|
|
|
|
หาก Architecture ใหม่รองรับ Permission แล้ว
|
|
|
|
ใช้ Permission เดิมของระบบ
|
|
|
|
เช่น
|
|
|
|
```
|
|
organization:view
|
|
|
|
organization:create
|
|
|
|
organization:update
|
|
|
|
organization:delete
|
|
|
|
organization:manage
|
|
```
|
|
|
|
หรือ Permission ที่มีอยู่จริง
|
|
|
|
---
|
|
|
|
เฉพาะ
|
|
|
|
IT Admin
|
|
|
|
Super Admin
|
|
|
|
เท่านั้น
|
|
|
|
ที่สามารถ
|
|
|
|
Create
|
|
|
|
Edit
|
|
|
|
Delete
|
|
|
|
ได้
|
|
|
|
Role อื่น
|
|
|
|
ต้อง
|
|
|
|
- ไม่เห็นปุ่ม
|
|
- เรียก API ไม่ได้
|
|
- ได้ 403
|
|
|
|
---
|
|
|
|
# Phase 9 — Audit Log
|
|
|
|
หากระบบรองรับ Audit
|
|
|
|
ให้บันทึก
|
|
|
|
```
|
|
ORGANIZATION_CREATED
|
|
|
|
ORGANIZATION_UPDATED
|
|
|
|
ORGANIZATION_SOFT_DELETED
|
|
```
|
|
|
|
ข้อมูลที่ควรบันทึก
|
|
|
|
- Organization ID
|
|
- Name
|
|
- User
|
|
- Time
|
|
- Old Value
|
|
- New Value
|
|
|
|
ตาม Pattern เดิม
|
|
|
|
---
|
|
|
|
# Phase 10 — Regression Testing
|
|
|
|
ตรวจสอบ
|
|
|
|
## Create
|
|
|
|
- Success
|
|
- Validation
|
|
- Duplicate
|
|
|
|
---
|
|
|
|
## Edit
|
|
|
|
- Success
|
|
- Validation
|
|
|
|
---
|
|
|
|
## Delete
|
|
|
|
- Confirmation
|
|
- Soft Delete
|
|
- ไม่ลบจริง
|
|
|
|
---
|
|
|
|
## Query
|
|
|
|
Inactive
|
|
|
|
ต้องไม่แสดง
|
|
|
|
---
|
|
|
|
## Switcher
|
|
|
|
Inactive
|
|
|
|
ต้องไม่แสดง
|
|
|
|
---
|
|
|
|
## Permission
|
|
|
|
Employee
|
|
|
|
ห้ามเห็น
|
|
|
|
Staff
|
|
|
|
ห้ามเห็น
|
|
|
|
Manager
|
|
|
|
ห้ามเห็น
|
|
|
|
IT
|
|
|
|
ใช้งานได้
|
|
|
|
Super Admin
|
|
|
|
ใช้งานได้
|
|
|
|
---
|
|
|
|
## Database
|
|
|
|
ตรวจสอบ
|
|
|
|
Record
|
|
|
|
ยังอยู่
|
|
|
|
แต่
|
|
|
|
Inactive
|
|
|
|
---
|
|
|
|
## TypeScript
|
|
|
|
ไม่มี
|
|
|
|
Type Error
|
|
|
|
---
|
|
|
|
## ESLint
|
|
|
|
ไม่มี Error
|
|
|
|
---
|
|
|
|
## Console
|
|
|
|
ไม่มี
|
|
|
|
console.log
|
|
|
|
---
|
|
|
|
# Phase 11 — Code Quality
|
|
|
|
ตรวจสอบ
|
|
|
|
- Reuse Existing Components
|
|
- Reuse Existing Dialog
|
|
- Reuse Existing Form
|
|
- Reuse Existing Mutation
|
|
- Reuse Existing Query
|
|
- ไม่มี Duplicate Logic
|
|
- ไม่มี Dead Code
|
|
- ไม่มี Unused Import
|
|
- ไม่มี any ใหม่
|
|
- ไม่มี Hardcode
|
|
|
|
---
|
|
|
|
# Deliverables
|
|
|
|
แก้ไข
|
|
|
|
Source Code
|
|
|
|
เฉพาะส่วนที่จำเป็น
|
|
|
|
---
|
|
|
|
สร้างรายงาน
|
|
|
|
```
|
|
docs/organizers-module-enhancement-report.md
|
|
```
|
|
|
|
---
|
|
|
|
# Report Structure
|
|
|
|
```
|
|
# Organizers Module Enhancement Report
|
|
|
|
## Executive Summary
|
|
|
|
## Current Architecture
|
|
|
|
## Current Limitation
|
|
|
|
## Root Cause Analysis
|
|
|
|
## Feature Comparison
|
|
|
|
Before
|
|
|
|
After
|
|
|
|
## Files Modified
|
|
|
|
## Database Changes
|
|
|
|
## API Changes
|
|
|
|
## UI Changes
|
|
|
|
## Permission Changes
|
|
|
|
## Validation Changes
|
|
|
|
## Soft Delete Design
|
|
|
|
## Audit Log
|
|
|
|
## Testing Result
|
|
|
|
### Create
|
|
|
|
### Edit
|
|
|
|
### Delete
|
|
|
|
### Permission
|
|
|
|
### Regression
|
|
|
|
## Risks
|
|
|
|
## Recommendations
|
|
|
|
## Future Improvements
|
|
```
|
|
|
|
---
|
|
|
|
# Constraints
|
|
|
|
ห้าม
|
|
|
|
- Physical Delete
|
|
- Hardcode Permission
|
|
- Hardcode Role
|
|
- Hardcode Organization ID
|
|
- เปลี่ยน Business Logic
|
|
- เปลี่ยน Database Schema โดยไม่จำเป็น
|
|
- เพิ่ม Library ใหม่
|
|
- ใช้ any
|
|
- ลบข้อมูลจริง
|
|
- Refactor Module อื่นที่ไม่เกี่ยวข้อง
|
|
|
|
ต้อง
|
|
|
|
- ใช้ Shared Components
|
|
- ใช้ Shared Permission
|
|
- ใช้ Shared Validation
|
|
- ใช้ Shared API Pattern
|
|
- ใช้ Shared Service Pattern
|
|
- รักษา Type Safety
|
|
- รักษา Coding Standard
|
|
- รักษา Backward Compatibility
|
|
|
|
---
|
|
|
|
# Final Response
|
|
|
|
เมื่อดำเนินการเสร็จ ให้สรุปผลเป็นภาษาไทย โดยประกอบด้วย
|
|
|
|
1. Executive Summary
|
|
2. Root Cause ที่พบ
|
|
3. รายการ Feature ที่เพิ่ม
|
|
4. รายชื่อไฟล์ที่แก้ไข
|
|
5. การออกแบบ Soft Delete
|
|
6. Permission ที่ใช้
|
|
7. Validation ที่เพิ่ม
|
|
8. ผลการทดสอบ (Create / Edit / Delete / Permission / Regression)
|
|
9. ความเสี่ยงที่เหลือ (ถ้ามี)
|
|
10. Path ของรายงาน
|
|
|
|
```
|
|
docs/organizers-module-enhancement-report.md
|
|
```
|
|
|
|
พร้อมระบุหากพบ Technical Debt หรือข้อเสนอแนะในการพัฒนาต่อในอนาคต
|