04 · Scorecard — job-scheduler-api
Legend
- 🔴 Critical = active security/data-loss/availability risk
- 🟡 High = correctness/maintainability hazard, real impact
- 🟢 Medium = friction/hygiene, not yet dangerous
Repo นี้เล็ก (31 ไฟล์, business logic จริงมีเพียง cron เดียว) ดังนั้น scorecard สั้นตามขนาดจริงของโค้ด ไม่พยายามยัด finding ให้ดูมาก
| Debt ID | Severity | คำอธิบาย | หลักฐาน (file:line) | ข้อเสนอการแก้ไข |
|---|---|---|---|---|
| SEC-JOBSCHED-01 | Critical | .env commit เข้า git พร้อมรหัสผ่าน MSSQL sa จริง (h@ckm3SA?) และ RSA-format secret key ที่ใช้ร่วมกับหลาย repo อื่นในแพลตฟอร์ม แม้ค่าเชื่อมต่อ DB จะไม่ถูกใช้จริงในโค้ดปัจจุบันก็ตาม | job-scheduler-api/.env:9-11,18 | ลบ .env ออกจาก git, หมุนรหัสผ่านที่หลุด, ย้าย secret ไป vault |
| QUAL-JOBSCHED-01 | Medium | TypeOrmModule ถูก import เข้ามาแต่ไม่เคยถูกเรียกใช้ใน @Module({ imports }) — dead import ที่ทำให้คนอ่านโค้ดเข้าใจผิดว่า service เชื่อมต่อฐานข้อมูล | job-scheduler-api/src/app.module.ts:6,11-19 | ลบ TypeOrmModule และ mysql2/typeorm dependency ออกถ้าไม่มีแผนใช้จริง หรือเพิ่ม TypeOrmModule.forRootAsync(...) ให้ตรงกับ .env ถ้าตั้งใจจะใช้ |
| QUAL-JOBSCHED-02 | Medium | .env ตั้ง BASE_PATH=benefit-api/ และ DB_NAME=benefit ซึ่งเป็นชื่อของ repo อื่น (benefit-api) ไม่ตรงกับชื่อ service ตัวเอง บ่งชี้ว่า .env ถูก copy มาจาก benefit-api ตอน bootstrap แล้วไม่ได้แก้ไข | job-scheduler-api/.env:3,11 เทียบ benefit-api/.env:3,19 | แก้ BASE_PATH/DB_NAME/ตัวแปรอื่นให้ตรงกับ identity ของ service จริง เพื่อลดความสับสนตอน debug/deploy |
| QUAL-JOBSCHED-03 | Medium | ไฟล์ log จริงจาก dev environment (logs/30-01-2023.log) ถูก commit เข้า git — เสี่ยง log ที่มีข้อมูลอ่อนไหวหลุดเข้า version control ในอนาคตถ้าไม่กัน .gitignore | job-scheduler-api/logs/30-01-2023.log | เพิ่ม logs/*.log เข้า .gitignore และลบไฟล์ log ที่ commit ไปแล้วออกจาก git history |
| OBS-JOBSCHED-01 | Medium | Dockerfile ประกาศ EXPOSE 3000 แต่ port จริงตาม .env/docker-compose.yml คือ 9900 — misleading เวลาอ่าน Dockerfile เพื่อทำความเข้าใจ network topology | job-scheduler-api/Dockerfile:24 เทียบ .env:4 และ docker-compose.yml:8-9 | แก้ EXPOSE ให้ตรงกับพอร์ตจริงที่ตั้งใน .env |
UNVERIFIED
- ตัว service ที่ implement
incident-management-api/crontab/summaryจริงในแพลตฟอร์ม — อยู่นอกขอบเขต 5 repo ที่ตรวจสอบในเอกสารนี้ ไม่ยืนยันว่าเป็นบริการใดใน 2way/Domain group - เหตุผลที่ตั้งชื่อ repo เป็น "job-scheduler-api" ทั้งที่มี job เดียว — อาจเป็นแผนเดิมที่ยังไม่ implement เพิ่ม ไม่มีหลักฐานในโค้ดหรือ commit message ที่ยืนยันเจตนาได้