Skip to content

Volume 6 · Domain Microservices

กลุ่ม "Domain Microservices" ประกอบด้วย 9 repositories ที่แยกออกมาจาก legacy core เพื่อรับผิดชอบงาน HR เฉพาะด้าน ทั้งหมดเป็น NestJS 9 ยกเว้น ai-recruitment-api (Express) และ vtrc-common ที่ทำหน้าที่ต่างจากที่เข้าใจไว้เดิม

ภาพรวม repo ในกลุ่ม

RepoBranch canonicalไฟล์หน้าที่จริง (จากโค้ด)Port
benefit-apiprod172เบิกจ่ายสวัสดิการ (เยี่ยมโรงพยาบาล/ฌาปนกิจ/มรดก/ภัยพิบัติ)9320
recruitment-apiprod322สรรหาบุคลากร (job request → candidate → contract → HRMI)9330
ai-recruitment-apiprod390สร้างสื่อ/กราฟิกด้วย AI สำหรับงานสรรหา (Express ไม่ใช่ NestJS)9430
pms-apiuat376บริหารผลการปฏิบัติงาน (ตัวชี้วัด/ประเมิน/อนุมัติ/ปรับเงินเดือน) — repo ใหญ่สุดในกลุ่ม9331
chat-center-apiprod68แชท backoffice + LINE OA, real-time ผ่าน Socket.IO
job-scheduler-apiprod31มี cron job ทำงานจริงเพียง 1 งาน (สรุป incident รายวัน)
workflow-apiuat (default main ว่างเปล่า)153package name จริงคือ ai-pms-nest — ครอบ AI course embedding + health-checkup benefit + IPD billing
sso-apimaster (default main ว่างเปล่า)35gateway ไปยัง SSO ภายนอกของสภากาชาด — ยังไม่มี Dockerfile/.env/CI
vtrc-commonprod58ไม่ใช่ shared npm library — standalone HTTP microservice ให้บริการ address/bank/file9310

การแก้ไขจาก docs/index.md และ canonical-truths.mdvtrc-common ถูกอธิบายไว้เดิมว่าเป็น "shared NestJS library ที่ service อื่น import เป็น npm dependency" แต่จากการตรวจสอบพบว่าไม่มี repo ใดใน workspace ประกาศ vtrc-common เป็น npm dependency เลย มันคือ standalone microservice ของตัวเอง (มี Dockerfile, .env, MSSQL vtrc_common DB, port 9310) — consumer จริงที่เรียกผ่าน HTTP URL ตรง ได้แก่ benefit-api (backend, เฉพาะ /file/*), vtrc-mobile, vtrc-web, vtrc-rc-backoffice ส่วน job-scheduler-api/recruitment-api ประกาศ env var ไว้แต่ไม่เรียกใช้จริง (vestigial)

Cross-repo canonical facts (ยืนยันจากโค้ดทั้ง 9 repo)

  1. Shared JWT secret ข้ามหลาย service โดยไม่มี central authbenefit-api, recruitment-api, ai-recruitment-api, pms-api มีค่า SECRET_KEY/JWT_SECRET เดียวกันใน .env ของตัวเอง (copy กันไว้ ไม่ได้เรียก central service) เช่นเดียวกับ MSSQL sa password (h@ckm3SA?) ที่ใช้ร่วมกันใน chat-center-api, job-scheduler-api, vtrc-common, workflow-api — token/credential ที่หลุดจาก service เดียวกระทบทั้งกลุ่ม
  2. MSSQL คือฐานข้อมูลเดียวที่ใช้ทั้งกลุ่ม — ไม่พบ MongoDB/PostgreSQL ในกลุ่มนี้ (ต่างจาก Meeting Platform ที่ใช้ Mongoose)
  3. Database coupling ข้าม repo แบบไม่ผ่าน APIbenefit-api เขียนตรงเข้า schema vtrc ของ legacy core ผ่าน TypeORM connection ที่สอง; recruitment-api/ai-recruitment-api share database recruitment_ai โดยไม่มี migration sync ที่ยืนยันได้; workflow-api เชื่อมตรงกับ 6 database connection รวม vtrc, dbHRMI_Center, dbHRMI_Center_NBC, benefit; pms-api เชื่อม dbWorkforce จาก 10 module
  4. libs/jwt, libs/log, libs/exception เหมือนกันไบต์ต่อไบต์ ระหว่าง chat-center-api, job-scheduler-api, vtrc-common — เป็น copy-paste ไม่ใช่ shared package
  5. SQL injection จาก raw-query string interpolation พบซ้ำในหลาย repo ด้วยรูปแบบเดียวกัน: benefit-api, recruitment-api (ผ่าน dynamic EXEC), chat-center-api, vtrc-common
  6. workflow-api เป็นข้อยกเว้นเดียวที่ไม่มี global auth guard บังคับจริง — อีก 4+ repo ที่เป็น NestJS มี JwtAuthGuard เป็น global guard ที่ override ด้วย @Public() เฉพาะจุด แต่ workflow-api ไม่มี guard ระดับ global เลย role ถูกอ่านจาก JWT payload ที่ไม่ได้ verify signature
  7. Puppeteer ใช้ร่วมกันใน benefit-api, recruitment-api, ai-recruitment-api สำหรับ PDF/image generation — เพิ่ม attack surface และ image size จาก chromium dependency
  8. Port ที่ยืนยันจาก Dockerfile/config: benefit-api=9320, recruitment-api=9330, pms-api=9331, ai-recruitment-api=9430 (แยก series จาก 93xx — เหตุผล UNVERIFIED), vtrc-common=9310

Scorecard สรุปรวม (69 debt items จาก 9 repo)

RepoCriticalHighMediumLow
benefit-api2362
recruitment-api2232
ai-recruitment-api2231
pms-api2342
chat-center-api2340
job-scheduler-api1030
sso-api0230
vtrc-common2120
workflow-api2231

รวมทั้ง volume: 15 Critical, 18 High, 31 Medium, 8 Low (69 items) — รายละเอียดเต็มของทุก ID อยู่ใน 06-scorecard.md/04-scorecard.md ของแต่ละ repo และจะถูกรวมเข้า Volume 17 · Technical Debt Register ทั้งหมด (Critical ทุกตัวเข้า Volume 18 · Security Review Findings เพิ่ม) — นับแก้ไขแล้วหลังพบว่า SEC-BENEFIT-03 เป็น High ไม่ใช่ Critical (ยืนยันจาก benefit-api/06-scorecard และ Volume 12 §3)

หมายเหตุเพิ่ม (พบระหว่าง synthesize Volume 11-12) — shared JWT secret cluster ที่เดิมระบุว่าครอบคลุมเฉพาะ 4 domain microservice (benefit-api/recruitment-api/ai-recruitment-api/pms-api) จริง ๆ ครอบคลุมถึง vtrc-api (Legacy Core) ด้วย — token ที่ vtrc-api ออกให้ verify ผ่าน recruitment-api's SECRET_KEY ได้จริง (ยืนยันจาก recruitment-api/04-auth-integrations) ทำให้ blast radius จริงคือ 5 service ไม่ใช่ 4 — ดู Volume 11 §4 สำหรับรายละเอียดเต็ม

อ้างอิงข้าม