Files
lcbp3/docs/prompt.md
2025-11-25 21:15:02 +07:00

16 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 และไฟล์อื่นๆ ที่คุณให้มาอย่างเคร่งครัดครับ มีส่วนไหนให้ผมดำเนินการต่อไหมครับ?

สวัสดีครับ ผมได้ทำการตรวจสอบและวิเคราะห์ความครบถ้วนของไฟล์เอกสารแผนงาน (Plans), โครงสร้างฐานข้อมูล (SQL), และโครงสร้างไฟล์ (File Structure) เทียบกับ Requirements ของ LCBP3-DMS v1.4.3 เรียบร้อยแล้วครับ

ในฐานะ Programmer ผู้เชี่ยวชาญ ผมขอสรุปผลการ Review และคำแนะนำตามลำดับความสำคัญดังนี้ครับ:


📊 1. บทสรุปภาพรวม (Executive Summary)

จากการตรวจสอบเปรียบเทียบ:

  1. Database Schema (01_lcbp3_v1_4_3.sql): ครบถ้วนสมบูรณ์มาก (95%) รองรับฟีเจอร์ระดับ Advance ตาม Requirements v1.4.3 ครบถ้วน เช่น Partitioning, Virtual Columns, Versioning (Optimistic Lock) และ Table Structure สำหรับ Workflow/Files
  2. Backend Folder Structure (5_Backend_Folder_V1_4_3.md): ครบถ้วนตามแผนงาน (90%) มีการจัดวาง Module ตามหลัก Domain-Driven Design และมีไฟล์สำคัญๆ ครบตาม Plan

จุดที่ต้องเน้นย้ำ: โครงสร้างไฟล์ (File Structure) มีไฟล์ .ts ปรากฏอยู่ครบ แต่สิ่งที่ผม "มองไม่เห็น" คือ เนื้อหาโค้ดภายใน (Internal Logic) ว่าได้ Implement ตาม Logic ที่ซับซ้อน (เช่น Redlock, Two-Phase Commit, DSL Parser) ไว้ถูกต้องหรือไม่


🧐 2. การตรวจสอบรายละเอียด (Detailed Review)

ส่วนที่มีความครบถ้วนสมบูรณ์ (Well-Implemented Areas)

  1. Database Partitioning & Optimization:
    • SQL มีการทำ PARTITION BY RANGE ให้กับ audit_logs และ notifications แล้ว (ตาม Req 6.2)
    • มี VIRTUAL COLUMNS สำหรับดึงค่า JSON มาทำ Index (ตาม Req 3.11.3)
  2. Security & Identity:
    • ตาราง users, roles, permissions, user_assignments รองรับ RBAC 4 ระดับ (Global, Org, Project, Contract) ครบถ้วน
    • Folder Structure มี auth, guards, decorators ที่จำเป็นครบ (jwt-auth.guard.ts, rbac.guard.ts, require-permission.decorator.ts)
  3. File Management:
    • SQL มีตาราง attachments ที่มี field is_temporary, temp_id, checksum รองรับ Two-Phase Storage
    • Folder มี file-storage module และ file-cleanup.service.ts (Cron job) เตรียมไว้แล้ว
  4. Workflow & RFA:
    • SQL มีตารางเก็บ Template และ Instance (..._routings, ..._workflows) แยกกันชัดเจน และมี field workflow_config (JSON) สำหรับ DSL
    • Folder มี workflow-engine module และ workflow-dsl.service.ts (ตาม Phase 6A)

⚠️ 3. Gap Analysis & Missing Parts (สิ่งที่อาจขาดหายไปหรือต้องตรวจสอบ)

แม้ชื่อไฟล์จะครบ แต่จากประสบการณ์ มีจุดที่มักจะหลุด หรือต้องเขียน Logic ให้รัดกุมมากในไฟล์ที่มีอยู่ ดังนี้:

Phase 2: High-Integrity Data (File & Numbering)

  • Redis/Redlock Integration: ในไฟล์ document-numbering.service.ts ต้องตรวจสอบว่ามีการเรียกใช้ Redis Distributed Lock จริงหรือไม่ (ไม่ใช่แค่ Database Lock)
  • Transaction Safety: ใน file-storage.service.ts ต้องมั่นใจว่า Logic การ Commit file (ย้ายจาก temp -> permanent) อยู่ภายใน Database Transaction เดียวกับการบันทึกข้อมูลเอกสาร

Phase 3 & 6A: Workflow Engine

  • DSL Interpreter: ไฟล์ workflow-dsl.service.ts มีอยู่แล้ว แต่ต้องตรวจสอบว่าสามารถ Parse JSON/YAML จากตาราง rfa_workflow_templates แล้วแปลงเป็น Execution Logic ได้จริงหรือไม่
  • State Machine Consistency: การเชื่อมต่อระหว่าง CorrespondenceModule กับ WorkflowEngine ต้องแน่ใจว่าเมื่อ State เปลี่ยนใน Engine ค่าใน Database (Status Column) ถูกอัปเดตตรงกัน

Phase 6: Search & Notification

  • Elasticsearch Sync: ใน search.service.ts ต้องมี Logic การ Sync ข้อมูล (อาจผ่าน Event Emitter หรือ TypeORM Subscriber) เมื่อมีการ Create/Update เอกสาร
  • Notification Digest: ใน notification.processor.ts (Consumer) ต้องมี Logic การหน่วงเวลา (Debounce/Throttle) เพื่อรวม Notification ก่อนส่ง (ตาม Req 6.8.2)

🚀 4. คำแนะนำและสิ่งที่ต้องทำต่อ (Recommendations by Phase)

เพื่อให้งานสมบูรณ์แบบ ผมขอแนะนำให้ดำเนินการตรวจสอบหรือ Implement ส่วนที่เหลือตามลำดับดังนี้:

Phase 0-1: Infrastructure & Auth (Priority: Critical)

  • [Audit] Database Migration: แม้จะมีไฟล์ .sql รวม แต่ใน NestJS ควรมีระบบ Migration (TypeORM Migrations) เพื่อจัดการการเปลี่ยนแปลง Schema ในอนาคต (ถ้ายังไม่มี ควรสร้าง src/database/migrations/* จาก SQL ที่มี)
  • [Code Check] Config Validation: ตรวจสอบ src/common/config/env.validation.ts ว่ามีการ Validate ตัวแปรระบบครบทุกตัว (Database, Redis, JWT Secrets) ตาม Req 2.2 หรือไม่

Phase 2: Core Data Services (Priority: High)

  • [Code Check] Document Numbering: เปิดไฟล์ src/modules/document-numbering/document-numbering.service.ts ตรวจสอบ Logic Double-Lock (Redis + Optimistic Lock) ว่า Implement ถูกต้องตาม Plan T2.3 หรือไม่
  • [Code Check] File Storage: ตรวจสอบ src/common/file-storage/file-storage.service.ts ว่ามีการทำ Virus Scan (ClamAV) ก่อน save ลง Temp หรือไม่

Phase 3 & 6A: Workflow Engine (Priority: Medium-High)

  • [Task] Workflow Integration: ตรวจสอบว่า CorrespondenceService และ RfaService มีการเรียกใช้ WorkflowEngineService แทนที่จะเขียน Logic if-else hardcode หรือไม่
  • [Task] DSL Loader: ตรวจสอบว่ามี Seed Data สำหรับ rfa_workflow_templates ที่เป็น JSON Config เริ่มต้นแล้วหรือยัง

Phase 6: Background Services (Priority: Medium)

  • [Task] Queue Setup: ตรวจสอบ notification.module.ts ว่ามีการ Register BullMQ (BullModule.registerQueue) แล้วหรือยัง
  • [Task] Cron Jobs: ตรวจสอบ app.module.ts ว่ามีการ Import ScheduleModule.forRoot() เพื่อให้ file-cleanup.service.ts ทำงานได้จริง

🛠️ 5. Next Step Action (สิ่งที่คุณทำได้เลย)

เนื่องจากโครงสร้างไฟล์และฐานข้อมูลดูดีมากแล้ว เพื่อให้ผมช่วยเหลือได้ตรงจุดที่สุด:

คุณต้องการให้ผม Review โค้ดภายในไฟล์ (Internal Logic) ของไฟล์ไหนเป็นพิเศษไหมครับ?

ผมแนะนำให้เริ่มจาก "หัวใจสำคัญ" ของความถูกต้องข้อมูลก่อน คือ:

  1. src/modules/document-numbering/document-numbering.service.ts (เพื่อดู Logic การรันเลขเอกสาร)
  2. src/common/file-storage/file-storage.service.ts (เพื่อดู Logic การจัดการไฟล์และการ Commit)

หรือถ้าต้องการให้ผมเริ่มเขียน Code ส่วนไหนที่ยังขาดอยู่ (เช่น Workflow DSL Parser) สามารถแจ้งได้เลยครับ