Skip to content

2way-api

2way-api (branch: prod) เป็นบริการ NestJS ที่รองรับฟีเจอร์ "สื่อสารสองทาง" ระหว่างฝ่าย HR/แอดมิน กับพนักงาน — ประกาศ (announcements), แบบสำรวจ (surveys), ข้อเสนอแนะ/เรื่องร้องเรียน (complaints), ทำเนียบพนักงาน (employee directory proxy), และ push notification ผ่าน LINE

ชื่อ package ในไฟล์ package.json คือ vtrc-restfull-v2 (2way-api/package.json:2) — ไม่ตรงกับชื่อ repo ปัจจุบัน เป็นร่องรอยว่า repo นี้ถูก scaffold มาจากโปรเจกต์ตั้งต้นเดียวกับ 2way-batch และ 2way-line-service (ทั้งสาม repo มี package.json:2 เป็นชื่อเดียวกัน)


Stack

ส่วนเทคโนโลยีเวอร์ชันอ้างอิง
FrameworkNestJS^9.0.0 (@nestjs/core)2way-api/package.json:34
ภาษาTypeScript^4.7.42way-api/package.json:79
ORMTypeORM^0.3.112way-api/package.json:54
DatabaseMSSQL (mssql driver)9.1.12way-api/package.json:47
AuthPassport JWT (passport-jwt)^4.0.02way-api/package.json:49
HTTP clientaxios (ตรงและผ่าน @nestjs/axios)^1.2.52way-api/package.json:42
Docs@nestjs/swagger^6.1.32way-api/package.json:38
Cron@nestjs/schedule^2.2.02way-api/package.json:37
Package manageryarn (yarn.lock มีอยู่ แต่ workspace convention คือ npm — ดู scorecard)2way-api/yarn.lock

Node engine ที่ประกาศไว้คือ >=18.0.0 (2way-api/package.json:27) แต่ Dockerfile.prod build stage ใช้ node:16-alpine ก่อนแล้วค่อยรัน production บน node:18-alpine (2way-api/Dockerfile.prod:1,15) — ดู debt QUAL-2WAYAPI-04


Entrypoint และพอร์ต

Boot เริ่มที่ src/main.ts — สร้าง NestExpressApplication, ตั้ง global prefix เป็น ${BASE_PATH}api/v1, serve static ใน /uploads เป็น URL prefix /2way-api/, ติด global filter/guard/pipe แล้ว mount Swagger ที่ ${BASE_PATH}docs (2way-api/src/main.ts:16-42)

พอร์ตอ่านจาก ConfigService.get('port') (default 3000 ถ้าไม่ตั้ง env, 2way-api/src/main.ts:22) แต่ค่าที่ทีมตั้งจริงใน .env.example คือ 8200 (2way-api/.env.example:5) — ห้ามเขียนว่า "2way-api ฟัง port 3000" แบบไม่มีเงื่อนไข

BASE_PATH ใน .env.example คือ 2way-api/ (2way-api/.env.example:3) จึงได้ full prefix เป็น 2way-api/api/v1/* และ Swagger ที่ 2way-api/docs — ตรงกับที่ frontend 2way-meeting-backoffice ตั้ง APP_CONNECT_API=https://vtrcapi.redcross.or.th/2way-api ใน production (2way-meeting-backoffice/.env.production:6) ยืนยัน route prefix ตรงกัน


Deploy

มี 3 Dockerfile แยกตาม environment: Dockerfile, Dockerfile.prod, Dockerfile.uat (multi-stage build, develop stage บน node:16-alpine แล้ว copy dist/ ไป production stage บน node:18-alpine, 2way-api/Dockerfile.prod:1-27) — CI ใช้ Bitbucket Pipelines (2way-api/bitbucket-pipelines.yml) ไม่ใช่ GitHub Actions

docker-compose.yml และ docker-compose.cloud.yml มีทั้งคู่ ให้ดูไฟล์จริงก่อนสรุปว่า deploy ผ่าน compose ตัวไหนในแต่ละ environment — เอกสารนี้ไม่ยืนยัน mapping port ของ compose เพราะไม่มีหลักฐาน runtime


สารบัญ

บทหัวข้อ
01Repository map — โครงสร้างโฟลเดอร์ modules/entities/crontab
02Core request pipeline — ตัวอย่าง trace เต็มจาก controller ถึง DB
03Persistence & integrations — entities, LINE, SSO, centralize-api, vtrc-api, cu-central-api
04Scorecard — auth bypass ทั้งระบบ, backdoor login, SQL injection

ดูภาพรวมกลุ่ม 2way Platform ทั้งหมดที่ Volume 5 index.