Skip to content

Volume 8 · vtrc-rc-backoffice Deep Dive

เล่มนี้เจาะลึก vtrc-rc-backoffice/ — frontend ฝั่ง HR/Admin เป็น React 16 + CRA + Apollo Client v2 + AntD v4 + MUI v5 + Recoil

เป้าหมายคือให้อ่านจบแล้วเข้าใจโครงสร้าง รู้จุดที่ต้องระวัง และสามารถแก้ไขหรือเพิ่มฟีเจอร์ได้โดยไม่ทำลาย pattern ที่มีอยู่


vtrc-rc-backoffice คืออะไร

vtrc-rc-backoffice คือเว็บแอปที่ฝ่าย HR/Admin สภากาชาดใช้งานจริง — จัดการข้อมูลพนักงาน อนุมัติใบลา อนุมัติค่ารักษาพยาบาล บริหารกองทุนสงเคราะห์ บริหารการสรรหาและ PMS จัดการผู้ใช้และสิทธิ์ และอื่น ๆ

ตัวแอปรันที่ https://vtrcbackoffice.redcross.or.th/ (production) และ https://uat-vtrcbackoffice.redcross.or.th/ (UAT) — โดยทั้งคู่ใช้ bundle ตัวเดียวกันที่เลือก GraphQL endpoint ตอน runtime ตาม origin ที่เปิด

คู่สมรสของ vtrc-rc-backoffice คือ vtrc-web (ฝั่งพนักงาน) ซึ่งอยู่ใน Volume 7 — ทั้งสองแอปใช้ Apollo v2 เหมือนกัน แต่ต่างกันที่เวอร์ชัน AntD (v3 vs v4), ระบบ build (Webpack eject vs CRA), และ state management (none vs Recoil)


สไตล์โค้ด — 4 ข้อที่ต้องจำ

  1. pattern ผสม class + function component — module เก่า (Leave, Hospital, ManageUser) ใช้ class component + React.createRef + <Form ref={formRef}> module ใหม่ (WorkForce, PMS, Recruitment) ใช้ function component + Form.useForm + Recoil
  2. fetchPolicy: 'no-cache' เป็น default เหมือน vtrc-web — cache ของ Apollo แทบไม่ถูกใช้
  3. เมนู dynamic — ดึงจาก fetchgroupmenu + fetchsidemenu (REST) ไม่ใช่ static array ใน routes.js
  4. มี HTTP client 17 ตัว (15 axios + 2 apollo) แยกตาม microservice — ระวังเลือกผิดตัว

ตัวเลขที่ควรจำ

ตัวเลขค่าที่มา
Page files871 ไฟล์src/pages/
Component files104 ไฟล์src/components/
Recoil atom files57 ไฟล์src/recoil/states/
Util files33 ไฟล์src/utils/
GraphQL queries120 ตัวsrc/graphql/queries.js (4,108 บรรทัด)
GraphQL mutations94 ตัวsrc/graphql/mutations.js (2,208 บรรทัด)
Routes276 pathssrc/config/routes.js (2,550 บรรทัด)
SiderLayout (shell)1,168 บรรทัดsrc/components/SiderLayout/index.js
AntD override (compiled CSS)21,189 บรรทัดsrc/config/custom-antd.css
Legacy/backup files75 ไฟล์ + 4 โฟลเดอร์ _bkทั่วระบบ
HTTP clients17 ตัว (15 axios + 2 apollo)src/config/axios-*.js + apollo*.js
React16.13package.json
Apollo Clientv2 (react-apollo@3.1.5)package.json
AntDv4.15.4package.json
MUIv5.11 (แทบไม่ได้ใช้)package.json
Recoil0.7.5package.json
React Routerv5package.json
CRA3.4.3 (ไม่ eject)package.json
Node (ใน Docker)16Dockerfile:1
Bundle ที่ commit~130 MBbuild/

สิ่งที่ Volume นี้ไม่ cover

  • รายละเอียด GraphQL schema ฝั่ง vtrc-api — cover ใน Volume 3 บท 3.2
  • HRMI MSSQL schema — cover ใน Volume 9
  • business rule ของแต่ละฟีเจอร์ — cover ใน Volume 1
  • vtrc-webVolume 7 แยกต่างหาก

โครงสร้างบท

บทชื่อคำถามที่ตอบ
7.1Repository map + legacy/backup filesโฟลเดอร์ไหนทำอะไร ไฟล์ไหนห้ามแตะ
7.2Bootstrap + CRA buildแอปเริ่มที่ไหน สร้าง bundle อย่างไร
7.3Apollo Client + checkLinkURLส่ง request อย่างไร เลือก endpoint อย่างไร
7.4Routing + auth gate + dynamic menuroute ทำงานอย่างไร เมนูมาจากไหน
7.5GraphQL queries + mutations catalogมี query/mutation อะไรบ้าง จัดกลุ่มอย่างไร
7.6Component + Recoil + MUI architecturecomponent แบ่งอย่างไร state อยู่ที่ไหน
7.7Page deep dive — Login, ManageUser, LeaveStudiesPaymentsหน้าจริงทำงานอย่างไร 3 ตัวอย่าง
7.8State, styling, locale (พ.ศ.)state อยู่ที่ไหน CSS กี่ระบบ จัดการพ.ศ. อย่างไร
7.9Security + performanceจุดเสี่ยงด้านความปลอดภัย ทำไม bundle ใหญ่
7.10Scorecard + comparison vtrc-webสรุปสุขภาพ repo + เปรียบเทียบกับ vtrc-web

วิธีอ่านเล่มนี้

ถ้ามีเวลาน้อย — อ่าน 7.1 (map) + 7.4 (routing + dynamic menu) + 7.10 (scorecard + comparison) ก็พอเข้าใจภาพรวม

ถ้าจะแก้ฟีเจอร์ — อ่าน 7.5 (catalog) ก่อนหา query ที่เกี่ยวข้อง แล้วดู 7.7 (deep dive) เป็นตัวอย่าง

ถ้าจะทำ security review — อ่าน 7.9 ก่อน จากนั้น cross-check กับ Volume 10

ขอแนะนำให้เปิดไฟล์จริงใน repo ควบคู่กับการอ่าน — คู่มือนี้เป็นแผนที่ ไม่ใช่ตัวแทนของโค้ด