
# แผนการพัฒนา Frontend Next.js สำหรับ DMS v1.3.0

## การเตรียมความพร้อมและการติดตั้ง (Prerequisites & Setup)

- [ ] สร้าง Next.js Project ใหม่ (App Router)

  ```bash
    npx create-next-app@latest frontend --typescript --tailwind --eslint --app
  ```

- [ ] ติดตั้ง Dependencies หลักๆ ตามเอกสาร FullStackJS
  - [ ] UI Library: `@shadcn/ui` และ dependencies ที่เกี่ยวข้อง
  - [ ] State Management: `zustand`
  - [ ] Server State: `@tanstack/react-query`
  - [ ] Form Handling: `react-hook-form`, `zod`, `@hookform/resolvers`
  - [ ] File Upload: `react-dropzone`
  - [ ] Icons: `lucide-react`
  - [ ] Testing: `vitest`, `@testing-library/react`, `@testing-library/jest-dom`, `@playwright/test`
- [ ] ตั้งค่าโครงสร้างโปรเจกต์

  ```
    src/
    ├── app/                    # App Router
    │   ├── (dashboard)/        # Route Groups
    │   ├── api/                # API Routes (ถ้าจำเป็น)
    │   ├── globals.css
    │   ├── layout.tsx
    │   └── page.tsx
    ├── components/             # Reusable UI Components
    │   ├── ui/                 # shadcn/ui components
    │   ├── forms/              # Form Components
    │   └── features/           # Feature-specific Components
    ├── lib/                    # Utility functions
    │   ├── api.ts              # Axios/Fetch wrapper
    │   ├── auth.ts             # Auth helpers
    │   └── utils.ts
    ├── hooks/                  # Custom React Hooks
    ├── store/                  # Zustand stores
    └── types/                  # TypeScript type definitions
  ```

- [ ] ตั้งค่า Tailwind CSS และ shadcn/ui
- [ ] ตั้งค่า React Query ใน `app/providers.tsx` และครอบใน `layout.tsx`
- [ ] ตั้งค่า Zustand store สำหรับ Global State (เช่น User, Auth)

---

## Phase 1: การสร้างรากฐานและการยืนยันตัวตน (Foundation & Authentication) - สัปดาห์ที่ 1-2

- [ ] พัฒนา Layout หลัก (App Shell - Req 5.1)
  - [ ] สร้าง `Navbar` Component (ชื่อระบบ, เมนูผู้ใช้, ปุ่ม Logout)
  - [ ] สร้าง `Sidebar` Component (เมนูการนำทางหลัก)
  - [ ] สร้าง `MainContent` Component สำหรับแสดงผลหน้าต่างๆ
  - [ ] ประกอบ Component ทั้งหมดใน `layout.tsx`
- [ ] พัฒนาระบบ Authentication
  - [ ] สร้าง `LoginPage` Component (ใช้ `react-hook-form` + `zod`)
  - [ ] สร้าง Auth Store ด้วย Zustand (เก็บ User, Token, สถานะการล็อกอิน)
  - [ ] สร้าง `useAuth` Hook สำหรับเข้าถึง Auth State
  - [ ] สร้าง API functions สำหรับ Login, Logout, Get Profile
  - [ ] สร้าง Middleware สำหรับป้องกัน Route ที่ต้องการ Login
- [ ] สร้าง `ProfilePage` (Req 5.5)
  - [ ] แสดงข้อมูลผู้ใช้
  - [ ] ฟอร์มแก้ไขข้อมูลส่วนตัว
  - [ ] ฟอร์มเปลี่ยนรหัสผ่าน

---

## Phase 2: พัฒนาคอมโพเนนต์หลักและหน้า Dashboard (Core Components & Dashboard) - สัปดาห์ที่ 3-4

- [ ] พัฒนา Reusable Components พื้นฐาน
  - [ ] `DataTable` Component (รองรับ Server-side Pagination, Sorting, Filtering)
  - [ ] `FormSelect`, `FormInput`, `FormTextarea` (ครอบด้วย `react-hook-form`)
  - [ ] `LoadingSpinner`, `ErrorAlert` Components
  - [ ] `ConfirmDialog` Component
- [ ] พัฒนา `FileUpload` Component (Req 5.7)
  - [ ] ใช้ `react-dropzone` สำหรับ Drag-and-Drop
  - [ ] รองรับการอัปโหลดหลายไฟล์
  - [ ] มี Checkbox ให้เลือก "เอกสารหลัก" (Main Document)
  - [ ] แสดงรายการไฟล์ที่เลือกพร้อมตัวเลือกลบ
- [ ] พัฒนา `AttachmentList` Component
  - [ ] แสดงรายการไฟล์แนบที่เชื่อมโยงกับเอกสาร
  - [ ] แสดง Badge "เอกสารหลัก"
  - [ ] ปุ่มดาวน์โหลดแต่ละไฟล์
- [ ] พัฒนา `DashboardPage` (Req 5.3)
  - [ ] สร้าง `KpiCard` Component สำหรับแสดงข้อมูลสรุป
  - [ ] สร้าง `MyTasksTable` Component
    - [ ] ดึงข้อมูลจาก API endpoint ที่เชื่อมต่อกับ View `v_user_tasks`
    - [ ] แสดงคอลัมน์: ชื่อเอกสาร, ประเภท, วันครบกำหนด, สถานะ
    - [ ] ปุ่ม "ดำเนินการ" ที่นำไปยังหน้าที่เกี่ยวข้อง

---

## Phase 3: พัฒนาโมดูลเอกสารโต้ตอบและเวิร์กโฟลว์ (Correspondence & Workflow Modules) - สัปดาห์ที่ 5-7

- [ ] พัฒนา `CorrespondenceModule` (Req 3.2)
  - [ ] หน้ารายการเอกสาร (`/correspondences`)
    - [ ] `DataTable` พร้อม Filter: โครงการ, ประเภทเอกสาร, ช่วงวันที่, ผู้ส่ง/ผู้รับ
    - [ ] ปุ่ม "สร้างใหม่", "ดู", "แก้ไข" (ตามสิทธิ์)
  - [ ] หน้าสร้าง/แก้ไขเอกสาร (`/correspondences/new`, `/correspondences/[id]/edit`)
    - [ ] ฟอร์มสร้างเอกสาร (ใช้ `react-hook-form`)
    - [ ] Dropdowns ที่เชื่อมโยงกัน (Project -> Contract)
    - [ ] การเลือกผู้รับ (To/CC) หลายองค์กร
    - [ ] การใส่ Tag
    - [ ] การเชื่อมโยงเอกสารอ้างอิง
    - [ ] ใช้ `FileUpload` และ `AttachmentList` Components
  - [ ] หน้ารายละเอียดเอกสาร (`/correspondences/[id]`)
    - [ ] แสดงข้อมูลทั้งหมดของเอกสาร
    - [ ] แสดงประวัติการแก้ไข (Revisions)
    - [ ] แสดงสถานะการส่งต่อ (Routings)
- [ ] พัฒนา `RfaModule` (Req 3.5, 5.6)
  - [ ] ฟังก์ชันพื้นฐานคล้ายกับ CorrespondenceModule
  - [ ] พัฒนา `WorkflowVisualization` Component **(สำคัญ)**
    - [ ] ดึงข้อมูลจาก `rfa_workflows` table
    - [ ] แสดงขั้นตอนทั้งหมดเป็นลำดับ (เช่น การ์ดหรือไลน์)
    - [ ] ขั้นตอนปัจจุบัน (Active) สามารถดำเนินการได้
    - [ ] ขั้นตอนอื่นๆ แสดงเป็น Disabled
    - [ ] มีปุ่มสำหรับ Action: "อนุมัติ", "ปฏิเสธ", "ขอแก้ไข"
    - [ ] สำหรับ Admin: ปุ่ม "บังคับไปขั้นตอนถัดไป", "ย้อนกลับ"
    - [ ] แสดงความคิดเห็นในแต่ละขั้นตอน

---

## Phase 4: พัฒนาโมดูลแบบแปลนและคุณสมบัติขั้นสูง (Drawings & Advanced Features) - สัปดาห์ที่ 8-9

- [ ] พัฒนา `DrawingModule` (Req 3.3, 3.4)
  - [ ] แยกระหว่าง `ContractDrawingPage` และ `ShopDrawingPage`
  - [ ] ฟอร์มสร้าง/แก้ไขแบบแปลน
  - [ ] การจัดการ Revision (เช่น การสร้าง Revision ใหม่จาก Revision ปัจจุบัน)
  - [ ] การเชื่อมโยง Shop Drawing Revision กับ Contract Drawing
- [ ] พัฒนา `CirculationModule` (Req 3.7)
  - [ ] หน้ารายการใบเวียนภายใน
  - [ ] ฟอร์มสร้างใบเวียน
  - [ ] การมอบหมายงานให้ผู้รับผิดชอบ (Main, Action, Info)
  - [ ] หน้ารายละเอียดสำหรับผู้รับผิดชอบกระทำ (แสดงความคิดเห็น, ปุ่มปิดงาน)
- [ ] พัฒนา `AdminPanel` (Req 4.5, 4.6)
  - [ ] หน้าจัดการผู้ใช้ (Create/Edit/Delete Users ในองค์กร)
  - [ ] หน้าจัดการ Roles และ Permissions
  - [ ] หน้าจัดการ Master Data (Tags, Document Types, Categories)
  - [ ] หน้าจัดการรูปแบบเลขที่เอกสาร (Document Numbering Formats)
- [ ] พัฒนา `AdvancedSearchPage` (Req 6.2)
  - [ ] ฟอร์มค้นหาขั้นสูงพร้อมฟิลด์ต่างๆ
  - [ ] ส่งคำขอไปยัง Search API (Elasticsearch)
  - [ ] แสดงผลลัพธ์ใน `DataTable`

---

## Phase 5: การทดสอบ ปรับปรุงประสิทธิภาพ และเตรียม Deploy (Testing, Optimization & Deployment) - สัปดาห์ที่ 10

- [ ] ดำเนินการทดสอบ (Testing)
  - [ ] **Unit/Integration Tests:**
    - [ ] เขียนทดสอบสำหรับ `FileUpload` Component (Vitest + RTL)
    - [ ] เขียนทดสอบสำหรับ `DataTable` Component
    - [ ] เขียนทดสอบสำหรับ Custom Hooks (เช่น `useAuth`)
  - [ ] **E2E Tests:**
    - [ ] เขียนทดสอบ User Flow: Login -> สร้าง RFA -> อนุมัติ (Playwright)
    - [ ] เขียนทดสอบ User Flow: สร้างใบเวียน -> มอบหมายงาน -> ตอบกลับ
- [ ] ปรับปรุงประสิทธิภาพ (Performance)
  - [ ] ใช้ `next/dynamic` สำหรับ lazy loading ของ Components ที่ใหญ่
  - [ ] ตรวจสอบการใช้ React Query เพื่อให้แน่ใจว่ามีการ Caching และ Re-fetching ที่เหมาะสม
  - [ ] ใช้ Image Optimization ของ Next.js
- [ ] การเตรียม Deploy
  - [ ] สร้าง `Dockerfile` สำหรับ Frontend (Multi-stage build)
  - [ ] สร้างไฟล์ `docker-compose.yml` สำหรับ `frontend` service
    - [ ] กำหนด `build` จาก `Dockerfile`
    - [ ] กำหนด `environment` สำหรับ `NEXT_PUBLIC_API_URL`
    - [ ] เชื่อมต่อกับ `lcbp3` network
  - [ ] ทดสอบ Build และ Run บน Container Station UI
  - [ ] ตั้งค่า Nginx Proxy Manager ให้ชี้ `lcbp3.np-dms.work` มายัง Frontend Container
