Prepare to version 1.5 use spec-kit

This commit is contained in:
admin
2025-11-30 13:58:46 +07:00
parent eff0169c21
commit 241022ada6
169 changed files with 34584 additions and 26464 deletions

View File

@@ -0,0 +1,655 @@
# 📋 แผนการพัฒนา Backend (NestJS) - LCBP3-DMS v1.4.0
## 🎯 ภาพรวมโครงการ
พัฒนา Backend สำหรับระบบบริหารจัดการเอกสารโครงการ (Document Management System) ที่รองรับการจัดการเอกสารที่ซับซ้อน มีระบบ Workflow การอนุมัติ และการควบคุมสิทธิ์แบบ RBAC 3 ระดับ
---
## 📐 สถาปัตยกรรมระบบ
### Technology Stack
- **Framework:** NestJS (TypeScript, ESM)
- **Database:** MariaDB 10.11
- **ORM:** TypeORM
- **Authentication:** JWT + Passport
- **Authorization:** CASL (RBAC)
- **File Upload:** Multer
- **Search:** Elasticsearch
- **Notification:** Nodemailer + n8n (Line Integration)
- **Scheduling:** @nestjs/schedule (Cron Jobs)
- **Documentation:** Swagger
### โครงสร้างโมดูล (Domain-Driven)
```tree
src/
├── common/ # Shared Module
│ ├── auth/ # JWT, Guards
│ ├── config/ # Configuration
│ ├── decorators/ # @RequirePermission
│ ├── entities/ # Base Entities
│ ├── exceptions/ # Global Filters
│ ├── file-storage/ # FileStorageService
│ ├── guards/ # RBAC Guard
│ ├── interceptors/ # Audit, Transform
│ └── services/ # Notification, etc.
├── modules/
│ ├── user/ # Users, Roles, Permissions
│ ├── project/ # Projects, Contracts, Organizations
│ ├── master/ # Master Data
│ ├── correspondence/ # Correspondence Management
│ ├── rfa/ # RFA & Workflows
│ ├── drawing/ # Shop/Contract Drawings
│ ├── circulation/ # Internal Circulation
│ ├── transmittal/ # Transmittals
│ ├── search/ # Elasticsearch
│ └── document-numbering/ # Internal Service
└── database/ # Migrations & Seeds
```
---
## 🗓️ แผนการพัฒนาแบบ Phase-Based
## **Phase 0: Infrastructure Setup (สัปดาห์ที่ 1)**
Milestone: สร้างโครงสร้างพื้นฐานและเชื่อมต่อ Services
### Phase 0: Tasks
- **[✅]T0.1 Setup QNAP Container Station**
- สร้าง Docker Network: `lcbp3`
- Setup docker-compose.yml สำหรับ:
- MariaDB (db.np-dms.work)
- PHPMyAdmin (pma.np-dms.work)
- Backend (backend.np-dms.work)
- Nginx Proxy Manager (npm.np-dms.work)
- กำหนด Environment Variables ใน docker-compose.yml (ไม่ใช้ .env)
- Deliverable: Services ทั้งหมดรันได้และเชื่อมต่อกันผ่าน Network
- **[✅]T0.2 Initialize NestJS Project**
- สร้างโปรเจกต์ใหม่ด้วย Nest CLI
- ติดตั้ง Dependencies:
```bash
npm install @nestjs/typeorm typeorm mysql2
npm install @nestjs/config
npm install class-validator class-transformer
npm install @nestjs/jwt @nestjs/passport passport passport-jwt
npm install casl
npm install @nestjs/platform-express multer
npm install @nestjs/swagger
npm install helmet rate-limiter-flexible
npm install bcrypt
npm install --save-dev @nestjs/testing jest @types/jest @types/passport-jwt @types/multer supertest
npm install @nestjs/cache-manager cache-manager
npm install @nestjs/schedule
npm install @nestjs/config
npm install @nestjs/elasticsearch @elastic/elasticsearch
npm install nodemailer @types/nodemailer
npm install uuid @types/uuid
```
````
- Setup โครงสร้างโฟลเดอร์ตาม Domain-Driven Architecture
- Deliverable: Project Structure พร้อม, แสดง Swagger ที่ `/api`
- **[✅]T0.3 Setup Database Connection**
- Import SQL Schema v1.4.0 เข้า MariaDB
- Run Seed Data (organizations, users, roles, permissions)
- Configure TypeORM ใน AppModule
- ทดสอบ Connection
- Deliverable: Database พร้อมใช้งาน, มี Seed Data
- **[✅]T0.4 Setup Git Repository**
- สร้าง Repository ใน Gitea (git.np-dms.work)
- Setup .gitignore, README.md
- Commit Initial Project
- Deliverable: Code อยู่ใน Version Control
---
## **Phase 1: Core Foundation (สัปดาห์ที่ 2-3)**
Milestone: ระบบ Authentication, Authorization และ Base Entities
### Phase 1: Tasks
- **[ ] T1.1 CommonModule - Base Infrastructure**
- [ ] สร้าง Base Entity (id, created_at, updated_at, deleted_at)
- [ ] สร้าง Global Exception Filter
- [ ] สร้าง Response Transform Interceptor
- [ ] สร้าง Audit Log Interceptor
- [ ] สร้าง RequestContextService - สำหรับเก็บข้อมูลระหว่าง Request
- [ ] สร้าง ConfigService - Centralized configuration management
- [ ] สร้าง CryptoService - สำหรับ encryption/decryption
- [ ] Deliverable: Common Services พร้อมใช้
- **[ ] T1.2 AuthModule - JWT Authentication**
- [ ] สร้าง Entity: User
- [ ] สร้าง AuthService:
- [ ] `login(username, password)` → JWT Token
- [ ] `validateUser(username, password)` → User | null
- [ ] Password Hashing (bcrypt)
- [ ] สร้าง JWT Strategy (Passport)
- [ ] สร้าง JwtAuthGuard
- [ ] สร้าง Controllers:
- [ ] `POST /auth/login` → { access_token }
- [ ] `POST /auth/register` (Admin only)
- [ ] `GET /auth/profile` (Protected)
- [ ] Deliverable: ล็อกอิน/ล็อกเอาต์ทำงานได้
- **[ ] T1.3 UserModule - User Management**
- [ ] สร้าง Entities: User, Role, Permission, UserRole
- [ ] สร้าง UserService CRUD
- [ ] สร้าง RoleService CRUD
- [ ] สร้าง PermissionService (Read-Only, จาก Seed)
- [ ] สร้าง Controllers:
- [ ] `GET /users` → List Users (Paginated)
- [ ] `GET /users/:id` → User Detail
- [ ] `POST /users` → Create User
- [ ] `PUT /users/:id` → Update User
- [ ] `DELETE /users/:id` → Soft Delete
- [ ] `GET /roles` → List Roles
- [ ] `POST /roles` → Create Role (Admin)
- [ ] `PUT /roles/:id/permissions` → Assign Permissions
- [ ] Deliverable: จัดการผู้ใช้และ Role ได้
- **[ ] T1.4 RBAC Guard - Authorization**
- [ ] สร้าง `@RequirePermission()` Decorator
- [ ] สร้าง RbacGuard ที่ตรวจสอบ:
- [ ] Global Permissions
- [ ] Organization Permissions
- [ ] Project Permissions
- [ ] Contract Permissions
- [ ] Permission Hierarchy Logic
```bash
// Current: 3-level hierarchy
// Recommended: 4-level hierarchy (Global → Organization → Project → Contract)
@Injectable()
export class RbacGuard implements CanActivate {
async canActivate(context: ExecutionContext): Promise<boolean> {
const requiredPermission = this.getRequiredPermission(context);
const user = this.getUser(context);
// Check permissions in order: Global → Org → Project → Contract
return await this.checkGlobalPermissions(user, requiredPermission) ||
await this.checkOrgPermissions(user, requiredPermission) ||
await this.checkProjectPermissions(user, requiredPermission) ||
await this.checkContractPermissions(user, requiredPermission);
}
}
````
- [ ] Integration กับ CASL
- [ ] Deliverable: ระบบสิทธิ์ทำงานได้ทั้ง 4 ระดับ
- **T1.5 ProjectModule - Base Structures**
- [ ] สร้าง Entities:
- [ ] Organization
- [ ] Project
- [ ] Contract
- [ ] ProjectOrganization (Junction)
- [ ] ContractOrganization (Junction)
- [ ] UserAssignment Entity - สำหรับจัดการ user assignments ตาม scope
- [ ] สร้าง Services & Controllers:
- [ ] `GET /organizations` → List
- [ ] `POST /projects` → Create (Superadmin)
- [ ] `GET /projects/:id/contracts` → List Contracts
- [ ] `POST /projects/:id/contracts` → Create Contract
- [ ] UserAssignment - สำหรับจัดการ user assignments ตาม scope
- [ ] ProjectOrganization - สำหรับจัดการความสัมพันธ์ project-organization
- [ ] ContractOrganization - สำหรับจัดการความสัมพันธ์ contract-organization
- [ ] Deliverable: จัดการโครงสร้างโปรเจกต์ได้
---
## **Phase 2: Master Data & File Management (สัปดาห์ที่ 4)**
Milestone: Master Data และระบบจัดการไฟล์
### Phase 2: Tasks
- **[ ] T2.1 MasterModule - Master Data Management**
- [ ] สร้าง Entities:
- [ ] CorrespondenceType
- [ ] CorrespondenceStatus
- [ ] RfaType
- [ ] RfaStatusCode
- [ ] RfaApproveCode
- [ ] CirculationStatusCode
- [ ] Tag
- [ ] สร้าง Services & Controllers (CRUD):
- [ ] `GET /master/correspondence-types`
- [ ] `POST /master/tags` → Create Tag
- [ ] `GET /master/tags` → List Tags (Autocomplete)
- [ ] Deliverable: Admin จัดการ Master Data ได้
- **[ ] T2.2 FileStorageService - Central File Management**
- [ ] สร้าง Attachment Entity
- [ ] สร้าง FileStorageService: (การจัดเก็บไฟล์ในรูปแบบ centralized storage, ครอบคลุมการจัดการไฟล์แนบทั้งหมด, Security Measures)
- [ ] `uploadFile(file: Express.Multer.File)` → Attachment
- [ ] `getFilePath(attachmentId)` → string
- [ ] `deleteFile(attachmentId)` → boolean
- [ ] จัดเก็บไฟล์ใน `/share/dms-data/uploads/{YYYY}/{MM}/`
- [ ] สร้าง Controller:
- [ ] `POST /files/upload` → { attachment_id, url }
- [ ] `GET /files/:id/download` → File Stream (Protected)
- [ ] Access Control: ตรวจสอบสิทธิ์ผ่าน Junction Table
- [ ] Deliverable: อัปโหลด/ดาวน์โหลดไฟล์ได้อย่างปลอดภัย
- **[ ] T2.3 DocumentNumberingModule - Internal Service**
- [ ] สร้าง Entities:
- [ ] DocumentNumberFormat
- [ ] DocumentNumberCounter
- [ ] สร้าง DocumentNumberingService: รวม Stored Procedure (sp_get_next_document_number), Error Handling และ Retry Logic
- [ ] `generateNextNumber(projectId, orgId, typeId, year)` → string
- [ ] เรียก Stored Procedure: `sp_get_next_document_number`
- [ ] Format ตาม Template: `{ORG_CODE}-{TYPE_CODE}-{YEAR_SHORT}-{SEQ:4}`
- **ไม่มี Controller** (Internal Service เท่านั้น)
- [ ] Deliverable: Service สร้างเลขที่เอกสารได้ถูกต้อง
---
## **Phase 3: Correspondence & RFA Core (สัปดาห์ที่ 5-6)**
Milestone: ระบบเอกสารโต้ตอบและ RFA
### Phase 3: Tasks
- **[ ] T3.1 CorrespondenceModule - Basic CRUD**
- [ ] สร้าง Entities:
- [ ] Correspondence
- [ ] CorrespondenceRevision
- [ ] CorrespondenceRecipient
- [ ] CorrespondenceTag
- [ ] CorrespondenceReference
- [ ] CorrespondenceAttachment
- [ ] สร้าง CorrespondenceService: Complex Business Rules, State Machine สำหรับ Status Transitions
- [ ] `create(dto)` → Correspondence
- [ ] สร้าง Correspondence + Revision แรก (rev 0)
- [ ] เรียก DocumentNumberingService
- [ ] สร้าง Recipients (TO/CC)
- [ ] สร้าง Tags
- [ ] สร้าง Attachments
- [ ] `update(id, dto)` → Correspondence
- [ ] สร้าง Revision ใหม่
- [ ] Update `is_current` flag
- [ ] `findAll(filters)` → Paginated List
- [ ] `findById(id)` → Correspondence with Current Revision
- [ ] สร้าง Controllers:
- [ ] `POST /correspondences` → Create
- [ ] `GET /correspondences` → List (Filter by type, status, org)
- [ ] `GET /correspondences/:id` → Detail
- [ ] `PUT /correspondences/:id` → Update (Create new revision)
- [ ] `DELETE /correspondences/:id` → Soft Delete (Admin only)
- [ ] Deliverable: สร้าง/แก้ไข/ดูเอกสารได้
- **[ ] T3.2 CorrespondenceModule - Advanced Features**
- [ ] Implement Status Transitions:
- [ ] `DRAFT` → `SUBMITTED` (Document Control)
- [ ] `SUBMITTED` → `CLOSED` (Admin)
- [ ] `SUBMITTED` → `CANCELLED` (Admin + Reason)
- [ ] Implement References:
- [ ] `POST /correspondences/:id/references` → Link Documents
- [ ] Implement Search (Basic):
- `GET /correspondences/search?q=...`
- [ ] Deliverable: Workflow พื้นฐานทำงานได้
- **[ ] T3.3 RfaModule - Basic CRUD**
- [ ] สร้าง Entities:
- [ ] Rfa
- [ ] RfaRevision
- [ ] RfaItem (Junction to Shop Drawings)
- [ ] สร้าง RfaService: Complex Business Rules
- [ ] `create(dto)` → Rfa
- [ ] สร้าง Correspondence + Rfa + RfaRevision
- [ ] เชื่อม Shop Drawing Revisions (สำหรับ RFA_DWG)
- [ ] `findAll(filters)` → Paginated List
- [ ] `findById(id)` → Rfa with Items
- [ ] สร้าง Controllers:
- [ ] `POST /rfas` → Create
- [ ] `GET /rfas` → List
- [ ] `GET /rfas/:id` → Detail
- [ ] Deliverable: สร้าง RFA และเชื่อม Shop Drawings ได้
---
## **Phase 4: Drawing Management (สัปดาห์ที่ 7)**
Milestone: ระบบจัดการแบบ
### Phase 4: Tasks
- **[ ] T4.1 DrawingModule - Contract Drawings**
- [ ] สร้าง Entities:
- [ ] ContractDrawing
- [ ] ContractDrawingVolume
- [ ] ContractDrawingCat
- [ ] ContractDrawingSubCat
- [ ] ContractDrawingSubcatCatMap
- [ ] ContractDrawingAttachment
- [ ] สร้าง ContractDrawingService CRUD
- [ ] สร้าง Controllers:
- [ ] `GET /drawings/contract` → List
- [ ] `POST /drawings/contract` → Create (Admin)
- [ ] `GET /drawings/contract/:id` → Detail
- [ ] Deliverable: จัดการ Contract Drawings ได้
- **[ ] T4.2 DrawingModule - Shop Drawings**
- [ ] สร้าง Entities:
- [ ] ShopDrawing
- [ ] ShopDrawingRevision
- [ ] ShopDrawingMainCategory
- [ ] ShopDrawingSubCategory
- [ ] ShopDrawingRevisionContractRef
- [ ] ShopDrawingRevisionAttachment
- [ ] สร้าง ShopDrawingService CRUD
- [ ] สร้าง Controllers:
- [ ] `GET /drawings/shop` → List
- [ ] `POST /drawings/shop` → Create
- [ ] `POST /drawings/shop/:id/revisions` → Create Revision
- [ ] `GET /drawings/shop/:id` → Detail with Revisions
- [ ] Link Shop Drawing Revision → Contract Drawings
- [ ] Deliverable: จัดการ Shop Drawings และ Revisions ได้
---
## **Phase 5: Workflow Systems (สัปดาห์ที่ 8-9)**
Milestone: ระบบ Workflow ทั้งหมด
### Phase 5: Tasks
- **[ ] T5.1 RfaModule - Workflow Implementation**
- [ ] สร้าง Entities:
- [ ] RfaWorkflowTemplate
- [ ] RfaWorkflowTemplateStep
- [ ] RfaWorkflow (Transaction Log)
- [ ] สร้าง RfaWorkflowService: Advanced Workflow Features
- [ ] `initiateWorkflow(rfaId, templateId)` → void
- [ ] สร้าง RfaWorkflow records ตาม Template
- [ ] กำหนด Step 1 เป็น PENDING
- [ ] `completeStep(rfaId, stepNumber, action, comments)` → void
- [ ] Update Status → COMPLETED
- [ ] Set Next Step → PENDING
- [ ] Send Notifications
- [ ] `rejectStep(rfaId, stepNumber, reason)` → void
- [ ] Update Status → REJECTED
- [ ] Send back to Originator
- [ ] สร้าง Controllers:
- [ ] `POST /rfas/:id/workflow/start` → Start Workflow
- [ ] `POST /rfas/:id/workflow/steps/:stepNumber/complete` → Complete Step
- [ ] `GET /rfas/:id/workflow` → Get Workflow Status
- [ ] Deliverable: RFA Workflow ทำงานได้
- **[ ] T5.2 CirculationModule - Internal Routing**
- [ ] สร้าง Entities:
- [ ] Circulation
- [ ] CirculationTemplate
- [ ] CirculationTemplateAssignee
- [ ] CirculationRouting (Transaction Log)
- [ ] CirculationAttachment
- [ ] สร้าง CirculationService:
- [ ] `create(correspondenceId, dto)` → Circulation
- [ ] สร้าง Circulation (1:1 กับ Correspondence)
- [ ] สร้าง Routing ตาม Template
- [ ] `assignUser(circulationId, stepNumber, userId)` → void
- [ ] `completeStep(circulationId, stepNumber, comments)` → void
- [ ] `close(circulationId)` → void (เมื่อตอบกลับองค์กรผู้ส่งแล้ว)
- สร้าง Controllers:
- [ ] `POST /circulations` → Create
- [ ] `GET /circulations/:id` → Detail
- [ ] `POST /circulations/:id/steps/:stepNumber/complete` → Complete
- [ ] `POST /circulations/:id/close` → Close
- [ ] Deliverable: ใบเวียนภายในองค์กรทำงานได้
- **[ ] T5.3 TransmittalModule - Document Forwarding**
- [ ] สร้าง Entities:
- [ ] Transmittal
- [ ] TransmittalItem
- [ ] สร้าง TransmittalService:
- [ ] `create(dto)` → Transmittal
- [ ] สร้าง Correspondence + Transmittal
- [ ] เชื่อม Multiple Correspondences เป็น Items
- [ ] สร้าง Controllers:
- [ ] `POST /transmittals` → Create
- [ ] `GET /transmittals` → List
- [ ] `GET /transmittals/:id` → Detail with Items
- [ ] Deliverable: สร้าง Transmittal ได้
---
## **Phase 6: Advanced Features (สัปดาห์ที่ 10-11)**
Milestone: ฟีเจอร์ขั้นสูง
### Phase 6: Tasks
- **[ ] T6.1 SearchModule - Elasticsearch Integration**
- [ ] Setup Elasticsearch Container ใน docker-compose.yml
- [ ] สร้าง SearchService:
- [ ] `indexDocument(entity)` → void
- [ ] `updateDocument(entity)` → void
- [ ] `deleteDocument(entity)` → void
- [ ] `search(query, filters)` → SearchResult[]
- [ ] Index ทุกครั้งที่ Create/Update:
- [ ] Correspondence
- [ ] RFA
- [ ] Shop Drawing
- [ ] Contract Drawing
- [ ] Circulation
- [ ] Transmittal
- [ ] สร้าง Controllers:
- [ ] `GET /search?q=...&type=...&from=...&to=...` → Results
- [ ] Deliverable: ค้นหาขั้นสูงทำงานได้
- **[ ] T6.2 NotificationModule - Email & Line**
- [ ] สร้าง NotificationService:
- [ ] `sendEmail(to, subject, body)` → void (Nodemailer)
- [ ] `sendLine(userId, message)` → void (ผ่าน n8n Webhook)
- [ ] `createSystemNotification(userId, message, entityType, entityId)` → void
- [ ] Integrate กับ Workflow Events:
- [ ] เมื่อสร้าง Correspondence ใหม่ → แจ้ง Recipients
- [ ] เมื่อสร้าง Circulation → แจ้ง Assignees
- [ ] เมื่อ RFA Workflow ถึง Step → แจ้ง Responsible Org
- [ ] เมื่อใกล้ถึง Deadline → แจ้ง (Optional)
- [ ] สร้าง Controllers:
- [ ] `GET /notifications` → List User's Notifications
- [ ] `PUT /notifications/:id/read` → Mark as Read
- [ ] Deliverable: ระบบแจ้งเตือนทำงานได้
- **[ ] T6.3 Reporting & Analytics**
- [ ] สร้าง ReportService:
- [ ] `getCorrespondenceSummary(projectId, from, to)` → Report
- [ ] `getRfaSummary(projectId, from, to)` → Report
- [ ] `getActivityLog(userId, from, to)` → Report
- [ ] ใช้ Views จาก Database:
- [ ] `v_current_correspondences`
- [ ] `v_current_rfas`
- [ ] `v_user_tasks`
- [ ] `v_audit_log_details`
- [ ] สร้าง Controllers:
- [ ] `GET /reports/correspondence` → Summary (CSV, PDF)
- [ ] `GET /reports/rfa` → Summary
- [ ] `GET /reports/activity` → User Activity
- [ ] Deliverable: สร้างรายงานได้
- **T6.4 Audit Log & Activity Feed**
- [ ] AuditLogInterceptor ทำงานอัตโนมัติแล้ว (Phase 1)
- [ ] สร้าง AuditLogService:
- [ ] `log(userId, action, entityType, entityId, details)` → void
- [ ] `getUserActivity(userId, limit)` → AuditLog[]
- [ ] สร้าง Controllers:
- [ ] `GET /audit-logs` → List (Admin only)
- [ ] `GET /audit-logs/user/:userId` → User's Activity
- [ ] Deliverable: ดู Audit Log ได้
---
## **Phase 7: Testing & Optimization (สัปดาห์ที่ 12-13)**
Milestone: ทดสอบและปรับปรุงประสิทธิภาพ
### Phase 7: Tasks
- **[ ] T7.1 Unit Testing**
- [ ] เขียน Unit Tests สำหรับ Services สำคัญ:
- [ ] AuthService (login, validateUser)
- [ ] RbacGuard (permission checks)
- [ ] DocumentNumberingService (number generation)
- [ ] CorrespondenceService (create, update)
- [ ] RfaWorkflowService (workflow logic)
- [ ] Target: 70% Code Coverage
- [ ] Deliverable: Unit Tests ผ่านทั้งหมด
- **[ ] T7.2 Integration Testing**
- [ ] เขียน Integration Tests:
- [ ] Authentication Flow (login → access protected route)
- [ ] Document Creation Flow (create correspondence → attach files)
- [ ] RFA Workflow Flow (start → step 1 → step 2 → complete)
- [ ] Circulation Flow (create → assign → complete → close)
- [ ] ทดสอบ SQL Views (v_user_all_permissions, v_user_tasks)
- [ ] ใช้ Test Database แยกต่างหาก
- [ ] Deliverable: Integration Tests ผ่าน
- **[ ] T7.3 E2E Testing**
- [ ] เขียน E2E Tests:
- [ ] User Registration & Login
- [ ] Create Correspondence (Full Flow)
- [ ] Create RFA with Shop Drawings
- [ ] Complete RFA Workflow
- [ ] Search Documents
- [ ] Deliverable: E2E Tests ผ่าน
- **[ ] T7.4 Performance Optimization**
- [ ] Implement Caching:
- [ ] Cache Master Data (Roles, Permissions)
- [ ] Cache User Permissions (ใช้ @nestjs/cache-manager)
- [ ] Database Optimization:
- [ ] Review Indexes
- [ ] Optimize Queries (N+1 Problem)
- I[ ] mplement Pagination ทุก List Endpoint
- [ ] Deliverable: Response Time < 200ms (90th percentile)
- **[ ] T7.5 Security Hardening**
- [ ] Implement Rate Limiting (ใช้ rate-limiter-flexible)
- [ ] Setup Helmet (Security Headers)
- [ ] Review CORS Configuration
- [ ] Input Validation (ตรวจสอบ DTOs ทั้งหมด)
- [ ] Deliverable: Security Checklist ผ่าน
---
## **Phase 8: Documentation & Deployment (สัปดาห์ที่ 14)**
Milestone: เอกสารและ Deploy สู่ Production
### Phase 8: Tasks
- **[ ] T8.1 API Documentation**
- [ ] ครบทุก Endpoint ใน Swagger:
- [ ] ใส่ Description, Example Request/Response
- [ ] ระบุ Required Permissions
- [ ] ใส่ Error Responses
- [ ] Export Swagger JSON → Frontend Team
- [ ] Deliverable: Swagger Docs สมบูรณ์
- **[ ] T8.2 Technical Documentation**
- [ ] เขียนเอกสาร:
- [ ] Architecture Overview
- [ ] Module Structure
- [ ] Database Schema Diagram
- [ ] API Design Patterns
- [ ] Deployment Guide
- [ ] Deliverable: Technical Docs พร้อม
- **[ ] T8.3 Deployment Preparation**
- [ ] สร้าง Production docker-compose.yml
- [ ] Setup Environment Variables ใน QNAP
- [ ] Setup Nginx Proxy Manager (SSL Certificate)
- [ ] Setup Backup Scripts (Database + Files)
- [ ] Deliverable: Deployment Guide พร้อม
- **[ ] T8.4 Production Deployment**
- [ ] Deploy Backend ไปยัง backend.np-dms.work
- [ ] ทดสอบ API ผ่าน Postman
- [ ] Monitor Logs (Winston)
- [ ] Setup Health Check Endpoint (`GET /health`)
- [ ] Deliverable: Backend รันบน Production
- **T8.5 Handover to Frontend Team**
- [ ] Demo API ให้ Frontend Team
- [ ] ส่งมอบ Swagger Documentation
- [ ] ส่งมอบ Postman Collection
- [ ] Workshop: วิธีใช้ Authentication & RBAC
- [ ] Deliverable: Frontend เริ่มพัฒนาได้
---
## 📊 สรุป Timeline
| Phase | ระยะเวลา | จำนวนงาน | Output หลัก |
| ------- | -------------- | ------------ | ---------------------------- |
| Phase 0 | 1 สัปดาห์ | 4 | Infrastructure Ready |
| Phase 1 | 2 สัปดาห์ | 5 | Auth & User Management |
| Phase 2 | 1 สัปดาห์ | 3 | Master Data & File Storage |
| Phase 3 | 2 สัปดาห์ | 3 | Correspondence & RFA Core |
| Phase 4 | 1 สัปดาห์ | 2 | Drawing Management |
| Phase 5 | 2 สัปดาห์ | 3 | Workflow Systems |
| Phase 6 | 2 สัปดาห์ | 4 | Advanced Features |
| Phase 7 | 2 สัปดาห์ | 5 | Testing & Optimization |
| Phase 8 | 1 สัปดาห์ | 5 | Documentation & Deploy |
| **รวม** | **14 สัปดาห์** | **34 Tasks** | **Production-Ready Backend** |
---
## 🎯 Critical Success Factors
1. **Database First**: ใช้ Schema v1.4.0 เป็นหลัก ไม่แก้ไข Schema โดยไม่จำเป็น
2. **Emphasizing Soft Delete**: Service ทั้งหมดที่ทำการ Query ข้อมูล (เช่น findAll, findById) ต้อง ใช้ Global Filter หรือ Default Scope ของ TypeORM เพื่อกรอง WHERE deleted_at IS NULL เสมอ
3. **API Contract**: ทุก Endpoint ต้องมี Swagger Documentation สมบูรณ์
4. **Security**: RBAC ต้องทำงานถูกต้อง 100% ก่อน Deploy
5. **Testing**: Code Coverage อย่างน้อย 70% ก่อน Production
6. **Performance**: Response Time < 200ms (90th percentile)
7. **Documentation**: เอกสารต้องครบถ้วนเพื่อ Handover ให้ Frontend Team
---
## 🚀 ขั้นตอนถัดไป
1. **Approve แผนนี้** → ปรับแต่งตาม Feedback
2. **Setup Phase 0** → เริ่มสร้าง Infrastructure
3. **Daily Standup** → รายงานความก้าวหน้าทุกวัน
4. **Weekly Review** → ทบทวนความก้าวหน้าทุกสัปดาห์
5. **Deploy to Production** → Week 14
---
**หมายเหตุ:** แผนนี้สามารถปรับแต่งได้ตามความต้องการและข้อจำกัดของทีม หาก Phase ใดใช้เวลามากกว่าที่คาดการณ์ ควรปรับ Timeline ให้เหมาะสม