# LCBP3-DMS — Task Breakdown สำหรับ Phase 2A–2C (v1.4.2)

เอกสารนี้เป็นรายละเอียด Task Breakdown เชิงลึกของ Phase 2A, 2B, 2C ที่ถูกแยกออกตามสถาปัตยกรรม v1.4.2

โครงสร้างประกอบด้วย:

- Objectives
- Deliverables
- Task Breakdown (ละเอียดเป็นลำดับงาน)
- Developer Checklist
- Test Coverage
- Dependencies & Risks

---

# 🟦 Phase 2A — Security Layer

**Objective:** วาง Security Foundation ให้ระบบทั้งหมดใช้ร่วมกัน: Validation Pipeline, Security Headers, Rate Limiting, Request Guards

## ✔ Deliverables

- Global ValidationPipe
- Sanitization Layer
- Rate Limit Rules (anonymous/authenticated)
- Security Headers (Helmet)
- XSS / SQL Injection safeguards
- Security Tests

## 🛠 Task Breakdown

### 2A.1 Validation Pipeline

- ตั้งค่า Global ValidationPipe
- เปิด whitelist, forbidNonWhitelisted
- เพิ่ม custom exception mapping → ErrorModel
- เชื่อม RequestIdInterceptor

### 2A.2 Input Sanitization Layer

- ติดตั้ง sanitize-html หรือ DOMPurify server-side
- เพิ่ม sanitization middleware สำหรับ:
  - query params
  - body JSON
  - form inputs

- เพิ่ม unit test: sanitized input → safe output

### 2A.3 Security Headers (Helmet)

- เปิดใช้งาน Helmet ทั้งระบบ
- ปรับ policy: `contentSecurityPolicy`, `xssFilter`, `noSniff`
- เพิ่ม config per environment

### 2A.4 Rate Limiting

- Rate limit แบบ 2 ชั้น:
  - anonymous (เช่น 30 req/min)
  - authenticated (100 req/min)

- สร้าง Redis key pattern: `ratelimit:{ip}`
- สร้าง RateLimitGuard + decorator
- ทดสอบ burst traffic (locust หรือ autocannon)

### 2A.5 SQL Injection / XSS Protection

- เปิด TypeORM parameterized queries
- Sanitizer ตรวจจับ script tags
- เขียน test ที่ inject payload จำลอง

### 2A.6 Logging + Error Model Integration

- ผูก SecurityException → Error Model
- เพิ่ม request_id logging

## ✔ Developer Checklist (Phase 2A)

- [ ] ทุก controller มี ValidationPipe ครอบ
- [ ] Sanitization ทำงานในทุก input source
- [ ] Error ทั้งหมดออกตาม Error Model กลาง
- [ ] RateLimitGuard ทำงานผ่าน Redis
- [ ] มี security test อย่างน้อย 10 ชุด

## ✔ Test Coverage (Phase 2A)

- Input injection tests
- Rate limit tests
- Validation rejects undefined fields
- ErrorModel mapping

---

# 🟪 Phase 2B — JSON Schema System

**Objective:** จัดการ JSON Schema แบบ versioned, ตรวจสอบ payload, บังคับใช้ format ก่อนเก็บ DB

## ✔ Deliverables

- Schema Registry
- Schema Versioning
- Schema Validation Service
- Compatibility Rules
- Schema Migration Tests

## 🛠 Task Breakdown

### 2B.1 Schema Registry

- Entity: `json_schemas`, `json_schema_versions`
- Endpoint: `POST /json-schemas`
- ฟิลด์สำคัญ: schema_id, version, schema_json
- สร้าง SchemaStore class

### 2B.2 Schema Versioning

- Version rule: semantic versioning (major.minor.patch)
- Migration notes per version
- นโยบาย: Breaking change → major bump
- API: `GET /json-schemas/:id?version=`

### 2B.3 Schema Validation Service

- ใช้ AJV หรือ Fastest-Validator
- preload schema เมื่อ boot server
- mapping validation error → Error Model
- เพิ่ม test: invalid schema / missing fields / wrong types

### 2B.4 Compatibility Rules

- ตรวจสอบ backward compatibility:
  - field removal → major version
  - enum shrink → major version

- เพิ่ม script ตรวจ schema diff

### 2B.5 Schema Migration Tests

- ทดสอบ schema upgrade (v1 → v2)
- ทดสอบ payload ที่ใช้ version เก่า

## ✔ Developer Checklist (Phase 2B)

- [ ] ทุก JSON field อ้างอิง schema version
- [ ] ทุก schema ผ่าน validation
- [ ] Schema diff pass
- [ ] Schema test ครอบครบทุก field

## ✔ Test Coverage (Phase 2B)

- Schema version switch tests
- Incompatible payload rejection
- Schema registry CRUD

---

# 🟧 Phase 2C — JSON Processing

**Objective:** จัดการ JSON payload: sanitization, compression, encryption, size limits

## ✔ Deliverables

- JSON size validator
- JSON sanitizer
- JSON compressor (gzip/deflate)
- Sensitive fields encryption
- JSON transformation layer

## 🛠 Task Breakdown

### 2C.1 JSON Size Controls

- ตั้ง global limit (เช่น 2MB ต่อฟิลด์)
- เพิ่ม JSONSizeGuard
- เขียน test: oversize JSON → error_code: `JSON.TOO_LARGE`

### 2C.2 JSON Sanitization (ลึกกว่า Phase 2A)

- ล้าง nested fields
- ล้าง `<script>`, `<iframe>`, inline JS
- รองรับ JSON array sanitization

### 2C.3 Compression Layer

- ใช้ gzip ด้วย `zlib`
- เก็บ compressed JSON ใน DB
- สร้าง helper: `compressJson()`, `decompressJson()`
- Test: compression ratio > 30%

### 2C.4 Sensitive Fields Encryption

- AES-256-GCM สำหรับฟิลด์ที่กำหนด เช่น:
  - personal fields
  - confidential fields

- สร้าง decorator: `@EncryptedField()`
- Test: decrypt → original JSON

### 2C.5 JSON Transformation Layer

- Map JSON fields → internal format
- ใช้กับ Correspondence / RFA
- รองรับ schema version migration (เชื่อมกับ Phase 2B)

## ✔ Developer Checklist (Phase 2C)

- [ ] JSON size guard ครอบทุก endpoint
- [ ] Compression + encryption ทำงานก่อน persist
- [ ] Sanitizer ผ่าน nested objects
- [ ] Transform layer มี test ครบ

## ✔ Test Coverage (Phase 2C)

- Oversize JSON tests
- Encryption/decryption tests
- Compression tests
- Schema-versioned transformation tests

---

# 🔗 Dependencies

- Phase 2A → จำเป็นก่อน 2B, 2C
- Phase 2B → ต้องเสร็จเพื่อให้ 2C ทำ transformation

---

# ⚠ Risks

- Schema versioning อาจกระทบ payload เดิม → ต้องมี migration plan
- Compression/encryption ทำให้ debug ยาก → ต้องพึ่ง request_id + audit logs
- Rate limiting ไม่เหมาะสมอาจ block ผู้ใช้จริง

---

เอกสารนี้พร้อมใช้วางแผน Sprint สำหรับทีมพัฒนา หรือสร้าง Gantt Chart ต่อได้ทันที
