Volume 8 — Mobile Apps
"Mobile" คือกลุ่ม 3 repo ที่เกี่ยวข้องกับการใช้งาน VTRC บนมือถือ — แอปหลักที่ใช้งานจริง (vtrc-mobile), โปรเจกต์ rewrite ระยะเริ่มต้น (new-vtrc-mobile), และหน้าเว็บแจกไฟล์ติดตั้ง (vtrc-application-front) ทั้ง 3 repo อยู่บน branch master (default branch ตรงกับ canonical branch ไม่ต้องระบุ branch แยกเวลาอ้าง file:line)
จากการตรวจสอบโค้ดจริงพบว่า vtrc-application-front ไม่ใช่ Cordova app ตามที่คาดไว้ — เป็นหน้า static HTML download-center ล้วน (ดูรายละเอียดที่ vtrc-application-front/index § ข้อคลาดเคลื่อนที่พบ)
Repository ในกลุ่ม
| Repo | ไฟล์ที่ track | Stack จริง | หน้าที่ |
|---|---|---|---|
vtrc-mobile | 1,055 | React Native 0.63.2 + React 16.13.1 + Apollo Client 3 + Redux Toolkit + react-native-router-flux | แอปมือถือหลักที่พนักงานใช้งานจริง — 121 screen มีฟีเจอร์ HR/welfare เกือบทั้งหมด |
new-vtrc-mobile | 240 | React Native 0.78.0 + React 19 + TypeScript + @react-navigation v7 + Redux Toolkit | โปรเจกต์ rewrite ระยะเริ่มต้น — มี 6 screen (auth + home/menu/setting) |
vtrc-application-front | 18 | Static HTML/CSS (ไม่มี framework) | หน้า landing page แจกลิงก์ติดตั้ง iOS (OTA)/Android (Play Store)/redirect เว็บ |
ความสัมพันธ์ระหว่าง 3 repo
vtrc-mobile และ new-vtrc-mobile เชื่อมต่อ backend GraphQL เดียวกัน (https://vtrcapi.redcross.or.th/api/graphql สำหรับ prod) ด้วย query/mutation ชื่อเดียวกันสำหรับ auth flow (LOGIN, VERIFY_EMP_CODE_LOGIN, GENERATE_CAPTCHA) และใช้ RSA key pair เดียวกันทุกตัวอักษร สำหรับสร้าง csID ตอน login (vtrc-mobile/src/utils/login.js:16-42 เทียบ new-vtrc-mobile/src/constants/RSAKey.ts:11-38) — ยืนยันว่า new-vtrc-mobile เป็นการ port logic เดิมมาเขียนใหม่บนสถาปัตยกรรมใหม่ ไม่ใช่การออกแบบ auth ใหม่ทั้งหมด
new-vtrc-mobile ยังไม่ใช่ตัวแทนที่ใช้งานได้จริงของ vtrc-mobile — มีเพียง 6 screen (Login/Home/Menu/Setting + News ที่ยังไม่ผูก UI + CheckEmpCode ที่ comment ปิด) เทียบกับ 121 screen ของตัวเดิม และยังมีโค้ด placeholder ที่ไม่เสร็จ (refreshToken() ยิงไป URL ตัวอย่างจาก tutorial — new-vtrc-mobile/src/utils/Auth.ts:11) สรุปสถานะคือ early-stage architecture rewrite ไม่ใช่ full replacement หรือ throwaway experiment (มี unit test จริง 18 ไฟล์ แสดงความตั้งใจสร้างมาตรฐานใหม่) — ดูหลักฐานเต็มที่ new-vtrc-mobile/index
vtrc-application-front ไม่มีความเกี่ยวข้องทางเทคนิคกับอีก 2 repo เลย (ไม่มี native code, ไม่เรียก GraphQL/REST backend เดียวกัน) — เป็นเพียงหน้าเว็บที่ redirect ผู้ใช้ไปดาวน์โหลด vtrc-mobile ผ่าน App Store enterprise distribution (itms-services)/Play Store โดยเก็บไฟล์ .ipa ที่ compile แล้วไว้ในตัว repo เอง (ดู vtrc-application-front/02-scorecard § LEG-FRONT-01)
ข้อค้นพบสำคัญ — สถาปัตยกรรม endpoint resolution ของ Mobile ต่างจาก Web
vtrc-web/vtrc-rc-backoffice เลือก GraphQL endpoint ตอน runtime จาก window.location.href ผ่าน checkLinkURL() (ดู canonical truths) — ทั้งสองแอปมือถือไม่มี pattern นี้เลย เพราะไม่มี "URL ที่เปิดอยู่" ให้ตรวจแบบเบราว์เซอร์ ทั้งคู่ใช้ค่าคงที่ที่ประกาศในซอร์สโค้ดแทน ต้อง comment/uncomment แล้ว rebuild ทุกครั้งที่สลับ PROD/UAT/local และทั้งคู่มีปัญหาเดียวกันคือค่าคงที่ถูกประกาศซ้ำหลายไฟล์ที่ค่าไม่ตรงกันจริง (ดู vtrc-mobile/02-core-pipeline และ new-vtrc-mobile/01-repository-map)
Scorecard summary (รวมทั้งกลุ่ม)
| Repo | 🔴 Critical | 🟡 High | 🟢 Medium | ดูรายละเอียด |
|---|---|---|---|---|
vtrc-mobile | 2 | 3 | 5 | 04-scorecard |
new-vtrc-mobile | 1 | 2 | 3 | 02-scorecard |
vtrc-application-front | 0 | 1 | 2 | 02-scorecard |
| รวม | 3 | 6 | 10 |
ทั้ง 3 รายการ 🔴 Critical เป็นเรื่อง secret ที่ commit เข้า git แบบ plain text (RSA private key ซ้ำ 2 repo, Android release keystore password ใน vtrc-mobile) — ทีมดูแลควรจัดลำดับแก้ vtrc-mobile ก่อนเพราะเป็นแอปที่ใช้งานจริงในโปรดักชันและมี attack surface ใหญ่ที่สุด ส่วน new-vtrc-mobile ควรแก้ปัญหาเดียวกันก่อนที่จะขยายฟีเจอร์ต่อ เพราะรากฐานที่ตั้งไว้ตอนนี้จะกลายเป็นมาตรฐานที่โค้ดใหม่ทุกตัวเดินตาม
สารบัญ
| Repo | บท |
|---|---|
vtrc-mobile | index · 01 repository-map · 02 core-pipeline · 03 features-map · 04 scorecard |
new-vtrc-mobile | index · 01 repository-map · 02 scorecard |
vtrc-application-front | index · 01 repository-map · 02 scorecard |