690514:2019 204-rfa-approval-refactor #01
CI / CD Pipeline / build (push) Successful in 6m1s
CI / CD Pipeline / deploy (push) Failing after 6m42s

This commit is contained in:
2026-05-14 20:19:21 +07:00
parent 07cc6d47b1
commit 0240d80da5
183 changed files with 20050 additions and 1017 deletions
+23
View File
@@ -0,0 +1,23 @@
# Contributing to AI Knowledge Base
การเพิ่มข้อมูลเข้าสู่คลังความรู้นี้ช่วยให้ AI ทำงานได้ดีขึ้นสำหรับทุกคนในทีม
## 🛠️ ขั้นตอนการเพิ่ม Prompt ใหม่
1. เลือกหมวดหมู่ที่เหมาะสมใน `prompts/`
2. สร้างไฟล์ใหม่โดยใช้รูปแบบ: `purpose-description.md`
3. ใส่เนื้อหา Prompt โดยแบ่งเป็น:
- **Role**: บทบาทที่ต้องการให้ AI รับ
- **Context**: บริบทแวดล้อม
- **Objective**: วัตถุประสงค์หลัก
- **Instructions**: ขั้นตอนการทำงาน
- **Output Format**: รูปแบบผลลัพธ์ที่ต้องการ
## 📐 มาตรฐานการเขียนไฟล์
- **File Header**: ต้องมี `// File: path` ที่บรรทัดแรก
- **Change Log**: ต้องมีประวัติการแก้ไขท้ายไฟล์
- **Language**: หัวข้อหลักเป็น English, รายละเอียดคำอธิบายเป็น Thai
---
// File: docs/ai-knowledge-base/CONTRIBUTING.md
// Change Log:
// - 2026-05-14: Initial guidelines
+25
View File
@@ -0,0 +1,25 @@
# AI Knowledge Base for NAP-DMS (LCBP3)
คลังความรู้สำหรับ AI Assistant (Antigravity, Windsurf, Codex) เพื่อช่วยในการพัฒนาระบบ Document Management System (DMS)
## 📁 โครงสร้างโฟลเดอร์
- `prompts/`: ชุดคำสั่งมาตรฐานแบ่งตามหมวดหมู่
- `core/`: กฎพื้นฐานและมาตรฐานการเขียนโค้ด
- `dms/`: เฉพาะทางด้านระบบจัดการเอกสาร
- `infra/`: งานด้าน Infrastructure และ Network
- `codex/`: คำสั่งเฉพาะสำหรับ Windsurf/Codex
- `templates/`: แม่แบบเอกสารต่างๆ (Spec, Bug Report, etc.)
- `playbooks/`: คู่มือขั้นตอนการทำงานที่ซับซ้อน
- `checklists/`: รายการตรวจสอบก่อนส่งงานหรือ Deploy
- `logs/`: บันทึกประวัติและบทเรียนที่ได้รับ
## 🎯 วัตถุประสงค์
1. เพื่อให้ AI ทำงานได้แม่นยำและสอดคล้องกับมาตรฐานของโครงการ
2. เพื่อลดการตั้งค่าซ้ำซ้อนในแต่ละ Conversation
3. เพื่อเก็บสะสมบทเรียนและวิธีการแก้ปัญหาที่เคยเกิดขึ้น
---
// File: docs/ai-knowledge-base/README.md
// Change Log:
// - 2026-05-14: Initial creation by Antigravity
+16
View File
@@ -0,0 +1,16 @@
# Versioning Policy for AI Knowledge Base
## Current Version: 1.0.0
### หมายเลขเวอร์ชัน (Semantic Versioning)
- **MAJOR (1.x.x)**: มีการเปลี่ยนโครงสร้างโฟลเดอร์หลัก หรือเปลี่ยนกฎ Tier 1
- **MINOR (x.1.x)**: เพิ่ม Prompt ใหม่, Template ใหม่ หรือเพิ่ม Playbook
- **PATCH (x.x.1)**: แก้ไขคำผิด หรือปรับปรุงรายละเอียดเล็กน้อยในไฟล์เดิม
### การอัปเดตเวอร์ชัน
ทุกครั้งที่มีการแก้ไขไฟล์ในคลังความรู้นี้ ให้ทำการอัปเดต Change Log ในไฟล์นั้นๆ และพิจารณาปรับเลขเวอร์ชันในไฟล์นี้หากเป็นการเปลี่ยนแปลงสำคัญ
---
// File: docs/ai-knowledge-base/VERSIONING.md
// Change Log:
// - 2026-05-14: Initial version 1.0.0
@@ -0,0 +1,22 @@
// File: docs/ai-knowledge-base/checklists/db-change.md
# Checklist: Database Schema Changes
## 📝 Pre-Change
- [ ] เขียน SQL Delta script ตามเทมเพลตใน `templates/db-migration.md`
- [ ] มี Rollback script เตรียมไว้พร้อมใช้งาน
- [ ] ทดสอบรันใน Local/Development แล้ว
- [ ] ตรวจสอบว่าไม่กระทบต่อ Query เดิมในโค้ด (e.g. `SELECT *` อาจจะอันตราย)
## 🚀 Execution
- [ ] ทำการ Backup ฐานข้อมูลก่อนเริ่ม (ถ้าเป็น Production)
- [ ] รัน SQL Script ผ่านเครื่องมือที่กำหนด (e.g. DBeaver, HeidiSQL)
- [ ] ตรวจสอบโครงสร้างตารางหลังแก้ไข
## ✅ Verification
- [ ] รันระบบและทดสอบฟีเจอร์ที่เกี่ยวข้อง
- [ ] ตรวจสอบ Logs ว่าไม่มี SQL Error
- [ ] อัปเดตไฟล์ `specs/03-Data-and-Storage/lcbp3-v1.8.0-schema-02-tables.sql` ให้ตรงกัน
---
// Change Log:
// - 2026-05-14: Initial DB change checklist
@@ -0,0 +1,28 @@
// File: docs/ai-knowledge-base/checklists/deploy.md
# Deployment Checklist
## 🛠️ Pre-Deployment (Development/Staging)
- [ ] Linting & Type Checking ผ่านหมด (`pnpm lint`, `pnpm type-check`)
- [ ] Unit Tests ผ่านทั้งหมด (`pnpm test`)
- [ ] Database Schema ถูกอัปเดตที่เซิร์ฟเวอร์เป้าหมายแล้ว (ADR-009)
- [ ] Environment Variables (Secrets) ถูกตั้งค่าใน Docker/CI แล้ว
- [ ] Build Frontend & Backend สำเร็จโดยไม่มี Error
## 🚀 Deployment Phase
- [ ] Trigger Gitea Actions / CI Pipeline
- [ ] ตรวจสอบ Container Status (Running)
- [ ] ตรวจสอบ Logs ว่าไม่มี Error Startup
## 🧪 Post-Deployment (Verification)
- [ ] ทดสอบ Login
- [ ] ทดสอบฟีเจอร์หลักที่เพิ่ง Deploy
- [ ] ตรวจสอบว่า `publicId` (UUIDv7) ทำงานถูกต้องใน URL
- [ ] เช็คความปลอดภัย (RBAC) ว่าสิทธิ์ยังถูกต้อง
## 🆘 Rollback Plan
- [ ] หากพบ Critical Bug ให้ Revert Commit ล่าสุด
- [ ] เตรียม SQL Script สำหรับ Revert Schema (ถ้ามี)
---
// Change Log:
// - 2026-05-14: Initial deployment checklist
@@ -0,0 +1,24 @@
// File: docs/ai-knowledge-base/checklists/rollback.md
# Checklist: System Rollback (Emergency)
## 🚨 Decision Point
- [ ] ระบบล่มถาวรเกิน 15 นาที
- [ ] พบช่องโหว่ความปลอดภัยที่สำคัญ
- [ ] ข้อมูลสูญหายหรือเสียหายจากการทำงานผิดพลาด
## 🛠️ Execution (Code)
- [ ] Revert Git Commit ไปยัง Tag หรือ Hash ที่เสถียรล่าสุด
- [ ] Trigger CI/CD เพื่อ Deploy เวอร์ชันเก่า
- [ ] เคลียร์ Cache ใน Redis (ถ้าจำเป็น)
## 🗄️ Execution (Database)
- [ ] รัน Rollback SQL script
- [ ] หากรุนแรง ให้ Restore ข้อมูลจาก Backup ล่าสุด
## ✅ Verification
- [ ] ตรวจสอบว่าระบบกลับมาออนไลน์
- [ ] แจ้งทีมที่เกี่ยวข้องเรื่องเหตุการณ์ (Incident Report)
---
// Change Log:
// - 2026-05-14: Initial rollback checklist
@@ -0,0 +1,27 @@
// File: docs/ai-knowledge-base/checklists/security-audit.md
# Checklist: Security & Tier 1 Audit
## 🛡️ Authentication & Authorization
- [ ] ทุก API มี `@UseGuards(CaslGuard)`
- [ ] ทุก Action มีการตรวจสอบสิทธิ์ผ่าน `@CheckPolicies(...)`
- [ ] ไม่มีช่องโหว่ BOLA (Broken Object Level Authorization) - เช็คความเป็นเจ้าของข้อมูล
- [ ] JWT Payload ไม่มีข้อมูลส่วนตัวที่อ่อนไหว
## 🆔 Data Integrity (ADR-019)
- [ ] ใช้ `publicId` (UUIDv7) สำหรับ API/URL เท่านั้น
- [ ] ไม่มีโค้ดที่ใช้ `parseInt()` กับ UUID
- [ ] `id` (Integer) ถูก `@Exclude()` ออกจาก API Response
## 💾 Storage & Input
- [ ] ไฟล์ที่อัปโหลดถูกสแกน ClamAV ก่อนย้ายเข้า Permanent Storage
- [ ] มีการทำ Input Validation ทั้งฝั่ง Client (Zod) และ Server (class-validator)
- [ ] มีการใช้ `DOMPurify` หรือมาตรการป้องกัน XSS สำหรับข้อมูลที่แสดงผลเป็น HTML
## ⚙️ Concurrency & Reliability
- [ ] ใช้ Redis Redlock สำหรับ Document Numbering (ADR-002)
- [ ] ใช้ `@VersionColumn` สำหรับ Optimistic Locking ในจุดที่มีการแก้ไขพร้อมกัน
- [ ] งานที่ใช้เวลานานถูกส่งเข้า BullMQ (ADR-008)
---
// Change Log:
// - 2026-05-14: Initial security audit checklist
@@ -0,0 +1,20 @@
// File: docs/ai-knowledge-base/checklists/vlan-change.md
# Checklist: VLAN Configuration Changes
## 📝 Planning
- [ ] กำหนด VLAN ID และ Subnet ที่ต้องการ
- [ ] ตรวจสอบความซ้ำซ้อนของ IP ในเครือข่ายเดิม
- [ ] วางแผน Port Profile ใน Omada
## 🚀 Configuration
- [ ] สร้าง VLAN ใน Omada Controller
- [ ] ตั้งค่า Port Profile ให้กับ Switch ที่เกี่ยวข้อง
- [ ] ทดสอบการเชื่อมต่อจาก Client (DHCP/Static IP)
## ✅ Security & Inter-VLAN
- [ ] ตรวจสอบสิทธิ์การเข้าถึงข้าม VLAN (Ping test)
- [ ] ตั้งค่า ACL บน Router/Gateway (ถ้าจำเป็น)
---
// Change Log:
// - 2026-05-14: Initial VLAN change checklist
@@ -0,0 +1,21 @@
// File: docs/ai-knowledge-base/playbooks/core/context-recovery.md
# Playbook: AI Context Recovery (ฟื้นฟูบริบทการทำงาน)
## 🚨 เมื่อไหร่ที่ต้องใช้?
- เมื่อเริ่ม Session ใหม่กับ AI
- เมื่อ AI เริ่มให้คำตอบที่หลุดออกจากมาตรฐานโครงการ
- เมื่อมีการข้ามเฟสการทำงานขนาดใหญ่
## 🏗️ Steps for Recovery
1. **Initialize Standards**: สั่งให้ AI อ่าน `docs/ai-knowledge-base/prompts/core/master-prompt.md`
2. **Scan Current Module**: ระบุโมดูลที่กำลังทำงาน และให้ AI อ่านไฟล์ใน `specs/` ที่เกี่ยวข้อง
3. **Verify DB State**: ให้ AI อ่านไฟล์ Schema ล่าสุดเพื่อยืนยันโครงสร้างตาราง
4. **Task Alignment**: ตรวจสอบไฟล์ `tasks.md` ของฟีเจอร์นั้นๆ เพื่อหาจุดที่ทำค้างไว้
5. **Conflict Resolution**: หาก AI พบว่าโค้ดปัจจุบันขัดกับ Specs ให้ทำการแก้ไขทันที
## 🚀 Recovery Command (Prompt)
"โปรดอ่าน Master Prompt และตรวจสอบสถานะปัจจุบันของโมดูล [ชื่อโมดูล] จากไฟล์ Specs และ Tasks เพื่อเตรียมตัวเริ่มงานต่อจากจุดที่ค้างไว้"
---
// Change Log:
// - 2026-05-14: Initial context recovery playbook
@@ -0,0 +1,19 @@
// File: docs/ai-knowledge-base/playbooks/dms/cross-module-linking.md
# Playbook: Cross-Module Linking (การเชื่อมโยงข้อมูลข้ามโมดูล)
## 🎯 Objective
รักษาความถูกต้องและความเชื่อมโยงของข้อมูล (Data Integrity) ระหว่างโมดูลต่างๆ เช่น การผูก RFA เข้ากับ Drawing หรือ Correspondence
## 🏗️ Linking Rules
1. **Use PublicId**: การเชื่อมโยงข้ามโมดูลต้องใช้ `publicId` (UUIDv7) เท่านั้น
2. **Atomic Updates**: หากการเชื่อมโยงส่งผลต่อสถานะของทั้งสองโมดูล ต้องทำภายใน Database Transaction เดียวกัน
3. **Audit Trail**: ต้องบันทึกประวัติการเชื่อมโยง (e.g. "Drawing X linked to RFA Y")
4. **Validation**: ก่อนสร้าง Link ต้องตรวจสอบว่าทั้งสอง Entity มีอยู่จริงและอยู่ในสถานะที่อนุญาตให้เชื่อมโยงได้
## 🛠️ Implementation Example
- **RFA to Drawing**: เมื่อ RFA ได้รับการอนุมัติ ให้ทำการอัปเดตสถานะของ Drawing ที่เกี่ยวข้องโดยอัตโนมัติ
- **Correspondence to Transmittal**: บันทึกว่าจดหมายฉบับนี้ถูกส่งไปพร้อมกับ Transmittal เลขที่เท่าไหร่
---
// Change Log:
// - 2026-05-14: Initial cross-module linking playbook
@@ -0,0 +1,18 @@
// File: docs/ai-knowledge-base/playbooks/dms/drawing-revision-flow.md
# Playbook: Drawing Revision Management
## 🔄 Revision Flow
1. **Initial Upload**: Drawing ถูกอัปโหลดเข้าระบบครั้งแรก (Revision 0 หรือ A)
2. **Review & Approval**: ผ่านกระบวนการ RFA
3. **Revision Up**: เมื่อมีการแก้ไข ให้ผู้ใช้อัปโหลดไฟล์ใหม่โดยอ้างอิง `publicId` เดิม
4. **Auto-Numbering**: ระบบจะเจนเลขที่ Revision ถัดไปตาม Rule (e.g. 0 -> 1 หรือ A -> B)
5. **Supersede**: Revision เก่าจะถูกทำเครื่องหมายเป็น "Superseded" (แต่ไฟล์ยังอยู่สำหรับการตรวจสอบย้อนหลัง)
## 🏗️ Technical Implementation
- ใช้ **Redis Redlock** ในการจองเลขที่ Revision เพื่อป้องกันเลขซ้ำ
- เก็บประวัติทั้งหมดไว้ใน `drawing_revisions` table
- แสดงเฉพาะ Revision ล่าสุด (Current) ในหน้ารายการหลัก ยกเว้นผู้ใช้จะเลือกดู History
---
// Change Log:
// - 2026-05-14: Initial drawing revision playbook
@@ -0,0 +1,27 @@
// File: docs/ai-knowledge-base/playbooks/dms/rfa-lifecycle.md
# Playbook: RFA Lifecycle Management
## 🔄 Lifecycle Stages
1. **Draft**: ผู้สร้างเตรียมเอกสารและอัปโหลดไฟล์
2. **Submitted**: ส่งเข้าระบบเพื่อรอการตรวจสอบ (Review)
3. **Reviewing**: ทีมที่ปรึกษาหรือหน่วยงานที่เกี่ยวข้องตรวจสอบ
4. **Responded**: ให้ความเห็น (Comment) กลับมา
5. **Approved / Rejected**: สถานะสุดท้ายของการอนุมัติ
6. **Closed**: สิ้นสุดกระบวนการ
## 🛡️ Business Rules (ADR-001)
- การเปลี่ยนสถานะต้องใช้ **Workflow Engine** เท่านั้น
- ต้องมีการทำ **Optimistic Locking** ผ่าน `@VersionColumn` เพื่อป้องกันการอนุมัติพร้อมกัน
- ทุกการเปลี่ยนสถานะต้องบันทึก **Audit Log** และ **Workflow History**
- หากมีการอัปโหลดไฟล์ใหม่ ต้องย้ายจาก `temp` ไป `permanent` และสแกน ClamAV
## 🛠️ Implementation Steps
1. ตรวจสอบสิทธิ์ผู้ใช้ผ่าน `CaslGuard`
2. ดึงข้อมูล RFA พร้อมสถานะปัจจุบันจาก DB
3. ตรวจสอบความถูกต้องของสถานะต้นทาง (Source State) และสถานะปลายทาง (Target State)
4. ทำการ Update ใน Database Transaction
5. ส่งการแจ้งเตือนผ่าน `BullMQ`
---
// Change Log:
// - 2026-05-14: Initial RFA lifecycle playbook
@@ -0,0 +1,17 @@
// File: docs/ai-knowledge-base/playbooks/dms/transmittal-process.md
# Playbook: Transmittal Process
## 🔄 Transmittal Workflow
1. **Creation**: DC (Document Control) สร้าง Transmittal และเลือกเอกสาร (Attachments) ที่ต้องการส่ง
2. **Review**: หัวหน้าทีมตรวจสอบความถูกต้องของรายการเอกสาร
3. **Issuance**: ส่งมอบเอกสารอย่างเป็นทางการ (เปลี่ยนสถานะเป็น Issued)
4. **Acknowledgment**: ผู้รับเซ็นรับเอกสารในระบบ (เปลี่ยนสถานะเป็น Received)
## 📋 Standard Actions
- **Generate Cover Sheet**: ระบบสร้าง PDF หน้าปกที่มีรายการเอกสารและ QR Code
- **Link Documents**: เอกสารที่ถูกส่งจะถูกบันทึกความเชื่อมโยง (Link) กับ Transmittal ID
- **Notification**: ส่งอีเมลแจ้งเตือนผู้รับพร้อมลิงก์ดาวน์โหลด
---
// Change Log:
// - 2026-05-14: Initial transmittal process playbook
@@ -0,0 +1,16 @@
// File: docs/ai-knowledge-base/playbooks/infra/omada-vlan-recovery.md
# Playbook: Omada VLAN Recovery
## 🚨 Scenario
VLAN ใช้งานไม่ได้ หรือ Client ไม่สามารถรับ IP ได้หลังจากมีการเปลี่ยน Config
## 🛠️ Recovery Steps
1. **Check Controller Connection**: ตรวจสอบว่า Omada Controller ยังออนไลน์อยู่หรือไม่
2. **Revert Last Change**: หากจำได้ ให้ Revert การตั้งค่าล่าสุดทันที
3. **Switch Log Audit**: เข้าไปดู Log ของ Switch ในหน้า Omada เพื่อหา Error (e.g. Loop Detected)
4. **Port Profile Verification**: ตรวจสอบว่า Port ที่ Client ต่ออยู่ ใช้ Profile VLAN ที่ถูกต้อง
5. **Re-adopt Device**: หาก Switch สถานะเป็น "Disconnected" ให้ลองทำการ Re-adopt หรือ Restart Switch
---
// Change Log:
// - 2026-05-14: Initial Omada recovery playbook
@@ -0,0 +1,16 @@
// File: docs/ai-knowledge-base/playbooks/infra/switch-reset-safe.md
# Playbook: Safe Switch Reset & Re-adoption
## 🎯 Objective
การทำ Factory Reset และทำการ Adopt ใหม่ใน Omada Controller โดยไม่ให้ระบบล่มเป็นเวลานาน
## 🏗️ Steps
1. **Backup Config**: ตรวจสอบว่ามี Backup ของ Omada Controller ล่าสุดหรือไม่
2. **Physical Reset**: กดปุ่ม Reset ที่ตัว Switch ค้างไว้จนไฟกะพริบ
3. **Omada Discovery**: รอจน Switch ปรากฏขึ้นมาในสถานะ "Pending"
4. **Adopt & Provision**: คลิก Adopt และรอให้ Controller ทำการส่ง Config (Provisioning) ไปยัง Switch
5. **VLAN Check**: ตรวจสอบว่า Port ต่างๆ ยังทำงานตาม VLAN Profile เดิมหรือไม่
---
// Change Log:
// - 2026-05-14: Initial safe reset playbook
@@ -0,0 +1,26 @@
// File: docs/ai-knowledge-base/prompts/automation/n8n-workflow.md
# n8n Workflow Design Prompt
## ⭐ Role: Workflow Automation Architect (n8n Specialist)
## 🎯 Context
ออกแบบและปรับปรุงระบบอัตโนมัติ (Automation) ใน n8n สำหรับกระบวนการจัดการเอกสาร เช่น การแจ้งเตือนผ่าน Line/Email, การทำ OCR อัตโนมัติ หรือการ Sync ข้อมูล
## 🛠️ n8n Best Practices
1. **Error Trigger**: ทุก Workflow ต้องมี Error Trigger Node เพื่อแจ้งเตือนเมื่อระบบล้มเหลว
2. **Resource Optimization**: หลีกเลี่ยงการดึงข้อมูลจำนวนมหาศาลในครั้งเดียว (ใช้ Batching/Pagination)
3. **Naming Convention**: ตั้งชื่อ Node ให้สื่อความหมาย (e.g. `HTTP: Get RFA Details`)
4. **Environment Variables**: ใช้ `$env` สำหรับข้อมูลที่เปลี่ยนแปลงตามสภาพแวดล้อม (e.g. API Keys, URLs)
## 🚀 Prompt Template
```
[n8n WORKFLOW DESIGN]
Flow: <e.g. เมื่อมีการ Approve RFA -> สร้าง PDF -> ส่งเข้า Line Group>
Triggers: <Webhook / Cron / Event>
Expected Output: รายการ Nodes ที่ต้องใช้ และ Logic ในการเชื่อมต่อแต่ละจุด
Request: ออกแบบโครงสร้าง Workflow ที่ทนทาน (Robust) และรองรับการทำ Retry
```
---
// Change Log:
// - 2026-05-14: Initial n8n workflow prompt
@@ -0,0 +1,25 @@
// File: docs/ai-knowledge-base/prompts/automation/ocr-rag-tuning.md
# OCR & RAG Tuning Prompt
## ⭐ Role: AI Engineer / Document Intelligence Specialist
## 🎯 Context
การเพิ่มความแม่นยำในการอ่านเอกสาร (OCR) และการค้นหาข้อมูลเชิงความหมาย (RAG) สำหรับเอกสารวิศวกรรมที่มีความซับซ้อน
## 🔍 Tuning Strategies
1. **OCR Post-processing**: การใช้ AI ช่วยแก้ไขคำที่อ่านผิดจาก OCR (e.g. `O` เป็น `0`, `I` เป็น `1`)
2. **Chunking Strategy**: แบ่งเนื้อหาตามหัวข้อหรือย่อหน้า (Semantic Chunking) แทนการแบ่งตามจำนวนตัวอักษร
3. **Metadata Filtering**: การผสมผสาน Keyword Search กับ Vector Search เพื่อผลลัพธ์ที่แม่นยำที่สุด
4. **Prompt Engineering for Extraction**: การออกแบบ Prompt ให้สกัดข้อมูล JSON จาก OCR text อย่างเสถียร
## 🚀 Prompt Template
```
[OCR/RAG OPTIMIZATION]
Document Type: <e.g. Drawing Title Block, RFA Form>
Problem: <e.g. อ่านเลขที่เอกสารผิด, ค้นหาข้อมูลไม่เจอ>
Request: เสนอแนวทางการปรับปรุง Chunking หรือ Prompt เพื่อเพิ่ม Accuracy ของระบบ
```
---
// Change Log:
// - 2026-05-14: Initial OCR/RAG tuning prompt
@@ -0,0 +1,28 @@
// File: docs/ai-knowledge-base/prompts/codex/codex-bugfix.md
# Bug Fix Prompt (Windsurf/Codex)
## ⭐ Role: Debugging Specialist
## 🎯 Objective
วิเคราะห์และแก้ไข Bug ในระบบ DMS โดยเน้นความถูกต้องและไม่ส่งผลกระทบต่อส่วนอื่น (No Regressions)
## 🚀 Prompt Template
```
[DEBUG]
Issue: <อธิบายอาการของ Bug และผลกระทบ>
File: <path/to/file>
Error Log: <error message จาก terminal หรือ browser>
Steps to Reproduce: <ขั้นตอนในการทำให้เกิด bug>
Request: วิเคราะห์หาสาเหตุตามลำดับความสำคัญ (Root Cause Analysis) และเสนอแนวทางการแก้ไขที่สอดคล้องกับ ADRs
```
## 🔍 Instructions for AI
1. ค้นหาจุดที่เกิด Error ใน Codebase
2. ตรวจสอบความเกี่ยวข้องกับ Database Schema หรือ Permissions
3. สร้าง Unit Test เพื่อจำลอง Bug (Red Test)
4. แก้ไขโค้ดเพื่อให้ Test ผ่าน (Green Test)
5. ตรวจสอบผลกระทบข้างเคียง (Side Effects)
---
// Change Log:
// - 2026-05-14: Initial bugfix prompt
@@ -0,0 +1,28 @@
// File: docs/ai-knowledge-base/prompts/codex/codex-feature.md
# Feature Implementation Prompt (Windsurf/Codex)
## ⭐ Role: Senior Full Stack Developer (DMS Specialist)
## 🎯 Context
ใช้เมื่อต้องการให้ AI เริ่มเขียนโค้ดสำหรับฟีเจอร์ใหม่ หลังจากที่มี Spec และ Plan แล้ว
## 🚀 Prompt Template
```
[IMPLEMENT FEATURE]
Feature Name: <ชื่อฟีเจอร์>
Spec Reference: <path/to/spec.md>
Plan Reference: <path/to/plan.md>
Current Task: <ระบุ Task จาก tasks.md>
Request: เขียนโค้ดตามมาตรฐานที่กำหนดใน AGENTS.md โดยเน้นความถูกต้องของ Type Safety และการจัดการ Error
```
## 🔍 Instructions for AI
1. อ่าน Spec และ Plan ให้เข้าใจถ่องแท้
2. ตรวจสอบ Schema ของ Database ก่อนเริ่มเขียน Entity/Service
3. เขียน Logic ให้สอดคล้องกับ ADRs (UUIDv7, Idempotency, etc.)
4. เขียน Unit Test ควบคู่ไปด้วยเสมอ
5. ตรวจสอบ Forbidden Actions ก่อนส่งงาน
---
// Change Log:
// - 2026-05-14: Initial feature implementation prompt
@@ -0,0 +1,26 @@
// File: docs/ai-knowledge-base/prompts/codex/codex-review.md
# Code Review Prompt (Windsurf/Codex)
## ⭐ Role: Senior Code Reviewer (DMS Specialist)
## 🎯 Context
ตรวจสอบโค้ดในโครงการ LCBP3-DMS เพื่อความปลอดภัย, คุณภาพ และความถูกต้องตามมาตรฐานสถาปัตยกรรม
## 📝 Focus Areas
1. **Security**: ตรวจสอบ CASL Guard, RBAC Check และการทำ Input Sanitization
2. **UUID Strategy (ADR-019)**: มั่นใจว่าใช้ `publicId` และไม่มีการใช้ `parseInt()`
3. **Database Consistency (ADR-009)**: ตรวจสอบว่าไม่มีการใช้ TypeORM Migrations
4. **Performance**: ตรวจสอบ Query Optimization และการใช้ Cache
5. **Forbidden Patterns**: ค้นหา `any`, `console.log` หรือการข้าม StorageService
## 🚀 Prompt Template
```
[CODE REVIEW]
Files: <รายการไฟล์>
Focus: <เลือก: security/performance/uuid/logic>
Request: ตรวจสอบโค้ดตามมาตรฐานใน AGENTS.md และ ADRs ที่เกี่ยวข้อง พร้อมเสนอวิธี Refactor หากพบจุดบกพร่อง
```
---
// Change Log:
// - 2026-05-14: Initial code review prompt
@@ -0,0 +1,29 @@
// File: docs/ai-knowledge-base/prompts/core/coding-standards.md
# Coding Standards & Best Practices
## ✅ General Guidelines
- **English for Code**: ใช้ภาษาอังกฤษสำหรับตัวแปร, ชื่อฟังก์ชัน และ logic
- **Thai for Comments**: ใช้ภาษาไทยสำหรับการอธิบาย code, JSDoc และ Documentation
- **Strict Typing**: ห้ามใช้ `any` เด็ดขาด ให้ใช้ Interface หรือ Type เสมอ
- **Single Export**: 1 ไฟล์ควร Export เพียง 1 สัญลักษณ์หลัก
- **File Headers**: ทุกไฟล์ต้องมี `// File: path` และ `// Change Log`
## 🆔 Identifier Strategy (ADR-019)
- **Database PK**: ใช้ `INT AUTO_INCREMENT` (ห้ามเปิดเผยผ่าน API)
- **Public ID**: ใช้ `UUIDv7` สำหรับการอ้างอิงผ่าน API และ URL เท่านั้น
- **Frontend**: ใช้ `publicId` เพียงอย่างเดียว ห้ามใช้ `parseInt()` กับ UUID
## 🛡️ Security & Integrity
- **Idempotency**: ทุกการเขียนข้อมูล (POST/PUT/PATCH) ต้องรองรับ `Idempotency-Key`
- **RBAC**: ตรวจสอบสิทธิ์ผ่าน CASL Guard เสมอ
- **Data Isolation**: AI ห้ามเข้าถึง Database โดยตรง ต้องผ่าน API เท่านั้น
- **Validation**: ใช้ Zod (Frontend) และ class-validator (Backend)
## 🏗️ Architecture
- **Backend**: Thin Controller -> Service (Business Logic) -> Repository/Entity
- **Frontend**: ใช้ Component จาก shadcn/ui และจัดการ State ด้วย TanStack Query
- **Async Tasks**: งานที่ใช้เวลานานต้องส่งเข้า BullMQ เสมอ
---
// Change Log:
// - 2026-05-14: Consolidated coding standards from AGENTS.md
@@ -0,0 +1,22 @@
// File: docs/ai-knowledge-base/prompts/core/guardrails.md
# AI Guardrails & Forbidden Actions
## 🚫 Forbidden Actions (Critical)
| Action | Reason |
| --- | --- |
| **SQL Triggers** | ห้ามใช้สำหรับ Business Logic เพราะทดสอบยากและข้าม Audit Log |
| **Direct DB/Storage Access** | AI ห้ามเข้าถึงโดยตรง ต้องผ่าน DMS API เท่านั้น |
| **parseInt() on UUID** | ห้ามใช้ เพราะจะทำให้ข้อมูลผิดพลาด (e.g. 0195... กลายเป็น 19) |
| **Exposing INT PK** | ห้ามเปิดเผย ID ที่เป็น Integer ผ่าน API ป้องกันการคาดเดาข้อมูล |
| **console.log** | ห้ามมีใน Code ที่ Commit ให้ใช้ NestJS Logger แทน |
| **any type** | ห้ามใช้เด็ดขาด เพื่อความปลอดภัยของระบบ |
| **.env in Production** | ห้ามเก็บ Secret ใน .env ให้ใช้ Docker Environment แทน |
## 🛡️ Security Checks
- ทุกครั้งที่สร้าง API ใหม่ ต้องมี `@UseGuards(CaslGuard)`
- ทุกไฟล์ที่อัปโหลดต้องผ่านการสแกน ClamAV (ผ่าน StorageService)
- ทุกการแก้ไข Schema ต้องแก้ที่ไฟล์ SQL โดยตรง (ห้ามใช้ TypeORM Migrations - ADR-009)
---
// Change Log:
// - 2026-05-14: Initial guardrails from AGENTS.md
@@ -0,0 +1,26 @@
// File: docs/ai-knowledge-base/prompts/core/master-prompt.md
# Master Prompt: NAP-DMS (Integrated Team)
## ⭐ Role: The Orchestrator (Senior Team)
ให้คุณรับบทเป็นทีมผู้เชี่ยวชาญที่ทำงานร่วมกัน:
- **Solution Architect**: ออกแบบโครงสร้างภาพรวม
- **Document Controller**: ดูแลความถูกต้องของเอกสารและสถานะ
- **Backend Engineer**: พัฒนา API ที่ปลอดภัย (NestJS)
- **Frontend Engineer**: พัฒนา UI ที่ใช้งานง่าย (Next.js)
- **DevOps Engineer**: ดูแลการ Deploy และ Automation
## 🎯 Context
ระบบคือ AI-powered Document Management System สำหรับโครงการ LCBP3 ซึ่งต้องรองรับกฎระเบียบที่เข้มงวดและความปลอดภัยระดับสูง
## 🏗️ Instructions
1. ตรวจสอบ **Specs** และ **ADRs** ที่เกี่ยวข้องทุกครั้งก่อนตอบ
2. ปฏิบัติตาม **Coding Standards** (No `any`, Thai comments, Explicit types)
3. ป้องกัน **Race Conditions** และตรวจสอบ **RBAC** เสมอ
4. หากพบความไม่ชัดเจน ให้ถามเพื่อยืนยันก่อนลงมือทำ
## 🚀 Activation
"จากนี้ไป ทุกคำตอบของคุณต้องผ่านการกลั่นกรองจากบทบาททั้ง 5 นี้ และสอดคล้องกับมาตรฐานโครงการ 100%"
---
// Change Log:
// - 2026-05-14: Initial master prompt template
@@ -0,0 +1,22 @@
// File: docs/ai-knowledge-base/prompts/core/system-context.md
# System Context: NAP-DMS (LCBP3)
## 🏗️ Project Overview
NAP-DMS คือระบบจัดการเอกสาร (Document Management System) สำหรับโครงการก่อสร้างขนาดใหญ่ (LCBP3) โดยเน้นไปที่การควบคุมเอกสาร (Document Control), การจัดการแบบวาด (Drawing Management), และการไหลเวียนของเอกสารขออนุมัติ (RFA/Transmittal/Circulation)
## 🎯 Key Modules
1. **Correspondence**: การจัดการจดหมายโต้ตอบระหว่างหน่วยงาน
2. **RFA (Request for Approval)**: กระบวนการขออนุมัติวัสดุ/แบบวาด
3. **Transmittal**: การส่งมอบเอกสารอย่างเป็นทางการ
4. **Circulation**: การกระจายเอกสารภายในทีม
5. **AI Intelligence**: การใช้ AI ในการจำแนกเอกสาร (Classification), สกัดข้อมูล (Extraction), และค้นหา (Semantic Search)
## 🔑 Technology Stack
- **Backend**: NestJS, TypeScript, MariaDB (SQL), Redis (Redlock/BullMQ)
- **Frontend**: Next.js (App Router), TanStack Query, React Hook Form, Zod, shadcn/ui
- **AI**: Ollama (On-premises), Gemini (via API for non-sensitive tasks)
- **Infrastructure**: Docker, Gitea Actions, QNAP Container Station
---
// Change Log:
// - 2026-05-14: Initial project context
@@ -0,0 +1,34 @@
// File: docs/ai-knowledge-base/prompts/dms/api-design.md
# API Design Prompt (DMS Standard)
## ⭐ Role: Backend Architect
## 🎯 Objective
ออกแบบ REST API ที่ปลอดภัย, มีประสิทธิภาพ และรองรับ Idempotency สำหรับระบบ DMS
## 📝 Instructions
1. **Naming**: ใช้ kebab-case สำหรับ URL และ camelCase สำหรับ JSON field
2. **Security**: ทุก Endpoint ต้องระบุ Decorator `@UseGuards(CaslGuard)` และ `@CheckPolicies(...)`
3. **Idempotency**: สำหรับ POST/PATCH ต้องตรวจสอบ `Idempotency-Key` ใน Header
4. **Validation**: ใช้ `Zod` สำหรับ Frontend และ `class-validator` ใน Backend DTOs
5. **Standard Response**:
- Success: `200 OK` หรือ `201 Created` พร้อมข้อมูล
- Error: ปฏิบัติตาม ADR-007 (Error Handling Strategy)
## 📤 Output Format
```typescript
// Example Controller / DTO Definition
@Controller('v1/documents')
export class DocumentController {
@Post()
@UseGuards(CaslGuard)
@CheckPolicies((ability) => ability.can(Action.Create, Document))
async create(@Body() createDto: CreateDocumentDto, @Headers('idempotency-key') key: string) {
// ... logic
}
}
```
---
// Change Log:
// - 2026-05-14: Initial API design standard
@@ -0,0 +1,30 @@
// File: docs/ai-knowledge-base/prompts/dms/bug-fix.md
# Bug Fix Prompt (DMS Module)
## ⭐ Role: Debugging Specialist (DMS Expert)
## 🎯 Context
ระบบ DMS มีความซับซ้อนเรื่องสถานะ (State) และสิทธิ์ (Permissions) การแก้ไข Bug ต้องระวังไม่ให้กระทบต่อ Workflow Logic
## 🚀 Prompt Template
```
[DEBUG DMS]
Module: <e.g. RFA, Correspondence>
Issue: <อธิบายปัญหา>
Affected PublicId: <UUIDv7 ที่เกิดปัญหา>
Error Message: <Paste log หรือ error จาก browser>
Reference Docs:
- specs/01-Requirements/01-06-edge-cases-and-rules.md
- specs/06-Decision-Records/ADR-007-error-handling-strategy.md
Request: วิเคราะห์หาสาเหตุ โดยตรวจสอบทั้ง Database State และ CASL Ability
```
## 🔍 Investigation Checklist
1. **Database Check**: ตรวจสอบสถานะจริงใน DB เทียบกับสถานะที่ควรจะเป็น
2. **Permission Check**: ผู้ใช้ที่เกิดปัญหามีสิทธิ์ทำ Action นั้นหรือไม่?
3. **Concurrency**: เกิด Race Condition หรือไม่? (เช็ค Redis locks)
4. **Validation**: ติด Zod หรือ class-validator หรือไม่?
---
// Change Log:
// - 2026-05-14: Initial bug fix prompt for DMS
@@ -0,0 +1,31 @@
// File: docs/ai-knowledge-base/prompts/dms/db-schema.md
# Database Schema Design Prompt
## ⭐ Role: Senior Database Administrator (MariaDB Specialist)
## 🎯 Context
ออกแบบหรือแก้ไขตารางฐานข้อมูลสำหรับระบบ NAP-DMS โดยยึดตาม ADR-009 และ ADR-019
## 📝 Key Rules
1. **No Migrations**: ห้ามสร้างไฟล์ Migration ให้เขียน SQL Script โดยตรง
2. **Hybrid ID**:
- `id INT AUTO_INCREMENT PRIMARY KEY` (Internal)
- `publicId BINARY(16) UNIQUE` (External - UUIDv7)
3. **Audit Fields**:
- `createdBy INT` (FK to user internal id)
- `updatedBy INT`
- `createdAt TIMESTAMP`
- `updatedAt TIMESTAMP`
- `version INT DEFAULT 1` (For optimistic locking)
## 🚀 Prompt Template
```
[DB SCHEMA DESIGN]
Feature: <ชื่อฟีเจอร์>
Requirements: <รายละเอียดข้อมูลที่ต้องเก็บ>
Request: ออกแบบตารางพร้อมความสัมพันธ์ (FK) และดัชนี (Index) ที่เหมาะสม โดยใช้มาตรฐาน Hybrid UUID
```
---
// Change Log:
// - 2026-05-14: Initial DB schema prompt standard
@@ -0,0 +1,32 @@
// File: docs/ai-knowledge-base/prompts/dms/feature-design.md
# Feature Design Prompt (DMS Edition)
## ⭐ Role: Senior Full Stack Developer / Solution Architect
## 🎯 Context
คุณกำลังออกแบบฟีเจอร์ใหม่สำหรับระบบ NAP-DMS โดยอ้างอิงจาก Business Rules ใน `specs/01-requirements/01-02-business-rules/`
## 📝 Input Template
```
[NEW FEATURE]
Module: <module-name>
Requirement: <อธิบาย User Story หรืออ้างอิงไฟล์ spec>
Constraints: <ข้อจำกัดเพิ่มเติม เช่น สิทธิ์การเข้าถึง, ความเกี่ยวข้องกับ Module อื่น>
```
## 🚀 Instructions
1. ตรวจสอบ **Glossary** (`specs/00-overview/00-02-glossary.md`) เพื่อใช้คำศัพท์ให้ถูกต้อง
2. วิเคราะห์ **Edge Cases** (`specs/01-Requirements/01-06-edge-cases-and-rules.md`)
3. ออกแบบ **Data Model & Schema** ตามมาตรฐาน ADR-019 (Hybrid UUID)
4. กำหนด **RBAC Matrix** สำหรับฟีเจอร์นี้
5. ร่างลำดับการทำงาน (Workflow) และการแจ้งเตือน (Notifications)
## 📤 Output Format
1. **Summary**: สรุปแนวทางการแก้ปัญหา
2. **Database Schema**: คำสั่ง SQL สำหรับสร้าง/แก้ไขตาราง
3. **API Contracts**: นิยาม DTO และ Endpoint
4. **Implementation Plan**: ขั้นตอนการพัฒนาทีละ Step
---
// Change Log:
// - 2026-05-14: Initial template
@@ -0,0 +1,27 @@
// File: docs/ai-knowledge-base/prompts/dms/rbac-enforcement.md
# RBAC Enforcement Prompt (DMS Security)
## ⭐ Role: Security Engineer / IAM Specialist
## 🎯 Context
การบังคับใช้สิทธิ์การเข้าถึงข้อมูล (Access Control) ตามบทบาทหน้าที่ (Role-Based Access Control) โดยใช้ CASL ใน NestJS และ RBAC Matrix
## 🛡️ Enforcement Rules
1. **CASL Guard**: ทุก API Controller ต้องประดับด้วย `@UseGuards(CaslGuard)`
2. **Policy Definition**: ตรวจสอบสิทธิ์ในระดับ Action (Create, Read, Update, Delete, Manage) และ Subject (Entity)
3. **Field Level Security**: บางฟิลด์อาจต้องซ่อนตามระดับสิทธิ์ (e.g. ข้อมูลราคา)
4. **Project Isolation**: ตรวจสอบว่าผู้ใช้มีสิทธิ์เข้าถึงโครงการนั้นๆ จริงหรือไม่ (Project ID Check)
## 🚀 Prompt Template
```
[RBAC CHECK]
Endpoint: <e.g. PATCH /v1/rfa/:publicId>
User Role: <e.g. Consultant>
Desired Action: <e.g. Approve RFA>
Reference: specs/01-requirements/01-02-business-rules/01-02-01-rbac-matrix.md
Request: วิเคราะห์และเขียนโค้ด CASL Policy สำหรับกรณีนี้
```
---
// Change Log:
// - 2026-05-14: Initial RBAC enforcement prompt
@@ -0,0 +1,25 @@
// File: docs/ai-knowledge-base/prompts/dms/refactor.md
# Code Refactoring Prompt (DMS Standard)
## ⭐ Role: Senior Software Engineer (Refactoring Specialist)
## 🎯 Objective
ปรับปรุงโครงสร้างโค้ดให้สะอาด (Clean Code), บำรุงรักษาง่าย (Maintainability) และสอดคล้องกับมาตรฐาน LCBP3
## 🏗️ Refactoring Principles
1. **DRY (Don't Repeat Yourself)**: ย้าย Logic ที่ซ้ำกันไปไว้ใน Common Service หรือ Utility
2. **SOLID**: แยกความรับผิดชอบของ Class และ Method ให้ชัดเจน
3. **Type Safety**: กำจัด `any` และ `unknown` โดยใช้ Interface/Type ที่ถูกต้อง
4. **Performance**: ลดการ Query ซ้ำซ้อน และใช้ Transaction เมื่อจำเป็น
## 🚀 Prompt Template
```
[REFACTOR]
Target File: <path/to/file>
Goal: <e.g. แยก logic ออกจาก controller, ปรับปรุง type safety>
Request: ช่วยวิเคราะห์โค้ดเดิมและเสนอเวอร์ชัน Refactor ที่ยังคงรักษา functionality เดิมไว้ 100% พร้อมอธิบายเหตุผลของการเปลี่ยนแปลง
```
---
// Change Log:
// - 2026-05-14: Initial refactor prompt
@@ -0,0 +1,27 @@
// File: docs/ai-knowledge-base/prompts/dms/report-generation.md
# Report Generation Prompt (DMS)
## ⭐ Role: Data Analyst / Backend Developer
## 🎯 Context
การสร้างรายงาน (Reports) จากข้อมูลในระบบ DMS เช่น สรุปสถานะ RFA ประจำสัปดาห์ หรือรายงานความคืบหน้าของ Drawing
## 📊 Reporting Requirements
1. **Data Source**: ดึงข้อมูลจากตารางหลัก (Correspondence, RFA, etc.) และตาราง History
2. **Filters**: ต้องรองรับการกรองตาม Project, Discipline, Date Range และ Status
3. **Export Formats**: รองรับ PDF (สำหรับเซ็นชื่อ) และ Excel (สำหรับวิเคราะห์ข้อมูล)
4. **Performance**: ใช้ Aggregate Queries ที่มีประสิทธิภาพ และทำ Caching หากจำเป็น
## 🚀 Prompt Template
```
[REPORT DESIGN]
Report Name: <ชื่อรายงาน>
Columns: <รายการฟิลด์ที่ต้องการแสดง>
Group By: <e.g. Discipline, Sub-contractor>
Export Format: <Excel/PDF>
Request: ออกแบบ Query และโครงสร้างข้อมูลสำหรับสร้างรายงานนี้
```
---
// Change Log:
// - 2026-05-14: Initial report generation prompt
@@ -0,0 +1,26 @@
// File: docs/ai-knowledge-base/prompts/dms/ui-flow.md
# UI/UX Flow Design Prompt (DMS)
## ⭐ Role: UX/UI Designer (Enterprise Application)
## 🎯 Context
ออกแบบหน้าจอและการไหลเวียนของงาน (User Journey) ในระบบ DMS ที่มีข้อมูลจำนวนมากและ Workflow ที่ซับซ้อน
## 🎨 Design Guidelines
1. **Consistency**: ใช้ Component จาก `shadcn/ui` และ Palette สีตามมาตรฐานโครงการ
2. **Efficiency**: ลดจำนวนการคลิกเพื่อเข้าถึงข้อมูลสำคัญ (e.g. Document Preview)
3. **Feedback**: ต้องมี Loading states, Success/Error toasts และ Skeleton screens
4. **Responsive**: รองรับทั้ง Desktop (หลัก) และ Tablet สำหรับงานหน้าไซต์
## 🚀 Prompt Template
```
[UI FLOW DESIGN]
Feature: <ชื่อฟีเจอร์>
User Role: <e.g. Document Control, Sub-contractor>
Objective: <สิ่งที่ผู้ใช้ต้องการทำ>
Request: ออกแบบ User Flow ตั้งแต่เริ่มต้นจนจบ พร้อมระบุ UI Components ที่ต้องใช้ในแต่ละหน้า
```
---
// Change Log:
// - 2026-05-14: Initial UI flow prompt
@@ -0,0 +1,26 @@
// File: docs/ai-knowledge-base/prompts/infra/network-troubleshoot.md
# Network Troubleshooting Prompt (DMS Infra)
## ⭐ Role: Network Engineer (Omada Specialist)
## 🎯 Context
การแก้ไขปัญหาเครือข่ายภายในโครงการที่ใช้ TP-Link Omada สำหรับการจัดการ VLAN และ Switch
## 🔍 Diagnosis Steps
1. **Physical Link**: ตรวจสอบสถานะไฟที่ Port Switch และสายแลน
2. **VLAN Tagging**: ตรวจสอบว่า Port ถูก Config เป็น Access หรือ Trunk และ VLAN ID ถูกต้องหรือไม่
3. **DHCP Status**: ตรวจสอบว่า Client ได้รับ IP Address หรือไม่
4. **Gateway Ping**: ทดสอบการเชื่อมต่อกับ Default Gateway และ Internet
## 🚀 Prompt Template
```
[NETWORK DEBUG]
Device: <e.g. Switch-Floor-2, Omada Controller>
Symptom: <e.g. ไม่สามารถเชื่อมต่อ Server ได้, VLAN 20 ใช้งานไม่ได้>
Recent Changes: <การแก้ไขล่าสุดก่อนเกิดปัญหา>
Request: ช่วยวิเคราะห์สาเหตุและเสนอขั้นตอนการแก้ไข (Step-by-step recovery)
```
---
// Change Log:
// - 2026-05-14: Initial network troubleshoot prompt
@@ -0,0 +1,27 @@
// File: docs/ai-knowledge-base/prompts/infra/server-debug.md
# Server & Docker Debugging Prompt
## ⭐ Role: Systems Administrator / DevOps Engineer
## 🎯 Context
การแก้ไขปัญหาที่เกี่ยวข้องกับ Linux Server, Docker Containers และการเชื่อมต่อฐานข้อมูล
## 🔍 Commands for Debugging
- `docker ps`: ตรวจสอบสถานะ Container
- `docker logs -f <container_name>`: ดู Log การทำงานแบบ Real-time
- `df -h`: ตรวจสอบพื้นที่ว่างใน Disk
- `free -m`: ตรวจสอบการใช้งาน RAM
- `netstat -tulpn`: ตรวจสอบ Port ที่เปิดใช้งานอยู่
## 🚀 Prompt Template
```
[SERVER DEBUG]
Service: <e.g. DMS-Backend, MariaDB>
Problem: <e.g. Container Restart Loop, Connection Timeout>
Error Output: <Paste log จาก docker logs>
Request: วิเคราะห์หาสาเหตุ (e.g. Out of Memory, Disk Full, Env Config Error) และวิธีแก้ไข
```
---
// Change Log:
// - 2026-05-14: Initial server debug prompt
@@ -0,0 +1,26 @@
// File: docs/ai-knowledge-base/prompts/infra/vlan-change.md
# VLAN Configuration Change Prompt
## ⭐ Role: Network Architect
## 🎯 Context
ขั้นตอนการเพิ่ม หรือแก้ไข VLAN ภายในโครงการเพื่อความปลอดภัยและการแยกแยะการใช้งาน (Segmentation)
## 🏗️ Configuration Rules
1. **Naming Standard**: ใช้ชื่อที่สื่อความหมาย (e.g. VLAN-10-SERVER, VLAN-20-CCTV)
2. **Subnet Planning**: กำหนด Range IP ที่ไม่ซ้ำซ้อนกับ VLAN เดิม
3. **ACL (Access Control List)**: กำหนดสิทธิ์การข้าม VLAN (Inter-VLAN Routing) ตามความจำเป็น
4. **Port Profile**: สร้าง Profile ใน Omada เพื่อความง่ายในการนำไปใช้กับ Switch หลายตัว
## 🚀 Prompt Template
```
[VLAN CHANGE]
Purpose: <e.g. แยกเครือข่ายสำหรับทีม Sub-contractor>
VLAN ID: <e.g. 30>
IP Range: <e.g. 192.168.30.0/24>
Request: ออกแบบขั้นตอนการ Config ใน Omada Controller และ Switch Port
```
---
// Change Log:
// - 2026-05-14: Initial VLAN change prompt
@@ -0,0 +1,43 @@
// File: docs/ai-knowledge-base/templates/api-spec.md
# API Specification: [Endpoint Name]
## 📋 Metadata
- **Version**: v1
- **Module**: [e.g. RFA]
- **Protocol**: REST (JSON)
- **Status**: Draft / Proposed
## 🚀 Endpoint
`METHOD /v1/[path]`
## 🛡️ Authentication & Authorization
- **Auth Required**: Yes/No
- **Roles**: [Admin, Consultant, etc.]
- **CASL Action**: `Action.Create / Action.Read / ...`
## 📥 Request Parameters
### Headers
- `Idempotency-Key`: UUID (Required for Write actions)
- `Authorization`: Bearer [token]
### Body (JSON)
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | String | Yes | Name of entity |
## 📤 Response (JSON)
### Success (200/201)
```json
{
"publicId": "...",
"status": "success",
"data": { ... }
}
```
### Error (400/401/403/500)
- ปฏิบัติตาม ADR-007
---
// Change Log:
// - 2026-05-14: Initial API spec template
@@ -0,0 +1,32 @@
// File: docs/ai-knowledge-base/templates/bug-report.md
# Bug Report: [Short Title]
## 🚨 Issue Description
[อธิบายปัญหาที่เกิดขึ้น]
## 🛠️ Environment
- **Branch**: [main / develop / ...]
- **Device**: [Desktop / Mobile]
- **User Role**: [Admin / Document Control / ...]
## 🔄 Steps to Reproduce
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error
## ❌ Actual Result
[สิ่งที่เกิดขึ้นจริง เช่น หน้าจอค้าง หรือ Error Message]
## ✅ Expected Result
[สิ่งที่ควรจะเป็น]
## 🪵 Logs & Screenshots
```
[Paste Error Log Here]
```
![Link to screenshot]
---
// Change Log:
// - 2026-05-14: Initial template
@@ -0,0 +1,42 @@
// File: docs/ai-knowledge-base/templates/db-migration.md
# Database Change Script (SQL Delta)
## 📋 Metadata
- **Feature**: [Feature Name]
- **Requested By**: [Name]
- **Date**: [YYYY-MM-DD]
- **Risk Level**: Low / Medium / High
## 🏗️ SQL Script (ADR-009 Standard)
```sql
-- Purpose: [Add new column/table for feature X]
-- Target Table: [table_name]
-- 1. Create Table (if new)
CREATE TABLE IF NOT EXISTS `table_name` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`publicId` BINARY(16) NOT NULL UNIQUE,
-- Custom fields...
`version` INT DEFAULT 1,
`createdAt` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updatedAt` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`createdBy` INT,
`updatedBy` INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2. Alter Table (if existing)
-- ALTER TABLE `table_name` ADD COLUMN `new_field` VARCHAR(255);
-- 3. Add Indexes
-- CREATE INDEX `idx_table_field` ON `table_name` (`field`);
```
## 🆘 Rollback Script
```sql
-- DROP TABLE IF EXISTS `table_name`;
-- ALTER TABLE `table_name` DROP COLUMN `new_field`;
```
---
// Change Log:
// - 2026-05-14: Initial SQL delta template based on ADR-009
@@ -0,0 +1,45 @@
// File: docs/ai-knowledge-base/templates/feature-spec.md
# Feature Specification: [Feature Name]
## 📋 Metadata
- **Status**: Draft / In Review / Approved
- **Author**: [Name]
- **Date**: [YYYY-MM-DD]
- **Module**: [e.g., Correspondence, RFA]
- **Reference**: [PRD Link / Issue ID]
## 🎯 1. Overview
[อธิบายวัตถุประสงค์สั้นๆ ของฟีเจอร์นี้ และปัญหาที่ต้องการแก้ไข]
## 📑 2. Requirements
- **Functional Requirements**:
- [ ] Requirement 1
- [ ] Requirement 2
- **Non-Functional Requirements**:
- [ ] Performance: < 200ms API response
- [ ] Security: RBAC 4-Level Check
## 🏗️ 3. Proposed Solution
### Data Model (ADR-019)
- Table: `table_name`
- Fields: `publicId (UUIDv7)`, `name`, `status`, ...
### API Endpoints
- `POST /v1/[module]/...`
- `GET /v1/[module]/:publicId`
### Workflow / Logic
[อธิบายลำดับการทำงาน หรือ Flow Chart]
## 🛡️ 4. Security & Edge Cases
- **Permissions**: ใครสามารถทำอะไรได้บ้าง?
- **Edge Cases**: จะเกิดอะไรขึ้นถ้าข้อมูลไม่ครบ? หรือส่งซ้ำ?
## ✅ 5. Acceptance Criteria
- [ ] UI แสดงผลถูกต้องตามแบบ
- [ ] API ทำงานได้ตามที่กำหนด
- [ ] Unit Test Coverage > 80%
---
// Change Log:
// - 2026-05-14: Initial template based on Hybrid Specs
@@ -0,0 +1,34 @@
// File: docs/ai-knowledge-base/templates/test-case.md
# Test Case Specification
## 📋 Metadata
- **Module**: [e.g. Authentication]
- **Type**: Unit / Integration / E2E
- **Author**: [Name]
## 🧪 Test Case: [Descriptive Title]
### Objective
[อธิบายว่าต้องการทดสอบอะไร]
### Pre-conditions
1. User logged in as [Role]
2. Data [X] exists in database
### Test Steps
1. Call API `METHOD /v1/...` with data `[Y]`
2. Verify response status is `200`
3. Verify database record is updated
### Expected Result
- API return success
- Audit log is created
- No side effects on unrelated data
### Edge Cases to Cover
- Missing `Idempotency-Key`
- Unauthorized role access
- Invalid UUID format
---
// Change Log:
// - 2026-05-14: Initial test case template