Files
lcbp3/5_Backend_Folder_V1_4_3.md
2025-11-24 08:15:15 +07:00

21 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) ที่


📁 Backend Folder Structure (LCBP3-DMS v1.4.3)

backend/
├── .env                    # Environment variables for local development only (not committed)
├── .gitignore              # Git ignore rules
├── docker-compose.yml      # Main deployment container configuration
├── docker-compose.override.yml  # Dev-time secret/environment injection
├── package.json            # Node dependencies and NPM scripts
├── pnpm-lock.yaml          # Dependency lock file for pnpm
├── tsconfig.json           # TypeScript compiler configuration
├── nest-cli.json           # NestJS project configuration
├── README.md               # Project documentation
└── src/
    ├── main.ts             # Application bootstrap and initialization
    ├── app.module.ts       # Root application module
    │
    │
    ├── common/             # 🛠️ Shared framework resources used across modules
    │   ├── common.module.ts        # Registers shared providers
    │   │
    │   ├── auth/                   # 🛡️ Authentication module
    │   │   ├── dto/
    │   │   │   ├── login.dto.ts                # Login request payload
    │   │   │   └── register.dto.ts             # Registration payload
    │   │   ├── auth.module.ts                  # Auth DI module
    │   │   ├── auth.controller.ts              # Auth REST endpoints
    │   │   ├── auth.controller.spec.ts         # Unit tests for controller
    │   │   ├── auth.service.ts                 # Authentication logic
    │   │   └── auth.service.spec.ts            # Unit test for service
    │   │
    │   ├── config/                 # 📄 Configuration
    │   │   └── env.validation.ts               # Zod/Joi validation for environment variables
    │   │
    │   ├── decorators/             # 📡 Decorators for common use cases
    │   │   ├── audit.decorator.ts              # Enables audit logging for a method
    │   │   ├── current-user.decorator.ts       # Extracts logged-in user from request
    │   │   └── require-permission.decorator.ts # Declares RBAC permission requirement
    │   │
    │   ├── entities/               # 📚 Database entities
    │   │   ├── audit-log.entity.ts             # Audit log database entity
    │   │   └── base.entity.ts                  # Base abstraction containing core columns
    │   │
    │   ├── exceptions/             # 🛡️ Global exception trap/formatter
    │   │   └── http-exception.filter.ts        # Global exception trap/formatter
    │   │
    │   ├── file-storage/           # 📂 Two-Phase document storage (upload → scan → commit)
    │   │   ├── entities/
    │   │   │   └── attachment.entity.ts        # Represents stored file metadata
    │   │   ├── file-storage.controller.ts      # Upload/download endpoints
    │   │   ├── file-storage.controller.spec.ts # Unit tests
    │   │   ├── file-storage.module.ts          # Module DI bindings
    │   │   ├── file-storage.service.ts         # File handling logic
    │   │   └── file-storage.service.spec.ts
    │   │
    │   ├── guards/                  # 🛡️ JWT authentication guard
    │   │   ├── jwt-auth.guard.ts               # JWT authentication guard
    │   │   ├── jwt.strategy.ts                 # JWT strategy configuration
    │   │   └── rbac.guard.ts                   # Role-based access control enforcement
    │   │
    │   ├── interceptors/            # 📡 Interceptors for common use cases
    │   │   ├── audit-log.interceptor.ts        # Automatically logs certain operations
    │   │   └── transform.interceptor.ts        # Standardized response formatting
    │   │
    │   └── resilience/              # 🛡️ Circuit-breaker / retry logic (if implemented)
    │
    │
    ├── modules/             # 📦 Module-specific resources
    │   ├── user/                    # 👤 User + RBAC module
    │   │   ├── dto/
    │   │   │   ├── assign-user-role.dto.ts     # Assign roles to users
    │   │   │   ├── create-user.dto.ts
    │   │   │   └── update-user.dto.ts
    │   │   ├── entities/
    │   │   │   ├── user.entity.ts              # User table definition
    │   │   │   ├── role.entity.ts              # Role definition
    │   │   │   ├── permission.entity.ts        # Permission entity
    │   │   │   └── user-preference.entity.ts   # User preference settings
    │   │   ├── user.controller.ts              # REST endpoints
    │   │   ├── user.service.ts                 # Business logic
    │   │   ├── user.service.spec.ts            # Unit tests
    │   │   └── user.module.ts                  # Module DI container
    │   │
    │   ├── project/                # 🏢 Project/Organization/Contract structure
    │   │   ├── dto/
    │   │   │   ├── create-project.dto.ts
    │   │   │   ├── search-project.dto.ts
    │   │   │   └── update-project.dto.ts
    │   │   ├── entities/
    │   │   │   ├── project.entity.ts
    │   │   │   ├── contract.entity.ts
    │   │   │   ├── organization.entity.ts
    │   │   │   ├── project-organization.entity.ts
    │   │   │   └── contract-organization.entity.ts
    │   │   ├── project.controller.ts
    │   │   ├── project.controller.spec.ts
    │   │   └── project.service.ts
    │
    │   ├── correspondence/        # ✉️ Formal letters with routing workflow
    │   │   ├── dto/
    │   │   │   ├── add-reference.dto.ts
    │   │   │   ├── create-correspondence.dto.ts
    │   │   │   ├── search-correspondence.dto.ts
    │   │   │   ├── submit-correspondence.dto.ts
    │   │   │   └── workflow-action.dto.ts
    │   │   ├── entities/
    │   │   │   ├── correspondence.entity.ts
    │   │   │   ├── correspondence-revision.entity.ts
    │   │   │   ├── correspondence-routing.entity.ts
    │   │   │   ├── correspondence-status.entity.ts
    │   │   │   ├── correspondence-type.entity.ts
    │   │   │   ├── correspondence-reference.entity.ts
    │   │   │   ├── routing-template.entity.ts
    │   │   │   └── routing-template-step.entity.ts
    │   │   ├── correspondence.controller.ts
    │   │   ├── correspondence.controller.spec.ts
    │   │   └── correspondence.service.ts
    │
    │   ├── drawing/               # 📐Contract & Shop drawing tracking
    │   │   ├── dto/
    │   │   │   ├── create-contract-drawing.dto.ts
    │   │   │   ├── create-shop-drawing.dto.ts
    │   │   │   ├── create-shop-drawing-revision.dto.ts
    │   │   │   ├── search-contract-drawing.dto.ts
    │   │   │   ├── search-shop-drawing.dto.ts
    │   │   │   └── update-contract-drawing.dto.ts
    │   │   ├── entities/
    │   │   │   ├── contract-drawing.entity.ts
    │   │   │   ├── contract-drawing-volume.entity.ts
    │   │   │   ├── contract-drawing-sub-category.entity.ts
    │   │   │   ├── shop-drawing.entity.ts
    │   │   │   ├── shop-drawing-revision.entity.ts
    │   │   │   ├── shop-drawing-main-category.entity.ts
    │   │   │   └── shop-drawing-sub-category.entity.ts
    │   │   ├── drawing.module.ts
    │   │   ├── contract-drawing.controller.ts
    │   │   ├── contract-drawing.service.ts
    │   │   ├── drawing-master-data.controller.ts
    │   │   ├── drawing-master-data.service.ts
    │   │   ├── shop-drawing.controller.ts
    │   │   └── shop-drawing.service.ts
    │
    │   ├── rfa/                   # ✅ Request for Approval (multi-step workflow)
    │   │   ├── dto/
    │   │   │   ├── create-rfa.dto.ts
    │   │   │   ├── search-rfa.dto.ts
    │   │   │   └── update-rfa.dto.ts
    │   │   ├── entities/
    │   │   │   ├── rfa.entity.ts
    │   │   │   ├── rfa-revision.entity.ts
    │   │   │   ├── rfa-item.entity.ts
    │   │   │   ├── rfa-type.entity.ts
    │   │   │   ├── rfa-status-code.entity.ts
    │   │   │   ├── rfa-approve-code.entity.ts
    │   │   │   ├── rfa-workflow.entity.ts
    │   │   │   ├── rfa-workflow-template.entity.ts
    │   │   │   └── rfa-workflow-template-step.entity.ts
    │   │   ├── rfa.controller.ts
    │   │   ├── rfa.module.ts
    │   │   └── rfa.service.ts
    │
    │   ├── circulation/           # 🔄 Internal routing workflow
    │   │   ├── dto/
    │   │   │   ├── create-circulation.dto.ts
    │   │   │   ├── update-circulation-routing.dto.ts
    │   │   │   └── search-circulation.dto.ts
    │   │   ├── entities/
    │   │   │   ├── circulation.entity.ts
    │   │   │   ├── circulation-routing.entity.ts
    │   │   │   └── circulation-status-code.entity.ts
    │   │   ├── circulation.controller.ts
    │   │   ├── circulation.module.ts
    │   │   └── circulation.service.ts
    │
    │   ├── transmittal/            # 📤 Document forwarding
    │   │   ├── dto/
    │   │   │   ├── create-transmittal.dto.ts
    │   │   │   ├── search-transmittal.dto.ts
    │   │   │   └── update-transmittal.dto.ts
    │   │   ├── entities/
    │   │   │   ├── transmittal.entity.ts
    │   │   │   └── transmittal-item.entity.ts
    │   │   ├── transmittal.controller.ts
    │   │   ├── transmittal.module.ts
    │   │   └── transmittal.service.ts
    │
    │   ├── notification/           # 🔔 Real-Time notification system
    │   │   ├── dto/
    │   │   │   ├── create-notification.dto.ts
    │   │   │   └── search-notification.dto.ts
    │   │   ├── entities/
    │   │   │   └── notification.entity.ts
    │   │   ├── notification.module.ts           # WebSocket + Processor registration
    │   │   ├── notification.controller.ts
    │   │   ├── notification.gateway.ts          # WebSocket gateway
    │   │   ├── notification.processor.ts        # Message consumer (e.g. mail worker)
    │   │   ├── notification.service.ts
    │   │   └── notification-cleanup.service.ts  # Cron-based cleanup job
    │
    │   ├── search/                 # 🔍 Elasticsearch integration
    │   │   ├── dto/
    │   │   │   └── search-query.dto.ts
    │   │   ├── search.module.ts
    │   │   ├── search.controller.ts
    │   │   └── search.service.ts                # Indexing/search logic
    │
    │   ├── document-numbering/     # 🔢 Auto-increment controlled ID generation
    │   │   ├── entities/
    │   │   │   ├── document-number-format.entity.ts
    │   │   │   └── document-number-counter.entity.ts
    │   │   ├── document-numbering.module.ts
    │   │   ├── document-numbering.service.ts
    │   │   └── document-numbering.service.spec.ts
    │
    │   ├── workflow-engine/        # ⚙️ Unified state-machine workflow engine
    │   │   ├── interfaces/
    │   │   │   └── workflow.interface.ts
    │   │   ├── workflow-engine.module.ts
    │   │   ├── workflow-engine.service.ts
    │   │   └── workflow-engine.service.spec.ts
    │
    │   └── json-schema/            # 📋 Dynamic request schema validation
    │       ├── dto/
    │       │   ├── create-json-schema.dto.ts
    │       │   ├── update-json-schema.dto.ts
    │       │   └── search-json-schema.dto.ts
    │       ├── entities/
    │       │   └── json-schema.entity.ts
    │       ├── json-schema.module.ts
    │       ├── json-schema.controller.ts
    │       ├── json-schema.controller.spec.ts
    │       ├── json-schema.service.ts
    │       └── json-schema.service.spec.ts