Skip to content

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

EnvNEXT_PUBLIC_APP_MEETING_API
UAT valuehttps://uat-vtrcapi.redcross.or.th/meeting (.env:13)
ProtocolREST 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)

EnvNEXT_PUBLIC_APP_2WAY_API
UAT valuehttps://uat-vtrcapi.redcross.or.th/2way (.env:14)
CallPOST /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.jsSentry.init comment ทั้งก้อน (:5-17)
sentry.server.config.jscomment ทั้งก้อน เช่นกัน
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 จริง)

yaml
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 พึ่ง redirectbypass bridge
  • 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