# 📝 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 หากเอกสารถูกแก้ไขโดยผู้ใช้งานที่ไม่ใช่เจ้าของ ระบบแจ้งเตือนเจ้าของเอกสารทันที