367 lines
20 KiB
Markdown
367 lines
20 KiB
Markdown
|
||
# 📝 Project Title: ocument Management System (DMS) Web Application
|
||
|
||
## Des
|
||
|
||
### 📌 1. Project Overview / Description
|
||
|
||
- ระบบ Document Management System (DMS)
|
||
- เป็นเว็บแอปพลิเคชันที่ออกแบบมาเพื่อจัดการเอกสารภายในองค์กรอย่างมีประสิทธิภาพ
|
||
- โดยมีฟังก์ชันหลักในการอัปโหลด จัดเก็บ ค้นหา แชร์ และควบคุมสิทธิ์การเข้าถึงเอกสาร
|
||
- ระบบนี้จะช่วยลดการใช้เอกสารกระดาษ เพิ่มความปลอดภัยในการจัดเก็บข้อมูล
|
||
- และเพิ่มความสะดวกในการทำงานร่วมกันระหว่างทีม
|
||
|
||
### 🎯 2. Objectives
|
||
|
||
- พัฒนาระบบที่สามารถจัดการเอกสารได้อย่างเป็นระบบ
|
||
- ลดความซ้ำซ้อนในการจัดเก็บเอกสาร
|
||
- เพิ่มความปลอดภัยในการเข้าถึงและจัดการเอกสาร
|
||
- รองรับการทำงานร่วมกันแบบออนไลน์
|
||
|
||
### 📦 3. Scope of Work
|
||
|
||
ระบบจะครอบคลุมฟีเจอร์หลักดังนี้:
|
||
|
||
- การลงทะเบียนและเข้าสู่ระบบผู้ใช้งาน
|
||
- การอัปโหลดและจัดเก็บเอกสารในรูปแบบต่าง ๆ (PDF, DOCX, XLSX ฯลฯ)
|
||
- การจัดหมวดหมู่และแท็กเอกสาร
|
||
- การค้นหาเอกสารด้วยคำสำคัญหรือฟิลเตอร์
|
||
- การกำหนดสิทธิ์การเข้าถึงเอกสาร (เช่น อ่านอย่างเดียว, แก้ไข, ลบ)
|
||
- การบันทึกประวัติการใช้งานเอกสาร (Audit Trail)
|
||
- การแจ้งเตือนเมื่อมีการเปลี่ยนแปลงเอกสาร
|
||
|
||
### 🛠️ 4. DMS Architecture Deep Dive (Backend + Frontend)
|
||
|
||
#### 4.0)Executive Summary
|
||
|
||
- Reverse proxy (Nginx/NPM) เผยแพร่ Frontend (Next.js) และ Backend (Node.js/Express) ผ่าน HTTPS (HSTS)
|
||
- Backend เชื่อม MariaDB 10.11 (ข้อมูลหลัก DMS) และแยก n8n + Postgres 16 สำหรับ workflow
|
||
- RBAC/ABAC ถูกบังคับใช้งานใน middleware + มีชุด SQL (tables → triggers → procedures → views → seed)
|
||
- ไฟล์จริง (PDF/DWG) เก็บนอก webroot ที่ **/share/dms‑data** พร้อมมาตรฐานการตั้งชื่อ+โฟลเดอร์
|
||
- Dev/Prod แยกชัดเจนผ่าน Docker multi‑stage + docker‑compose + โฟลเดอร์ persist logs/config/certs
|
||
|
||
#### 4.1) Runtime Topology & Trust Boundaries
|
||
|
||
```
|
||
Internet Clients (Browser)
|
||
│ HTTPS 443 (HSTS) [QNAP mgmt = 8443]
|
||
▼
|
||
┌─────────────────────────────────────────────────────┐
|
||
│ Reverse Proxy Layer │
|
||
│ ├─ Nginx (Alpine) or Nginx Proxy Manager (NPM) │
|
||
│ ├─ TLS (LE cert; SAN multi‑subdomain) │
|
||
│ └─ Routes: │
|
||
│ • /, /_next/* → Frontend (Next.js :3000) │
|
||
│ • /api/* → Backend (Express :3001) │
|
||
│ • /pma/* → phpMyAdmin │
|
||
│ • /n8n/* → n8n (Workflows) │
|
||
└─────────────────────────────────────────────────────┘
|
||
│ │
|
||
│ └──────────┐
|
||
▼ │
|
||
Frontend (Next.js) │
|
||
│ Cookie-based Auth (HttpOnly) │
|
||
▼ ▼
|
||
Backend (Node/Express ESM) ─────────► MariaDB 10.11
|
||
│ │
|
||
└────────────────────────────────────┘
|
||
Project data (.pdf/.dwg) @ /share/dms-data
|
||
|
||
n8n (workflows) ──► Postgres 16 (separate DB for automations)
|
||
```
|
||
|
||
**Trust Boundaries**
|
||
|
||
* Public zone: Internet ↔ Reverse proxy
|
||
* App zone: Reverse proxy ↔ FE/BE containers (internal Docker network)
|
||
* Data zone: Backend ↔ Databases (MariaDB, Postgres) + `/share/dms-data`
|
||
|
||
---
|
||
- Frontend: Next.js (ESM) / React.js
|
||
- Backend: Node.js / Laravel
|
||
- Database: Mariadb / PostgreSQL
|
||
- Authentication: JWT
|
||
- xx
|
||
- Cloud Storage: QNAP
|
||
|
||
### 👥 Target Users
|
||
|
||
- พนักงานภายในองค์กร
|
||
- ผู้จัดการฝ่ายเอกสาร
|
||
- ผู้ดูแลระบบ IT
|
||
|
||
### 📈 Expected Outcomes
|
||
|
||
- ลดเวลาในการค้นหาเอกสารลงอย่างน้อย 50%
|
||
- ลดการใช้เอกสารกระดาษในองค์กร
|
||
- เพิ่มความปลอดภัยในการจัดเก็บข้อมูล
|
||
- รองรับการทำงานแบบ Remote Work
|
||
|
||
## บทบาท: คุณคือ Programmer และ Document Engineer ที่เชี่ยวชาญ
|
||
|
||
1. การพัฒนาเว็บแอป (Web Application Development)
|
||
2. Configuration of Container Station on QNAP
|
||
3. Database: mariadb:10.11
|
||
4. Database management: phpmyadmin:5-apache
|
||
5. Backend: node:.js (ESM)
|
||
6. Frontend: next.js, react
|
||
7. Workflow automation: n8n:
|
||
8. Workflow database: postgres:16-alpine
|
||
9. Workflow database management: pgadmin4
|
||
10. Reverse proxy: nginx:1.27-alpine
|
||
11. linux on QNAP
|
||
12. การจัดการฐานข้อมูล (Database Management)
|
||
13. การวิเคราะห์ฐานข้อมูล (Database Analysis)
|
||
14. การจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Databases)
|
||
15. ภาษา SQL
|
||
16. RBAC
|
||
|
||
## 2. ระบบที่ใช้
|
||
|
||
## Server
|
||
|
||
- ใช้ Container Station เป็น SERVER บน QNAP (Model: TS-473A, RAM: 32GB, CPU: AMD Ryzen V1500B 4 cores 8 threads)
|
||
**_ เปลี่ยน port 443 ของ QNAP เป็น 8443 แล้ว _**
|
||
|
||
## การพัฒนาโครงการ
|
||
|
||
- ด้วย Visual Studio Code บน Windows 11
|
||
- ใช้ ๊ UI ของ Container Station เป็นหลัก
|
||
|
||
## โครงสร้างโฟลเดอร์ (บน QNAP)
|
||
|
||
/share/Container/dms/
|
||
├─ docker-compose.yml # Create โดย UI Container Station
|
||
├─ mariadb/
|
||
│ ├─ data/ # ข้อมูลจริงของ MariaDB
|
||
│ ├─ init/ # ข้อมูลเริ่มต้นของ MariaDB
|
||
│ │ ├─ 01_dms_data_v5_1_deploy_table_rbac.sql # Create all data table & RBAC table here!
|
||
│ │ ├─ 02_dms_data_v5_1_triggers.sql # Create all triggers here!
|
||
│ │ ├─ 03_dms_data_v5_1_procedures_handlers.sql # Create all procedures here!
|
||
│ │ ├─ 04_dms_data_v5_1_views.sql # Create all views here!
|
||
│ │ ├─ 05 dms_data_v5_1_seeก_data.sql # Seed nescesary data here!
|
||
│ │ ├─ 06_dms_data_v5_1_seed_users.sql # Seed users data here!
|
||
│ │ └─ 07_dms_data_v5_1_seed_contract_dwg.sql # Seed contract drawing data here!
|
||
│ └─ my.cnf
|
||
├─ backend/
|
||
│ ├─ app/
|
||
│ ├─ src/
|
||
│ │ ├─ db/
|
||
│ │ │ └─models/
|
||
│ │ ├─ middleware/
|
||
│ │ ├─ routes/
|
||
│ │ ├─ utils/
|
||
│ │ └─ index.js
|
||
│ ├─ Dockerfile
|
||
│ ├─ package.json
|
||
│ └─ package-lock.json # ไม่มี
|
||
├─ frontend/
|
||
│ ├─ app/
|
||
│ │ ├─ correspondences/
|
||
│ │ ├─ dashboard/
|
||
│ │ ├─ health/
|
||
│ │ ├─ login/
|
||
│ │ └─ users/
|
||
│ ├─ public/
|
||
│ ├─ Dockerfile
|
||
│ ├─ package.json
|
||
│ ├─ package-lock.json # ไม่มี
|
||
│ ├─ next.config.js
|
||
│ └─ page.jsx
|
||
├─ phpmyadmin/
|
||
│ ├─ sessions/ # โฟลเดอร์เซสชันถาวรของ phpMyAdmin
|
||
│ ├─ tmp/
|
||
│ ├─ config.user.inc.php
|
||
│ └─ zzz-custom.ini
|
||
├─ nginx/
|
||
│ ├─ certs/
|
||
│ ├─ nginx.conf
|
||
│ └─ dms.conf
|
||
├─ n8n/
|
||
├─ n8n-cache/
|
||
├─ n8n-postgres/
|
||
└─ logs/
|
||
├─ backend/
|
||
├─ frontend/
|
||
├─ nginx/
|
||
├─ pgadmin/
|
||
├─ phpmyadmin/
|
||
└─ postgres_n8n/
|
||
/share/dms-data # เก็บข้อมมูล .pdf, .dwg แยกตาม correspondences, documents
|
||
|
||
# ภาษา: ใช้ภาษาไทยในการโต้ตอบ ยกเว้น ศัพท์เทคนิคหรือศัพท์เฉพาะทาง
|
||
|
||
# ไฟล์ที่ ีupload
|
||
|
||
- Dockerfile ของ backend
|
||
- package.json ของ backend
|
||
- docker-compose.yml ชอง Container station
|
||
- nginx.conf, dms.conf ของ nginx
|
||
- dms_v0_5_0_data_v5_1_sql.zip ประกอบด้วย
|
||
- 01_dms_data_v5_1_deploy_table_rbac.sql # Create all data table & RBAC table here!
|
||
- 02_dms_data_v5_1_triggers.sql # Create all triggers here!
|
||
- 03_dms_data_v5_1_procedures_handlers.sql # Create all procedures here!
|
||
- 04_dms_data_v5_1_views.sql # Create all views here!
|
||
- 05 dms_data_v5_1_seeก_data.sql # Seed nescesary data here!
|
||
- 06_dms_data_v5_1_seed_users.sql # Seed users data here!
|
||
|
||
# งานที่ต้องการ:
|
||
|
||
- ไม่ใช้ .env เด็ดขาด Container Station ไม่รองรับ และ docker-compose.yml ได้ทดสอบ รันบน Container station มาแล้ว
|
||
- Code ของ backend ทั้งหมด
|
||
- การทดสอบระบบ backend ทุกส่วน ให้พร้อม สำหรับ frontend
|
||
|
||
# กรณี 2: มี Git อยู่แล้ว (มี main อยู่)
|
||
|
||
2.1 อัปเดต main ให้ตรงล่าสุดก่อนแตกบร้านช์
|
||
|
||
cd /share/Container/dms
|
||
git checkout main
|
||
git pull --ff-only # ถ้าเชื่อม remote อยู่
|
||
git tag -f stable-$(date +%F) # tag จุดเสถียรปัจจุบัน
|
||
|
||
2.2 แตก branch งาน Dashboard
|
||
git checkout -b feature/dashboard-update-$(date +%y%m%d)
|
||
git checkout -b feature/dashboard-update-251004
|
||
|
||
2.3 ทำงาน/คอมมิตตามปกติ
|
||
|
||
# แก้ไฟล์ frontend/app/dashboard/\* และที่เกี่ยวข้อง
|
||
|
||
git add frontend/app/dashboard
|
||
git commit -m "feat(dashboard): เพิ่มส่วนจัดการ user"
|
||
git push -u origin feature/dashboard-update-251004
|
||
|
||
📘 Use Case: Upload Document
|
||
|
||
Actor: ผู้ใช้งานทั่วไป (Employee)
|
||
Description: ผู้ใช้งานสามารถอัปโหลดเอกสารเข้าสู่ระบบเพื่อจัดเก็บและใช้งานในภายหลัง
|
||
Preconditions: ผู้ใช้งานต้องเข้าสู่ระบบก่อน
|
||
Main Flow:
|
||
|
||
ผู้ใช้งานเลือกเมนู “อัปโหลดเอกสาร”
|
||
เลือกไฟล์จากเครื่องคอมพิวเตอร์
|
||
กรอกข้อมูลประกอบ เช่น ชื่อเอกสาร หมวดหมู่ แท็ก
|
||
กดปุ่ม “อัปโหลด”
|
||
ระบบบันทึกเอกสารและแสดงผลการอัปโหลดสำเร็จ
|
||
|
||
|
||
Postconditions: เอกสารถูกจัดเก็บในระบบและสามารถค้นหาได้
|
||
|
||
## 📘 Use Case:
|
||
|
||
### Search Document
|
||
|
||
Actor: ผู้ใช้งานทั่วไป
|
||
Description: ผู้ใช้งานสามารถค้นหาเอกสารจากระบบด้วยคำสำคัญหรือฟิลเตอร์
|
||
Preconditions: ผู้ใช้งานต้องเข้าสู่ระบบ
|
||
Main Flow:
|
||
|
||
ผู้ใช้งานกรอกคำค้นหรือเลือกฟิลเตอร์ (หมวดหมู่, วันที่, ผู้สร้าง)
|
||
กดปุ่ม “ค้นหา”
|
||
ระบบแสดงรายการเอกสารที่ตรงกับเงื่อนไข
|
||
|
||
|
||
Postconditions: ผู้ใช้งานสามารถเปิดดูหรือดาวน์โหลดเอกสารที่ค้นพบได้
|
||
|
||
### Share Document
|
||
|
||
Actor: ผู้ใช้งานทั่วไป
|
||
Description: ผู้ใช้งานสามารถแชร์เอกสารให้กับผู้ใช้งานอื่นในระบบ
|
||
Preconditions: ผู้ใช้งานต้องมีสิทธิ์ในการแชร์เอกสาร
|
||
Main Flow:
|
||
|
||
ผู้ใช้งานเลือกเอกสารที่ต้องการแชร์
|
||
กดปุ่ม “แชร์”
|
||
ระบุผู้รับและสิทธิ์การเข้าถึง (อ่าน/แก้ไข)
|
||
กด “ยืนยัน”
|
||
ระบบส่งการแจ้งเตือนไปยังผู้รับ
|
||
|
||
|
||
Postconditions: ผู้รับสามารถเข้าถึงเอกสารตามสิทธิ์ที่กำหนด
|
||
|
||
### Manage Access Rights
|
||
|
||
Actor: ผู้ดูแลระบบ (Admin)
|
||
Description: ผู้ดูแลระบบสามารถกำหนดสิทธิ์การเข้าถึงเอกสารให้กับผู้ใช้งาน
|
||
Preconditions: ผู้ดูแลระบบต้องเข้าสู่ระบบ
|
||
Main Flow:
|
||
|
||
ผู้ดูแลระบบเลือกเอกสาร
|
||
กด “จัดการสิทธิ์”
|
||
เลือกผู้ใช้งานและกำหนดสิทธิ์ (อ่าน, แก้ไข, ลบ)
|
||
กด “บันทึก”
|
||
|
||
|
||
Postconditions: สิทธิ์การเข้าถึงเอกสารถูกปรับตามที่กำหนด
|
||
|
||
### View Document History
|
||
|
||
Actor: ผู้ใช้งานทั่วไป / ผู้ดูแลระบบ
|
||
Description: ผู้ใช้งานสามารถดูประวัติการใช้งานเอกสาร เช่น การแก้ไข การดาวน์โหลด
|
||
Preconditions: ผู้ใช้งานต้องมีสิทธิ์เข้าถึงเอกสาร
|
||
Main Flow:
|
||
|
||
ผู้ใช้งานเปิดเอกสาร
|
||
เลือก “ดูประวัติ”
|
||
ระบบแสดงรายการกิจกรรมที่เกี่ยวข้องกับเอกสาร
|
||
|
||
|
||
Postconditions: ผู้ใช้งานสามารถตรวจสอบการเปลี่ยนแปลงย้อนหลังได้
|
||
|
||
## 🔄Workflow อัตโนมัติในระบบ DMS
|
||
|
||
### ✅ ประโยชน์ของ Workflow อัตโนมัติใน DMS
|
||
|
||
ลดภาระงานซ้ำ ๆ ของผู้ใช้งาน
|
||
เพิ่มความปลอดภัยและการควบคุมเอกสาร
|
||
เพิ่มความเร็วในการดำเนินงาน
|
||
ลดข้อผิดพลาดจากการทำงานด้วยมือ
|
||
|
||
### 🧩 1.Document Approval Workflow
|
||
|
||
กรณี: เมื่อมีการอัปโหลดเอกสารที่ต้องได้รับการอนุมัติจากหัวหน้า
|
||
ขั้นตอนอัตโนมัติ:
|
||
|
||
1. ผู้ใช้งานอัปโหลดเอกสารและเลือก “ต้องการอนุมัติ”
|
||
2. ระบบส่งแจ้งเตือนไปยังผู้อนุมัติ (เช่น หัวหน้าแผนก)
|
||
3. ผู้อนุมัติสามารถตรวจสอบและกด “อนุมัติ” หรือ “ปฏิเสธ”
|
||
4. ระบบบันทึกสถานะเอกสารและแจ้งผลกลับไปยังผู้ส่ง
|
||
|
||
### 📥 2. Auto Tagging & Categorization
|
||
|
||
กรณี: เอกสารที่อัปโหลดมีชื่อหรือเนื้อหาที่ตรงกับหมวดหมู่ที่กำหนดไว้
|
||
ขั้นตอนอัตโนมัติ:
|
||
|
||
เมื่ออัปโหลดเอกสาร ระบบวิเคราะห์ชื่อไฟล์หรือเนื้อหา
|
||
ระบบกำหนดหมวดหมู่และแท็กให้โดยอัตโนมัติ เช่น “ใบเสนอราคา” → หมวด “การเงิน”
|
||
ผู้ใช้งานสามารถแก้ไขได้หากต้องการ
|
||
|
||
### 🔐 3. Access Control Workflow
|
||
|
||
กรณี: เอกสารที่มีความลับสูงต้องจำกัดการเข้าถึง
|
||
ขั้นตอนอัตโนมัติ:
|
||
|
||
เมื่ออัปโหลดเอกสารที่มีคำว่า “ลับ” หรือ “Confidential”
|
||
ระบบกำหนดสิทธิ์เริ่มต้นให้เฉพาะผู้ใช้งานระดับผู้จัดการขึ้นไป
|
||
ระบบแจ้งเตือนผู้ดูแลระบบให้ตรวจสอบสิทธิ์เพิ่มเติม
|
||
|
||
### 📤 4. Expiry & Archiving Workflow
|
||
|
||
กรณี: เอกสารที่มีอายุการใช้งาน เช่น สัญญา หรือใบอนุญาต
|
||
ขั้นตอนอัตโนมัติ:
|
||
|
||
เมื่ออัปโหลดเอกสาร ผู้ใช้งานระบุวันหมดอายุ
|
||
ระบบแจ้งเตือนก่อนหมดอายุล่วงหน้า เช่น 30 วัน
|
||
เมื่อถึงวันหมดอายุ ระบบย้ายเอกสารไปยังหมวด “Archive” โดยอัตโนมัติ
|
||
|
||
|
||
### 📊 5. Audit Trail & Notification Workflow
|
||
|
||
กรณี: มีการแก้ไขหรือดาวน์โหลดเอกสารสำคัญ
|
||
ขั้นตอนอัตโนมัติ:
|
||
|
||
ทุกการกระทำกับเอกสาร (เปิด, แก้ไข, ลบ) จะถูกบันทึกใน Audit Log
|
||
หากเอกสารถูกแก้ไขโดยผู้ใช้งานที่ไม่ใช่เจ้าของ ระบบแจ้งเตือนเจ้าของเอกสารทันที
|
||
|