Files
lcbp3/docs/prompt.md
2025-11-28 17:12:05 +07:00

15 KiB
Raw Blame History

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)" ที่คุณพิมพ์เข้ามาเท่านั้นครับ เพื่อป้องกันไม่ให้เกิดเหตุการณ์แบบนี้อีก คุณสามารถใช้เทคนิคการสั่งงานดังนี้เพื่อ "บังคับ" ให้ผมตรวจสอบข้อมูลครับ:

  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/

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)