Files
lcbp3/T0-T6.2.md
2025-11-24 08:15:15 +07:00

18 KiB

โครงสร้างโฟลเดอร์และไฟล์ทั้งหมดสำหรับ Backend (NestJS) ตามแผนงาน LCBP3-DMS v1.4.3 ตั้งแต่ Phase 0 ถึง Phase 6 (T0-T6.2) ที่ได้ดำเนินการไปแล้ว

โครงสร้างนี้ออกแบบตามหลัก Domain-Driven Design และ Modular Architecture ที่ระบุไว้ในแผนพัฒนา


📂 backend/ (Backend Application)

  • .env (สำหรับ Local Dev เท่านั้น ห้าม commit)
  • .gitignore
  • docker-compose.yml (Configuration หลักสำหรับ Deploy)
  • docker-compose.override.yml (สำหรับ Inject Secrets ตอน Dev)
  • package.json
  • pnpm-lock.yaml
  • tsconfig.json
  • nest-cli.json
  • README.md

📂 backend/src/ (Source Code)

📄 Entry Points

  • main.ts (Application Bootstrap, Swagger, Global Pipes)
  • app.module.ts (Root Module ที่รวมทุก Modules เข้าด้วยกัน)

📁 src/common/ (Shared Resources)

  • common.module.ts
  • auth/
    • dto/
      • login.dto.ts
      • register.dto.ts
    • auth.controller.spec.ts
    • auth.controller.ts
    • auth.module.ts
    • auth.service.spec.ts
    • auth.service.ts
  • config/ (Configuration Service)
    • env.validation.ts
  • decorators/
    • audit.decorator.ts
    • current-user.decorator.ts
    • require-permission.decorator.ts
  • entities/
    • audit-log.entity.ts
    • base.entity.ts
  • exceptions/
    • http-exception.filter.ts (Global Filter)
  • file-storage/ (Two-Phase Storage System)
    • entities/
      • attachment.entity.ts
    • file-storage.controller.spec.ts
    • file-storage.controller.ts
    • file-storage.module.ts
    • file-storage.service.spec.ts
    • file-storage.service.ts (Upload, Scan Virus, Commit)
  • guards/
    • jwt-auth.guard.ts
    • jwt.strategy.ts
    • rbac.guard.ts (ตรวจสอบสิทธิ์ 4 ระดับ)
  • interceptors/
    • audit-log.interceptor.ts (เก็บ Log ลง DB)
    • transform.interceptor.ts (Standard Response Format)
  • resilience/ (Circuit Breaker & Retry)

📁 src/modules/ (Feature Modules)

  1. user/ (User Management & RBAC)

    • dto/
      • assign-user-role.dto.ts
      • create-user.dto.ts
      • update-user.dto.ts
    • entities/
      • user.entity.ts
      • role.entity.ts
      • permission.entity.ts
      • user-preference.entity.ts
    • user-assignment.service.ts
    • user.controller.ts
    • user.module.ts
    • user.service.ts
    • user.service.spec.ts
  2. project/ (Project Structure)

    • dto/
      • create-project.dto.ts
      • search-project.dto.ts
      • update-project.dto.ts
    • entities/
      • contract-organization.entity.ts
      • contract.entity.ts
      • organization.entity.ts
      • project-organization.entity.ts (Junction)
      • project.entity.ts
    • project.controller.spec.ts
    • project.controller.ts
    • project.module.ts
    • project.service.spec.ts
    • project.service.ts
  3. correspondence/ (Core Document System)

    • dto/
      • add-reference.dto.ts
      • create-correspondence.dto.ts
      • search-correspondence.dto.ts
      • submit-correspondence.dto.ts
      • workflow-action.dto.ts
    • entities/
      • correspondence-reference.entity.ts
      • correspondence-revision.entity.ts
      • correspondence-routing.entity.ts (Unified Workflow)
      • correspondence-status.entity.ts
      • correspondence-type.entity.ts
      • correspondence.entity.ts
      • routing-template-step.entity.ts
      • routing-template.entity.ts
    • correspondence.controller.spec.ts
    • correspondence.controller.ts
    • correspondence.module.ts
    • correspondence.service.spec.ts
    • correspondence.service.ts (Impersonation & Workflow Logic)
  4. drawing/ (Contract & Shop Drawings)

    • dto/
      • create-contract-drawing.dto.ts
      • create-shop-drawing-revision.dto.ts
      • create-shop-drawing.dto.ts
      • search-contract-drawing.dto.ts
      • search-shop-drawing.dto.ts
      • update-contract-drawing.dto.ts
    • entities/
      • contract-drawing-sub-category.entity.ts
      • contract-drawing-volume.entity.ts
      • contract-drawing.entity.ts
      • shop-drawing-main-category.entity.ts
      • shop-drawing-revision.entity.ts
      • shop-drawing-sub-category.entity.ts
      • shop-drawing.entity.ts
    • contract-drawing.controller.ts
    • contract-drawing.service.ts
    • drawing-master-data.controller.ts
    • drawing-master-data.service.ts
    • drawing.module.ts
    • shop-drawing.controller.ts
    • shop-drawing.service.ts
  5. rfa/ (Request for Approval & Advanced Workflow)

    • dto/
      • create-rfa.dto.ts
      • search-rfa.dto.ts
      • update-rfa.dto.ts
    • entities/
      • rfa-approve-code.entity.ts
      • rfa-item.entity.ts
      • rfa-revision.entity.ts
      • rfa-status-code.entity.ts
      • rfa-type.entity.ts
      • rfa-workflow-template-step.entity.ts
      • rfa-workflow-template.entity.ts
      • rfa-workflow.entity.ts
      • rfa.entity.ts
    • rfa.controller.ts
    • rfa.module.ts
    • rfa.service.ts (Unified Workflow Integration)
  6. circulation/ (Internal Routing)

    • dto/
      • create-circulation.dto.ts
      • update-circulation-routing.dto.ts
      • search-circulation.dto.ts
    • entities/
      • circulation-routing.entity.ts
      • circulation-status-code.entity.ts
      • circulation.entity.ts
    • circulation.controller.ts
    • circulation.module.ts
    • circulation.service.ts
  7. transmittal/ (Document Forwarding)

    • dto/
      • create-transmittal.dto.ts
      • search-transmittal.dto.ts
      • update-transmittal.dto.ts
    • entities/
      • transmittal-item.entity.ts
      • transmittal.entity.ts
    • transmittal.controller.ts
    • transmittal.module.ts
    • transmittal.service.ts
  8. notification/ (System Alerts)

    • dto/
      • create-notification.dto.ts
      • search-notification.dto.ts
    • entities/
      • notification.entity.ts
    • notification-cleanup.service.ts (Cron Job)
    • notification.controller.ts
    • notification.gateway.ts
    • notification.module.ts (Real-time WebSocket)
    • notification.processor.ts (Consumer/Worker for Email & Line)
    • notification.service.ts (Producer)
  9. search/ (Elasticsearch)

    • dto/search-query.dto.ts
    • search.controller.ts
    • search.module.ts
    • search.service.ts (Indexing & Searching)
  10. document-numbering/ (Internal Service)

    • entities/
      • document-number-format.entity.ts
      • document-number-counter.entity.ts
    • document-numbering.module.ts
    • document-numbering.service.spec.ts
    • document-numbering.service.ts (Double-Lock Mechanism)
  11. workflow-engine/ (Unified Logic)

    • interfaces/workflow.interface.ts
    • workflow-engine.module.ts
    • workflow-engine.service.spec.ts
    • workflow-engine.service.ts (State Machine Logic)
  12. json-schema/ (Validation)

    • dto/
      • create-json-schema.dto.ts+
      • search-json-schema.dto.ts
      • update-json-schema.dto.ts
    • entities/
      • json-schema.entity.ts
    • json-schema.controller.spec.ts
    • json-schema.controller.ts
    • json-schema.module.ts
    • json-schema.service.spec.ts
    • json-schema.service.ts

นี่คือโครงสร้าง Folder Structure ของโปรเจกต์ Backend (NestJS) ฉบับสมบูรณ์ ที่รวบรวมจาก Requirements, FullStackJS Guidelines, Data Dictionary และสิ่งที่เราได้ Implement ไปแล้วตั้งแต่ Phase 0 ถึง Phase 6.2 ครับ

โครงสร้างนี้เป็นแบบ Domain-Driven Modular Architecture ครับ

lcbp3-backend/
├── .env                        # Environment variables (Local Dev)
├── .gitignore
├── docker-compose.yml          # Main config for services (DB, Redis, ES, App)
├── docker-compose.override.yml # Secrets injection for Dev
├── nest-cli.json
├── package.json
├── pnpm-lock.yaml
├── README.md
├── tsconfig.json
│
└── src/
    ├── main.ts                 # Entry point (Swagger, Helmet, Global Pipes)
    ├── app.module.ts           # Root Module
    │
    ├── common/                 # 🛠️ Shared Resources
    │   ├── auth/
    │   │   ├── guards/
    │   │   │   ├── jwt-auth.guard.ts
    │   │   │   └── rbac.guard.ts
    │   │   └── strategies/
    │   │       └── jwt.strategy.ts
    │   ├── config/             # Config Service
    │   ├── decorators/
    │   │   ├── current-user.decorator.ts
    │   │   └── require-permission.decorator.ts
    │   ├── exceptions/
    │   │   └── http-exception.filter.ts
    │   ├── file-storage/       # 📂 Two-Phase Storage System
    │   │   ├── dto/
    │   │   ├── entities/
    │   │   │   └── attachment.entity.ts
    │   │   ├── file-storage.module.ts
    │   │   └── file-storage.service.ts
    │   ├── interceptors/
    │   │   ├── audit-log.interceptor.ts
    │   │   └── transform.interceptor.ts
    │   └── resilience/         # Circuit Breaker & Retry logic
    │
    └── modules/                # 📦 Feature Modules
        │
        ├── user/               # 👤 User & RBAC
        │   ├── dto/
        │   │   ├── create-user.dto.ts
        │   │   └── update-user.dto.ts
        │   ├── entities/
        │   │   ├── permission.entity.ts
        │   │   ├── role.entity.ts
        │   │   ├── user-preference.entity.ts
        │   │   └── user.entity.ts
        │   ├── user.controller.ts
        │   ├── user.module.ts
        │   └── user.service.ts
        │
        ├── project/            # 🏢 Projects & Organizations
        │   ├── dto/
        │   │   ├── create-project.dto.ts
        │   │   ├── search-project.dto.ts
        │   │   └── update-project.dto.ts
        │   ├── entities/
        │   │   ├── contract-organization.entity.ts
        │   │   ├── contract.entity.ts
        │   │   ├── organization.entity.ts
        │   │   ├── project-organization.entity.ts
        │   │   └── project.entity.ts
        │   ├── project.controller.ts
        │   ├── project.module.ts
        │   └── project.service.ts
        │
        ├── correspondence/     # ✉️ Core Document
        │   ├── dto/
        │   │   ├── add-reference.dto.ts
        │   │   ├── create-correspondence.dto.ts
        │   │   ├── search-correspondence.dto.ts
        │   │   └── workflow-action.dto.ts
        │   ├── entities/
        │   │   ├── correspondence-reference.entity.ts
        │   │   ├── correspondence-revision.entity.ts
        │   │   ├── correspondence-routing.entity.ts
        │   │   ├── correspondence-status.entity.ts
        │   │   ├── correspondence-type.entity.ts
        │   │   ├── correspondence.entity.ts
        │   │   └── routing-template.entity.ts
        │   ├── correspondence.controller.ts
        │   ├── correspondence.module.ts
        │   └── correspondence.service.ts
        │
        ├── drawing/            # 📐 Shop & Contract Drawings
        │   ├── dto/
        │   │   ├── create-contract-drawing.dto.ts
        │   │   ├── create-shop-drawing-revision.dto.ts
        │   │   ├── create-shop-drawing.dto.ts
        │   │   ├── search-contract-drawing.dto.ts
        │   │   ├── search-shop-drawing.dto.ts
        │   │   └── update-contract-drawing.dto.ts
        │   ├── entities/
        │   │   ├── contract-drawing-sub-category.entity.ts
        │   │   ├── contract-drawing-volume.entity.ts
        │   │   ├── contract-drawing.entity.ts
        │   │   ├── shop-drawing-main-category.entity.ts
        │   │   ├── shop-drawing-revision.entity.ts
        │   │   ├── shop-drawing-sub-category.entity.ts
        │   │   └── shop-drawing.entity.ts
        │   ├── contract-drawing.controller.ts
        │   ├── contract-drawing.service.ts
        │   ├── drawing-master-data.controller.ts
        │   ├── drawing-master-data.service.ts
        │   ├── drawing.module.ts
        │   ├── shop-drawing.controller.ts
        │   └── shop-drawing.service.ts
        │
        ├── rfa/                # ✅ Request for Approval
        │   ├── dto/
        │   │   ├── create-rfa.dto.ts
        │   │   ├── search-rfa.dto.ts
        │   │   └── update-rfa.dto.ts
        │   ├── entities/
        │   │   ├── rfa-approve-code.entity.ts
        │   │   ├── rfa-item.entity.ts
        │   │   ├── rfa-revision.entity.ts
        │   │   ├── rfa-status-code.entity.ts
        │   │   ├── rfa-type.entity.ts
        │   │   ├── rfa-workflow-template-step.entity.ts
        │   │   ├── rfa-workflow-template.entity.ts
        │   │   ├── rfa-workflow.entity.ts
        │   │   └── rfa.entity.ts
        │   ├── rfa.controller.ts
        │   ├── rfa.module.ts
        │   └── rfa.service.ts
        │
        ├── circulation/        # 🔄 Internal Routing
        │   ├── dto/
        │   │   ├── create-circulation.dto.ts
        │   │   ├── search-circulation.dto.ts
        │   │   └── update-circulation-routing.dto.ts
        │   ├── entities/
        │   │   ├── circulation-routing.entity.ts
        │   │   ├── circulation-status-code.entity.ts
        │   │   └── circulation.entity.ts
        │   ├── circulation.controller.ts
        │   ├── circulation.module.ts
        │   └── circulation.service.ts
        │
        ├── transmittal/        # 📤 Outgoing Documents
        │   ├── dto/
        │   │   ├── create-transmittal.dto.ts
        │   │   └── search-transmittal.dto.ts
        │   ├── entities/
        │   │   ├── transmittal-item.entity.ts
        │   │   └── transmittal.entity.ts
        │   ├── transmittal.controller.ts
        │   ├── transmittal.module.ts
        │   └── transmittal.service.ts
        │
        ├── notification/       # 🔔 Real-time & Queue
        │   ├── dto/
        │   │   ├── create-notification.dto.ts
        │   │   └── search-notification.dto.ts
        │   ├── entities/
        │   │   └── notification.entity.ts
        │   ├── notification-cleanup.service.ts
        │   ├── notification.controller.ts
        │   ├── notification.gateway.ts
        │   ├── notification.module.ts
        │   ├── notification.processor.ts
        │   └── notification.service.ts
        │
        ├── search/             # 🔍 Elasticsearch
        │   ├── dto/
        │   │   └── search-query.dto.ts
        │   ├── search.controller.ts
        │   ├── search.module.ts
        │   └── search.service.ts
        │
        ├── document-numbering/ # 🔢 Internal Numbering Service
        │   ├── entities/
        │   │   ├── document-number-counter.entity.ts
        │   │   └── document-number-format.entity.ts
        │   ├── document-numbering.module.ts
        │   └── document-numbering.service.ts
        │
        ├── workflow-engine/    # ⚙️ Unified Logic
        │   ├── interfaces/
        │   │   └── workflow.interface.ts
        │   ├── workflow-engine.module.ts
        │   └── workflow-engine.service.ts
        │
        └── json-schema/        # 📋 Validation Logic
            ├── json-schema.module.ts
            └── json-schema.service.ts