Skip to content

vtrc-ocr-api — Repository Map

บทนี้เป็นแผนที่ไฟล์ของ vtrc-ocr-api (branch: main, 21 tracked files)


แผนที่โฟลเดอร์

vtrc-ocr-api/                         (branch: main)
├── app.js                            # Express entrypoint
├── package.json / package-lock.json
├── README.md
├── .gitignore
├── public/
│   └── index.html                    # landing page
├── docs/
│   └── swagger.js                    # OpenAPI + schemas
├── routes/
│   ├── index.js                      # mount /health, /ocr; GET /api
│   ├── health.routes.js
│   └── ocr.routes.js
├── controllers/
│   ├── health.controller.js
│   └── ocr.controller.js
├── services/
│   ├── health.service.js
│   └── ocr.service.js                # mock OCR
├── models/
│   └── ocr.model.js                  # Map in-memory
├── middleware/
│   ├── validation.middleware.js      # ใช้จริงกับ POST /process
│   └── error.middleware.js           # ไม่ได้ wire ใน app.js
├── config/
│   ├── config.js
│   └── database.js                   # stub — ไม่ถูกเรียก
└── utils/
    ├── logger.js                     # ไม่ถูก import
    └── response.js                   # ไม่ถูกเรียกจาก controller

Boot sequence

1. dotenv.config()
       `app.js:7`

2. express() + middleware
       helmet → cors() → morgan('dev') → json → urlencoded
       `app.js:14-19`

3. express.static(public/)
       `app.js:22`

4. Swagger UI /docs + /docs.json
       `app.js:25-29`

5. app.use('/api', routes)
       `app.js:32-33`

6. GET /  → public/index.html
   GET /health → inline JSON
       `app.js:36-47`

7. 404 handler
       `app.js:50-55`

8. Error handler (inline — ไม่ใช่ error.middleware.js)
       `app.js:58-64`

9. app.listen(PORT)
       `app.js:67-70`

ไม่มีการเรียก connectDatabase() จาก config/database.js ใน boot — stub ล้วน ๆ


Config keys (config/config.js)

KeyDefaultถูกใช้จริงใน app?Citation
port3000ใช่ทาง process.env.PORT ใน app.js (อ่านซ้ำคนละที่)config.js:5, app.js:12
nodeEnvdevelopmentใช้ใน error stack + healthconfig.js:6
api.version'1.0.0'ใช่ที่ GET /api + swaggerconfig.js:11
cors.origin*ไม่app.use(cors()) เปล่าconfig.js:15-18 vs app.js:16
ocr.maxImageSize'10MB'ไม่ถูกอ่านนอก configconfig.js:22
ocr.timeout30000ไม่ถูกอ่านนอก configconfig.js:24

In-memory model API

models/ocr.model.js — store เดียวของทั้งระบบ:

FunctionพฤติกรรมCitation
saveProcessingRecordMap.set(id, record)ocr.model.js:7-9
getProcessingRecordMap.get(id) หรือ nullocr.model.js:12-14
updateProcessingRecordspread merge {...existing, ...updates}ocr.model.js:16-22
getAllProcessingRecordsArray.from(values).reverse()ocr.model.js:26-28
deleteProcessingRecordMap.deleteไม่มี callerocr.model.js:30-32

ข้อมูลหายเมื่อ process restart — ไม่มี disk/DB


Layer status

Layerสถานะจริง
Routes + Swagger annotationsทำงานครบ
Controllersthin — เรียก service แล้ว map status
ocr.servicemock ทั้งหมด
ocr.modelin-memory เท่านั้น
validation.middlewareใช้กับ POST process
error.middlewaredead (ไม่ import)
database.jsdead stub
utils/*dead (ไม่ถูกเรียกจาก controller)

README เรียกโครงสร้างว่า "MCP structure" (README.md) — ในที่นี้หมายถึงโฟลเดอร์ layout ของโปรเจกต์ ไม่เกี่ยวกับ Model Context Protocol


Dead / unwired files

Pathหลักฐาน
middleware/error.middleware.jsไม่มี require ใน app.js
config/database.jsไม่มี import ใน boot
utils/logger.jsไม่พบ import จาก controllers/services
utils/response.jscontrollers เขียน res.json เอง
deleteProcessingRecordexport แต่ไม่มี caller
AllProcessingRecords`Array.from(values).reverse() (newest first)
deleteProcessingRecordMap.deleteไม่มี caller ใน repo

ข้อมูลหายเมื่อ process restart — ไม่มี serialization / DB


public/index.html

Landing กลางจอ มีลิงก์สามจุด (public/index.html:72-74):

  • /health
  • /api
  • /api/health/detailed

ไม่มีลิงก์ไป /docs หรือ /api/ocr/* บนหน้านี้


สิ่งที่ README บอก vs โค้ดจริง

README claimความจริงCitation
มี .env.exampleไม่มีไฟล์README.md:12 vs glob
"Process OCR on an image"mock text คงที่ocr.service.js:26-34
MCP architectureโฟลเดอร์ครบ แต่ logic ส่วนใหญ่ placeholderREADME.md:105-115
Env vars ดูที่ .env.exampleดูที่ config.js แทนREADME.md:131-133