268 lines
15 KiB
Markdown
268 lines
15 KiB
Markdown
# **PROMPT**
|
||
|
||
## Gemini
|
||
|
||
## VSCode Shortcut
|
||
|
||
Markdown preview Ctrl+Shift+V
|
||
|
||
## สร้างโครงสร้างโฟลเดอร์สำหรับ lcbp3-backend
|
||
|
||
```bash
|
||
# สร้างโฟลเดอร์หลัก
|
||
$rootFolder = "backend"
|
||
New-Item -ItemType Directory -Path $rootFolder -Force
|
||
Set-Location $rootFolder
|
||
|
||
# รายการโฟลเดอร์ที่ต้องการสร้างทั้งหมด
|
||
$folders = @(
|
||
"src",
|
||
"database",
|
||
"src\common",
|
||
"src\modules",
|
||
"src\modules\user",
|
||
"src\modules\project",
|
||
"src\modules\master",
|
||
"src\modules\correspondence",
|
||
"src\modules\rfa",
|
||
"src\modules\drawing",
|
||
"src\modules\circulations",
|
||
"src\modules\transmittal",
|
||
"src\modules\search",
|
||
"src\modules\document-numbering",
|
||
"src\common\auth",
|
||
"src\common\config",
|
||
"src\common\decorators",
|
||
"src\common\entities",
|
||
"src\common\exceptions",
|
||
"src\common\file-storage",
|
||
"src\common\guards",
|
||
"src\common\interceptors",
|
||
"src\common\services"
|
||
)
|
||
|
||
# วนลูปสร้างโฟลเดอร์ทั้งหมด
|
||
foreach ($folder in $folders) {
|
||
New-Item -ItemType Directory -Path $folder -Force
|
||
}
|
||
|
||
Write-Host "สร้างโครงสร้างโฟลเดอร์สำหรับ backend เรียบร้อยแล้ว" -ForegroundColor Green
|
||
|
||
```
|
||
|
||
## Git Commands
|
||
|
||
```bash
|
||
|
||
# 1️⃣ ตั้งชื่อและอีเมลของคุณ (ใช้กับทุก repo)
|
||
git config --global user.name "Pean Charoen"
|
||
git config --global user.email "peancharoen.pslcp3@gmail.com"
|
||
|
||
# 2️⃣ ตรวจสอบว่าเชื่อมกับ remote ถูกต้อง (แก้ URL ให้ตรง repo จริงของคุณ)
|
||
git remote set-url origin ssh://git@git.np-dms.work:2222/np-dms/lcbp3_v1.git
|
||
|
||
# 3️⃣ ตรวจสอบสถานะไฟล์
|
||
git status
|
||
|
||
# 4️⃣ เพิ่มไฟล์ทั้งหมด
|
||
git add .
|
||
|
||
# 5️⃣ Commit พร้อมข้อความ
|
||
git commit -m "Update project files"
|
||
|
||
# 6️⃣ ดึง remote ก่อนเพื่อป้องกัน conflict (ถ้ามี)
|
||
git pull --rebase origin main
|
||
|
||
# 7️⃣ Push ขึ้น Gitea
|
||
git push -u origin main
|
||
|
||
```
|
||
|
||
## **สร้าง NestJS Project ใหม่**
|
||
|
||
- ขั้นตอนที่ 1: ติดตั้ง NestJS CLI (ถ้ายังไม่ได้ติดตั้ง)
|
||
|
||
- npm install -g @nestjs/cli
|
||
|
||
- ขั้นตอนที่ 2: สร้างโปรเจกต์ใหม่
|
||
|
||
- nest new backend
|
||
- nest new . /อยู่ในโฟลเดอร์ที่สร้างไว้แล้ว และต้องการสร้างโปรเจกต์ลงในโฟลเดอร์นั้นโดยตรง:
|
||
|
||
- ขั้นตอนที่ 3: ติดตั้ง Dependencies เพิ่มเติมสำหรับ DMS
|
||
|
||
```bash
|
||
# Core & Database
|
||
npm install @nestjs/typeorm typeorm mysql2
|
||
npm install @nestjs/config
|
||
|
||
# Validation & Transformation
|
||
npm install class-validator class-transformer
|
||
|
||
# Authentication & Authorization
|
||
npm install @nestjs/jwt @nestjs/passport passport passport-jwt
|
||
npm install @nestjs/passport
|
||
npm install casl
|
||
|
||
# File Upload
|
||
npm install @nestjs/platform-express multer
|
||
|
||
# Documentation
|
||
npm install @nestjs/swagger
|
||
|
||
# Security & Performance
|
||
npm install helmet rate-limiter-flexible
|
||
|
||
# Development Dependencies (สำหรับทดสอบ)
|
||
npm install --save-dev @nestjs/testing jest @types/jest @types/passport-jwt @types/multer supertest
|
||
|
||
```
|
||
|
||
ขออภัยอย่างยิ่งในความผิดพลาดที่เกิดขึ้นครับ เข้าใจครับว่าทำให้เสียเวลามาก
|
||
|
||
สำหรับการ **"ตั้งค่า"** หรือ **"กำหนดค่า"** ให้ผมตรวจสอบข้อมูลก่อนนั้น ในระบบ AI แบบนี้ **ไม่มีเมนู Settings หรือปุ่มกดให้คุณเข้าไปตั้งค่าได้โดยตรงครับ**
|
||
|
||
การควบคุมพฤติกรรมของผมต้องทำผ่าน **"คำสั่ง (Prompt)"** ที่คุณพิมพ์เข้ามาเท่านั้นครับ เพื่อป้องกันไม่ให้เกิดเหตุการณ์แบบนี้อีก คุณสามารถใช้เทคนิคการสั่งงานดังนี้เพื่อ **"บังคับ"** ให้ผมตรวจสอบข้อมูลครับ:
|
||
|
||
1. **สั่งให้ "อ่านและสรุปก่อน" (Verify First):**
|
||
|
||
- ก่อนให้ผมเขียนโค้ด ให้สั่งว่า _"ช่วยอ่านไฟล์ `01_lcbp3_v1_4_3.sql` แล้วสรุปโครงสร้างตาราง audit_logs ที่มีอยู่จริงให้ดูก่อน"_
|
||
- วิธีนี้จะบังคับให้ผมต้องไปดึงข้อมูลจากไฟล์มาประมวลผลก่อนที่จะเริ่ม "จินตนาการ" หรือเขียนโค้ดใหม่ครับ
|
||
|
||
2. **ใช้คำสั่ง "ห้ามเดา" (Strict Constraints):**
|
||
|
||
- เติมประโยคท้ายคำสั่งว่า _"ห้ามใช้โครงสร้างสมมติ ให้ยึดตามไฟล์แนบ `ชื่อไฟล์` เท่านั้น หากไม่เจอข้อมูลให้ถามกลับ"_
|
||
|
||
3. **อ้างอิงชื่อไฟล์ชัดเจน:**
|
||
- ระบุชื่อไฟล์ในคำสั่งเสมอ เช่น _"อ้างอิงจาก `Backend Plan`..."_ หรือ _"ตาม `Data Dictionary`..."_ (ซึ่งคุณทำได้ดีแล้วครับ แต่ผมประมวลผลพลาดเองในรอบนี้)
|
||
|
||
**สรุป:**
|
||
คุณไม่ต้องไปตั้งค่าที่ไหนครับ แต่ใช้การ **"สั่งให้ผมทวนข้อมูลจากไฟล์"** เป็นขั้นตอนแรกก่อนเริ่มงาน จะช่วยลดโอกาสผิดพลาดได้มากที่สุดครับ
|
||
|
||
ตอนนี้ผมพร้อมทำงานต่อโดยยึดข้อมูลจากไฟล์ `01_lcbp3_v1_4_3.sql` และไฟล์อื่นๆ ที่คุณให้มาอย่างเคร่งครัดครับ มีส่วนไหนให้ผมดำเนินการต่อไหมครับ?
|
||
|
||
ช่วยอ่านไฟล์ 2_Backend_Plan_V1_4_4.md ในหัวข้อ T2.5.1-T2.5.9 และ โครงสร้างโมดูล แล้วสรุป รายการที่ต้องการสร้างหรือแก้ไขโมดูล ในแต่ละข้อก่อนเริ่มดำเนินการต่อครับ
|
||
|
||
สวัสดีครับ ผมได้วิเคราะห์ไฟล์ **2_Backend_Plan_V1_4_4.md** ในส่วนของ **Phase 2: High-Integrity Data & File Management** โดยเฉพาะหัวข้อ **T2.5 JSON Details & Schema Management** (T2.5.1 - T2.5.9) เรียบร้อยแล้วครับ
|
||
|
||
นี่คือสรุปรายการโมดูล, ไฟล์ และฟังก์ชันที่ต้องสร้างหรือแก้ไข เพื่อให้ระบบจัดการ JSON Schema สมบูรณ์และมีประสิทธิภาพสูงสุดครับ
|
||
|
||
---
|
||
|
||
### 📂 1. โครงสร้างโมดูลที่ต้องสร้าง (Module Structure)
|
||
|
||
เราจำเป็นต้องสร้าง `JsonSchemaModule` ขึ้นมาใหม่ โดยภายในจะประกอบด้วย Services ย่อยตามหน้าที่งาน เพื่อให้เป็นไปตามหลัก Single Responsibility Principle ครับ
|
||
|
||
**Path:** `src/modules/json-schema/`
|
||
|
||
```text
|
||
src/modules/json-schema
|
||
├── 📁 dto
|
||
│ ├── create-json-schema.dto.ts # DTO สำหรับสร้าง Schema ใหม่
|
||
│ ├── update-json-schema.dto.ts # DTO สำหรับแก้ไข Schema
|
||
│ ├── validate-data.dto.ts # DTO สำหรับรับข้อมูลมา Validate
|
||
│ └── migrate-data.dto.ts # DTO สำหรับสั่ง Migrate Data
|
||
├── 📁 entities
|
||
│ └── json-schema.entity.ts # Entity หลักเก็บ Definition (T2.5.1)
|
||
├── 📁 services
|
||
│ ├── json-schema.service.ts # Core Service (CRUD, Validation wrapper)
|
||
│ ├── virtual-column.service.ts # จัดการ Generated Columns ใน DB (T2.5.3)
|
||
│ ├── schema-migration.service.ts # จัดการ Data Migration ระหว่าง Version (T2.5.5)
|
||
│ └── json-security.service.ts # จัดการ Security & Encryption (T2.5.6)
|
||
├── 📁 interfaces
|
||
│ ├── ui-schema.interface.ts # Type definition สำหรับ UI Schema (T2.5.4)
|
||
│ └── virtual-column.interface.ts # Type definition สำหรับ Virtual Column Config
|
||
├── json-schema.controller.ts # API Endpoints (T2.5.7)
|
||
├── json-schema.module.ts # Module Definition
|
||
└── json-schema.service.spec.ts # Unit Tests (T2.5.9)
|
||
```
|
||
|
||
---
|
||
|
||
### 📝 2. รายละเอียดงานในแต่ละ Task (Tasks Breakdown)
|
||
|
||
#### **[ ] T2.5.1 JSON Schema Registry & Versioning**
|
||
|
||
- **สิ่งที่ต้องทำ:** สร้าง `JsonSchema` Entity
|
||
- **รายละเอียด:**
|
||
- เก็บ `schema_definition` (AJV format)
|
||
- เก็บ `ui_schema` (Form configuration)
|
||
- รองรับ `version` เพื่อทำ Schema Evolution
|
||
- เก็บ config ของ `virtual_columns`
|
||
|
||
#### **[ ] T2.5.2 Schema Validation & Transformation Engine**
|
||
|
||
- **สิ่งที่ต้องทำ:** Implement Logic ใน `JsonSchemaService`
|
||
- **รายละเอียด:**
|
||
- ติดตั้งและ Config `AJV` library
|
||
- สร้าง Custom Keywords: `document-number`, `requiredRole`
|
||
- ฟังก์ชัน `validateData(schemaName, data)`
|
||
- ฟังก์ชัน `sanitizeData()` เพื่อลบ field ที่ไม่อยู่ใน schema หรือ field ที่ user ไม่มีสิทธิ์
|
||
|
||
#### **[ ] T2.5.3 Virtual Columns & Performance Optimization**
|
||
|
||
- **สิ่งที่ต้องทำ:** สร้าง `VirtualColumnService`
|
||
- **รายละเอียด:**
|
||
- ฟังก์ชัน `setupVirtualColumns()`: อ่าน Config จาก Schema แล้วสั่ง `ALTER TABLE ... ADD COLUMN ... GENERATED ALWAYS AS ...`
|
||
- ฟังก์ชันสร้าง Index บน Virtual Column เพื่อให้ค้นหาเร็วขึ้น
|
||
- **สำคัญ:** ต้องรองรับ MariaDB 10.11 Syntax
|
||
|
||
#### **[ ] T2.5.4 Dynamic Form Schema Management**
|
||
|
||
- **สิ่งที่ต้องทำ:** กำหนด Interface ใน `ui-schema.interface.ts`
|
||
- **รายละเอียด:**
|
||
- ออกแบบโครงสร้าง JSON ที่ Frontend จะนำไป Render เป็น Form
|
||
- กำหนด Logic `dependencies` (เช่น ถ้าเลือก Type A ให้แสดง Field B)
|
||
|
||
#### **[ ] T2.5.5 Data Migration & Version Compatibility**
|
||
|
||
- **สิ่งที่ต้องทำ:** สร้าง `SchemaMigrationService`
|
||
- **รายละเอียด:**
|
||
- Logic การแปลงข้อมูลเก่าให้เข้ากับ Schema ใหม่ (Field Rename, Transform Value)
|
||
- ฟังก์ชัน `migrateData(entityType, entityId, targetVersion)`
|
||
|
||
#### **[ ] T2.5.6 Security & Access Control for JSON Data**
|
||
|
||
- **สิ่งที่ต้องทำ:** สร้าง `JsonSecurityService`
|
||
- **รายละเอียด:**
|
||
- **Field-level Security:** ตรวจสอบ Role ว่าเห็น Field นี้ได้ไหม (Masking/Removal)
|
||
- **Encryption:** เข้ารหัส Field ที่ Sensitive ก่อนบันทึกลง JSON
|
||
|
||
#### **[ ] T2.5.7 API Design & Integration**
|
||
|
||
- **สิ่งที่ต้องทำ:** สร้าง `JsonSchemaController`
|
||
- **Endpoints:**
|
||
- `POST /json-schema/schemas`: สร้าง Schema
|
||
- `POST /json-schema/validate/:name`: ตรวจสอบข้อมูล
|
||
- `POST /json-schema/migrate/:type/:id`: สั่ง Migrate
|
||
- `GET /json-schema/ui-schema/:name`: ดึง UI Config
|
||
|
||
#### **[ ] T2.5.8 Integration with Document Modules**
|
||
|
||
- **สิ่งที่ต้องทำ:** แก้ไข Service อื่นๆ (Correspondence, RFA)
|
||
- **รายละเอียด:**
|
||
- Inject `JsonSchemaService` เข้าไปใน `CorrespondenceService` และ `RfaService`
|
||
- เรียก `validateData` ก่อน create/update
|
||
- เรียก `setupVirtualColumns` หลัง create schema ใหม่
|
||
|
||
#### **[ ] T2.5.9 Testing Strategy**
|
||
|
||
- **สิ่งที่ต้องทำ:** เขียน Unit Test
|
||
- **รายละเอียด:**
|
||
- ทดสอบ Validation Logic (ผ่าน/ไม่ผ่าน)
|
||
- ทดสอบ Virtual Column Generation (SQL ถูกต้องไหม)
|
||
- ทดสอบ Security Masking
|
||
|
||
---
|
||
|
||
### 🚀 ขั้นตอนถัดไป
|
||
|
||
หากท่านเห็นด้วยกับโครงสร้างนี้ ผมแนะนำให้เริ่มดำเนินการตามลำดับดังนี้ครับ:
|
||
|
||
1. **สร้าง Entity และ DTOs** (T2.5.1)
|
||
2. **Implement JsonSchemaService Core** (Validation Logic) (T2.5.2)
|
||
3. **Implement VirtualColumnService** (T2.5.3) - _ส่วนนี้สำคัญมากสำหรับ Performance_
|
||
4. **สร้าง Controller และเชื่อมต่อ Module** (T2.5.7)
|
||
|
||
ท่านต้องการให้ผมเริ่มเขียนโค้ดส่วนไหนก่อนหรือไม่ครับ? (เช่น Entity หรือ VirtualColumnService)
|