15 KiB
PROMPT
Gemini
VSCode Shortcut
Markdown preview Ctrl+Shift+V
สร้างโครงสร้างโฟลเดอร์สำหรับ lcbp3-backend
# สร้างโฟลเดอร์หลัก
$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
# 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
# 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)" ที่คุณพิมพ์เข้ามาเท่านั้นครับ เพื่อป้องกันไม่ให้เกิดเหตุการณ์แบบนี้อีก คุณสามารถใช้เทคนิคการสั่งงานดังนี้เพื่อ "บังคับ" ให้ผมตรวจสอบข้อมูลครับ:
-
สั่งให้ "อ่านและสรุปก่อน" (Verify First):
- ก่อนให้ผมเขียนโค้ด ให้สั่งว่า "ช่วยอ่านไฟล์
01_lcbp3_v1_4_3.sqlแล้วสรุปโครงสร้างตาราง audit_logs ที่มีอยู่จริงให้ดูก่อน" - วิธีนี้จะบังคับให้ผมต้องไปดึงข้อมูลจากไฟล์มาประมวลผลก่อนที่จะเริ่ม "จินตนาการ" หรือเขียนโค้ดใหม่ครับ
- ก่อนให้ผมเขียนโค้ด ให้สั่งว่า "ช่วยอ่านไฟล์
-
ใช้คำสั่ง "ห้ามเดา" (Strict Constraints):
- เติมประโยคท้ายคำสั่งว่า "ห้ามใช้โครงสร้างสมมติ ให้ยึดตามไฟล์แนบ
ชื่อไฟล์เท่านั้น หากไม่เจอข้อมูลให้ถามกลับ"
- เติมประโยคท้ายคำสั่งว่า "ห้ามใช้โครงสร้างสมมติ ให้ยึดตามไฟล์แนบ
-
อ้างอิงชื่อไฟล์ชัดเจน:
- ระบุชื่อไฟล์ในคำสั่งเสมอ เช่น "อ้างอิงจาก
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/
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
- สิ่งที่ต้องทำ: สร้าง
JsonSchemaEntity - รายละเอียด:
- เก็บ
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
AJVlibrary - สร้าง Custom Keywords:
document-number,requiredRole - ฟังก์ชัน
validateData(schemaName, data) - ฟังก์ชัน
sanitizeData()เพื่อลบ field ที่ไม่อยู่ใน schema หรือ field ที่ user ไม่มีสิทธิ์
- ติดตั้งและ Config
[ ] 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: สร้าง SchemaPOST /json-schema/validate/:name: ตรวจสอบข้อมูลPOST /json-schema/migrate/:type/:id: สั่ง MigrateGET /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 ใหม่
- Inject
[ ] T2.5.9 Testing Strategy
- สิ่งที่ต้องทำ: เขียน Unit Test
- รายละเอียด:
- ทดสอบ Validation Logic (ผ่าน/ไม่ผ่าน)
- ทดสอบ Virtual Column Generation (SQL ถูกต้องไหม)
- ทดสอบ Security Masking
🚀 ขั้นตอนถัดไป
หากท่านเห็นด้วยกับโครงสร้างนี้ ผมแนะนำให้เริ่มดำเนินการตามลำดับดังนี้ครับ:
- สร้าง Entity และ DTOs (T2.5.1)
- Implement JsonSchemaService Core (Validation Logic) (T2.5.2)
- Implement VirtualColumnService (T2.5.3) - ส่วนนี้สำคัญมากสำหรับ Performance
- สร้าง Controller และเชื่อมต่อ Module (T2.5.7)
ท่านต้องการให้ผมเริ่มเขียนโค้ดส่วนไหนก่อนหรือไม่ครับ? (เช่น Entity หรือ VirtualColumnService)