Skip to content

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ไฟล์ที่ trackStack จริงหน้าที่
vtrc-mobile1,055React Native 0.63.2 + React 16.13.1 + Apollo Client 3 + Redux Toolkit + react-native-router-fluxแอปมือถือหลักที่พนักงานใช้งานจริง — 121 screen มีฟีเจอร์ HR/welfare เกือบทั้งหมด
new-vtrc-mobile240React Native 0.78.0 + React 19 + TypeScript + @react-navigation v7 + Redux Toolkitโปรเจกต์ rewrite ระยะเริ่มต้น — มี 6 screen (auth + home/menu/setting)
vtrc-application-front18Static 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-mobile23504-scorecard
new-vtrc-mobile12302-scorecard
vtrc-application-front01202-scorecard
รวม3610

ทั้ง 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-mobileindex · 01 repository-map · 02 core-pipeline · 03 features-map · 04 scorecard
new-vtrc-mobileindex · 01 repository-map · 02 scorecard
vtrc-application-frontindex · 01 repository-map · 02 scorecard