18 KiB
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).gitignoredocker-compose.yml(Configuration หลักสำหรับ Deploy)docker-compose.override.yml(สำหรับ Inject Secrets ตอน Dev)package.jsonpnpm-lock.yamltsconfig.jsonnest-cli.jsonREADME.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
- dto/
- config/ (Configuration Service)
- env.validation.ts
- decorators/
- audit.decorator.ts
current-user.decorator.tsrequire-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)
- entities/
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)
-
user/ (User Management & RBAC)
dto/- assign-user-role.dto.ts
create-user.dto.tsupdate-user.dto.ts
entities/user.entity.tsrole.entity.tspermission.entity.tsuser-preference.entity.ts
- user-assignment.service.ts
user.controller.tsuser.module.tsuser.service.ts- user.service.spec.ts
-
project/ (Project Structure)
dto/- create-project.dto.ts
search-project.dto.tsupdate-project.dto.ts
entities/contract-organization.entity.tscontract.entity.tsorganization.entity.tsproject-organization.entity.ts(Junction)- project.entity.ts
- project.controller.spec.ts
project.controller.tsproject.module.ts- project.service.spec.ts
project.service.ts
-
correspondence/ (Core Document System)
dto/add-reference.dto.tscreate-correspondence.dto.tssearch-correspondence.dto.ts- submit-correspondence.dto.ts
workflow-action.dto.ts
entities/correspondence-reference.entity.tscorrespondence-revision.entity.tscorrespondence-routing.entity.ts(Unified Workflow)correspondence-status.entity.tscorrespondence-type.entity.tscorrespondence.entity.ts- routing-template-step.entity.ts
routing-template.entity.ts
- correspondence.controller.spec.ts
correspondence.controller.tscorrespondence.module.ts- correspondence.service.spec.ts
correspondence.service.ts(Impersonation & Workflow Logic)
-
drawing/ (Contract & Shop Drawings)
dto/create-contract-drawing.dto.tscreate-shop-drawing-revision.dto.tscreate-shop-drawing.dto.tssearch-contract-drawing.dto.tssearch-shop-drawing.dto.tsupdate-contract-drawing.dto.ts
entities/contract-drawing-sub-category.entity.tscontract-drawing-volume.entity.tscontract-drawing.entity.tsshop-drawing-main-category.entity.tsshop-drawing-revision.entity.tsshop-drawing-sub-category.entity.tsshop-drawing.entity.ts
contract-drawing.controller.tscontract-drawing.service.tsdrawing-master-data.controller.tsdrawing-master-data.service.tsdrawing.module.tsshop-drawing.controller.tsshop-drawing.service.ts
-
rfa/ (Request for Approval & Advanced Workflow)
dto/create-rfa.dto.tssearch-rfa.dto.tsupdate-rfa.dto.ts
entities/rfa-approve-code.entity.tsrfa-item.entity.tsrfa-revision.entity.tsrfa-status-code.entity.tsrfa-type.entity.tsrfa-workflow-template-step.entity.tsrfa-workflow-template.entity.tsrfa-workflow.entity.tsrfa.entity.ts
rfa.controller.tsrfa.module.tsrfa.service.ts(Unified Workflow Integration)
-
circulation/ (Internal Routing)
dto/create-circulation.dto.tsupdate-circulation-routing.dto.tssearch-circulation.dto.ts
entities/circulation-routing.entity.tscirculation-status-code.entity.tscirculation.entity.ts
circulation.controller.tscirculation.module.tscirculation.service.ts
-
transmittal/ (Document Forwarding)
dto/create-transmittal.dto.tssearch-transmittal.dto.ts- update-transmittal.dto.ts
entities/transmittal-item.entity.tstransmittal.entity.ts
transmittal.controller.tstransmittal.module.tstransmittal.service.ts
-
notification/ (System Alerts)
dto/create-notification.dto.tssearch-notification.dto.ts
entities/notification.entity.ts
notification-cleanup.service.ts(Cron Job)notification.controller.tsnotification.gateway.tsnotification.module.ts(Real-time WebSocket)notification.processor.ts(Consumer/Worker for Email & Line)notification.service.ts(Producer)
-
search/ (Elasticsearch)
dto/search-query.dto.tssearch.controller.tssearch.module.tssearch.service.ts(Indexing & Searching)
-
document-numbering/ (Internal Service)
entities/document-number-format.entity.tsdocument-number-counter.entity.ts
document-numbering.module.ts- document-numbering.service.spec.ts
document-numbering.service.ts(Double-Lock Mechanism)
-
workflow-engine/ (Unified Logic)
interfaces/workflow.interface.tsworkflow-engine.module.ts- workflow-engine.service.spec.ts
workflow-engine.service.ts(State Machine Logic)
-
json-schema/ (Validation)
dto/create-json-schema.dto.ts+search-json-schema.dto.tsupdate-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