Skip to content

2way-batch

2way-batch (branch: master, 96 tracked files) เป็น NestJS worker ที่ scaffold จาก skeleton เดียวกับ 2way-api / 2way-line-service แต่ AppModule เปิดใช้งานจริงแค่ cron สำหรับแบบสำรวจ (survey) ผ่าน SurveyTaskModule — โมดูล HTTP อื่นถูก comment ปิดทั้งหมด (2way-batch/src/app.module.ts:37-44)

ชื่อ package ตรงกับชื่อ repo (2way-batch/package.json:2) — ต่างจาก 2way-api / 2way-line-service ที่ยังใช้ชื่อ vtrc-restfull-v2

ณ สถานะโค้ดปัจจุบัน cron ตื่นทุก 10 วินาทีแต่เรียกแค่ stub ที่ log ข้อความ — logic แจ้งเตือน LINE จริงถูก comment ปิดใน handleCron() (2way-batch/src/crontab/survey/survey.task.service.ts:32-37) — ดู 02-core-pipeline


Stack

ส่วนเทคโนโลยีเวอร์ชันอ้างอิง
FrameworkNestJS^9.0.0package.json:28-31
ภาษาTypeScript^4.7.4package.json:74
ORMTypeORM^0.3.11package.json:49
DB drivermssql^9.1.1package.json:42
Cron@nestjs/schedule^2.2.0package.json:33
HTTP client@nestjs/axios + axios^2.0.0 / ^1.2.5package.json:27,38
Auth libspassport-jwt (global guard มี แต่ไม่มี controller live)^4.0.0package.json:44
Docs@nestjs/swagger^6.1.3package.json:34
Package manageryarn (yarn ใน Dockerfile)Dockerfile:11

Entrypoint / พอร์ต

src/main.ts bootstrap:

  • global prefix ${BASE_PATH}api/v1 (main.ts:23-25)
  • static assets /uploads ที่ prefix /2way-batch/ (main.ts:26-28)
  • global HttpExceptionFilter, JwtAuthGuard, ValidationPipe (main.ts:31-33)
  • CORS origin: '*' (main.ts:34-38)
  • Swagger ที่ ${BASE_PATH}docs (main.ts:40-41)
  • listen config.get('port') \|\| 3000 บน 0.0.0.0 (main.ts:21,42)
แหล่งค่าอ้างอิง
main.ts fallback3000main.ts:21
Swagger server defaultPORT || 9340docs/document.config.ts:8
nginx proxy_pass สำหรับ /2way-batch/0.0.0.0:9340nginx/conf.d/default.conf:8
Hardcoded LINE push target10.188.128.126:9340src/modules/line/line.service.ts:26

ไม่มี .env.example ใน repo — ค่า PORT / BASE_PATH / DB ที่ deploy จริงเป็น UNVERIFIED จากไฟล์ env ใน git; ใช้ 9340 เป็นค่าที่ปรากฏใน nginx + swagger + hardcode มากที่สุด


Deploy

  • Dockerfile multi-stage: node:16-alpine ทั้ง develop และ production (Dockerfile:1,15) — Node 16 EOL
  • build ด้วย yarn + yarn build, รัน yarn start:prodnode dist/src/main (Dockerfile:11-13,22, package.json:18)
  • EXPOSE 3000 (Dockerfile:24) — ไม่ตรงกับ 9340 ที่ nginx/swagger อ้าง
  • มี nginx/conf + nginx/conf.d/default.conf ใน repo
  • CI: bitbucket-pipelines.yml — branch master/uat/prod/develop build image แล้ว push GCP registry (bitbucket-pipelines.yml:114-137)

หน้าที่จริงในระบบ

จาก wiring ใน AppModule — service นี้ตั้งใจเป็น batch/cron สำหรับ survey notification ที่:

  1. อ่าน MSSQL ผ่าน TypeORM connection name 'main'
  2. หาแบบสำรวจตาม status/flow
  3. เรียก LineService.pushMassage → HTTP ไป IP hardcode
  4. อัปเดตสถานะผ่าน SurveysService.updateSurveys

แต่ขั้นตอนธุรกิจของ fetchApproval / fetchCreateOutScope ถูก comment ออกจาก handleCron เหลือแค่ log stub — ดู 02 และ 03


สารบัญ

บทหัวข้อ
01Repository map — modules, entities, nginx, dead code
02Core pipeline — cron lifecycle, stub vs dead methods, hardcoded IP
03Persistence & integrations — MSSQL entities, LINE HTTP hop, config maps
04Scorecard — cron waste, hardcode IP, Node 16 EOL

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