690514:2019 204-rfa-approval-refactor #01
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user