7.2.3 · Persistence & integrations
branch: UAT
ไม่มี persistence ของตัวเอง
meeting-backoffice เป็น pure frontend — ไม่มี ORM/DB driver ใน package.json:14-44 ข้อมูลทั้งหมดมาจาก REST ไปยัง service อื่น
ค่า NEXT_PUBLIC_APP_CONNECT_DB_* / SMTP ใน .env:5-12 เป็น remnant จาก template — ไม่พบโค้ดเปิด connection
Integration 1 — meeting-vtrc-api
| Env | NEXT_PUBLIC_APP_MEETING_API |
| UAT value | https://uat-vtrcapi.redcross.or.th/meeting (.env:13) |
| Protocol | REST JSON |
| Prefix path | /meeting บน gateway เดียวกับบริการอื่น |
ขอบเขต
- Group CRUD:
listgroup,creategroup,editgroup - Approver:
listApprover,addNewApprover,deleteapprover - Org helpers:
finddropdownbyorg/*,finduserlistbyorg - Auth bridge:
GET /redirectbypass
รายละเอียด endpoint และ auth middleware ฝั่ง server ดูเอกสาร meeting-vtrc-api — ชื่อ path มีคำว่า secure แต่ frontend ส่วนใหญ่เรียกโดยไม่ส่ง Bearer ของ localStorage
ความสัมพันธ์ group/approver กับระบบประชุม
หน้านี้ตั้งค่า master data ที่ meeting-vtrc-api ใช้ตอน flow ประชุมจริง (เชิญกลุ่ม / อนุมัติ) — ไม่ได้เป็น UI อนุมัติรายการประชุมแบบ realtime เอง
Integration 2 — 2way-vtrc-api (path /2way)
| Env | NEXT_PUBLIC_APP_2WAY_API |
| UAT value | https://uat-vtrcapi.redcross.or.th/2way (.env:14) |
| Call | POST /getUserByCondition |
ใช้ค้นหาพนักงานตอนเพิ่มสมาชิกกลุ่มหรือผู้อนุมัติ (creategroup/index.tsx:392, createapprover/index.tsx:415)
โฮสต์เดียวกับ meeting (uat-vtrcapi.redcross.or.th) คนละ path — reverse proxy แยกไปคนละ upstream (2way-vtrc-api vs meeting-vtrc-api)
ใน repo นี้การเรียก ไม่ส่ง Authorization header (ต่างจาก meeting-backoffice-new)
Integration 3 — Sentry
สิ่งที่มีใน repo
| ไฟล์ | สถานะบน UAT |
|---|---|
@sentry/nextjs ใน dependencies | มี (package.json:24) |
next.config.js withSentryConfig(...) | active (:38) — webpack plugin ยังห่อ config |
sentry.client.config.js | Sentry.init comment ทั้งก้อน (:5-17) |
sentry.server.config.js | comment ทั้งก้อน เช่นกัน |
sentry.properties | มีไฟล์ |
pages/_error.js | ยัง import * as Sentry และ captureException |
สรุปพฤติกรรมที่คาดจากโค้ด
- Source map / webpack instrumentation อาจยังถูก plugin แตะตอน build
- Runtime browser/server ไม่ได้ เรียก
Sentry.initจาก config มาตรฐานของ Next+Sentry (ถูก comment) _error.jsยังพยายามcaptureException— ผลลัพธ์จริงขึ้นกับสถานะ SDK เมื่อยังไม่ init → ถือว่า observability ไม่พร้อมใช้งานอย่างตั้งใจ จนกว่าจะ uncomment และตั้ง DSN
อย่าอ้างว่า production ส่ง error ครบชุดโดยไม่มีหลักฐานจาก Sentry project — จากซอร์สบน UAT init ถูกปิด
Integration 4 — Docker / runtime
Dockerfile
FROM node:16.14.0
WORKDIR /usr/src/app
COPY package.json ./
COPY . .
RUN yarn install
# RUN yarn build:production ← comment
CMD [ "yarn", "dev" ](Dockerfile:1-20)
ผลกระทบ:
- คอนเทนเนอร์รัน Next dev server ไม่ใช่
next startหลังnext build - ไม่มี multi-stage; source ทั้งก้อนอยู่ใน image
.envถูก COPY เข้า image (COPY . .)
docker-compose.yml (UAT จริง)
services:
meetingbodev1:
restart: always
build:
context: .
ports:
- 3001:3000(docker-compose.yml:1-9)
ไม่มี ในไฟล์นี้บน branch UAT:
image: gcr.io/...environment: BASE_PATH=...networks: uat-vtrc-backoffice-network
(ค่าพวกนั้นอยู่ที่ meeting-backoffice-new/docker-compose.yml — อย่าสลับเอกสาร)
สิ่งที่ไม่มี
- PDF หนังสือเชิญ / ส่งอีเมล — อยู่ที่
meeting-vtrc-api - LDAP / SSO client — auth พึ่ง
redirectbypassbridge - GraphQL /
vtrc-apiโดยตรงจากหน้านี้ - WebSocket
- การฝัง static เข้า
vtrc-backoffice/meeting/(นั่นคือ artifact ของmeeting-backoffice-new)
แผนภาพ integration
Browser /meetingbo/*
│
├─(SSG build time / client)─► meeting-vtrc-api /meeting/secure/...
│ + /redirectbypass
│
└─(client search)───────────► 2way-vtrc-api /2way/getUserByCondition
Sentry.init (config) ── COMMENTED OUT
withSentryConfig (webpack) ── still wrapped
_error.js captureException ── still present