Skip to main content

ภาพรวมระบบ ATP30 (System Overview)

ระบบฝั่ง driver เป็น mobile-first web app ที่ route หลักทุกหน้าอยู่หลัง AuthGuard และถูกคุมด้วย PermissionGuard อีกชั้น

โครงสร้างการทำงานหลัก​

Guard และ Permission​

Route Guard​

  • LoginRoutes ใช้ GuestGuard
  • MainRoutes ใช้ AuthGuard
  • ทุก route หลักใน MainRoutes ถูกครอบด้วย PermissionGuard
  • เมนู sidebar ถูกประกาศใน src/config/menu.config.ts
  • ก่อน render จริง เมนูถูกกรองด้วย filterMenuByPermission
  • ถ้าผู้ใช้ไม่มี permission ของเมนูใด เมนูนั้นจะไม่แสดง

Route และสิทธิ์ที่มีจริง​

routepermissionหน้าที่
/homedriver-dashboard:viewหน้าแรกของ driver
/trip-records/:iddriver-trip-record:viewดูรายละเอียดเที่ยวรถ
/trip-records/:id/editdriver-trip-record:viewแก้ไขเที่ยวรถ
/fuel-recorddriver-refuel-record:viewบันทึกเติมน้ำมันหรือชาร์จไฟ
/vehicle-log-bookdriver-vehicle-record:viewบันทึกสมุดประจำรถ
/standby-workdriver-standby-record:viewบันทึกงาน standby
/incomedriver-my-income:viewดูรายได้ของฉัน

Data Source ที่สำคัญ​

Profile ของนักขับ​

  • ดึงจาก /auth/me
  • จัดการผ่าน DriverContext
  • หน้า home ใช้ข้อมูลนี้แสดงชื่อ, ประเภทรถ, รหัสรถ, เบอร์โทร, และพื้นที่ทำงาน

รายการเที่ยวรถหน้าแรก​

  • ดึงจาก GET /driver/trip-record
  • filter วันที่ผ่าน query param selectedDate
  • route หน้าแรกไม่ได้ดึงข้อมูลจาก billing หรือ report โดยตรง

รายได้ของฉัน​

  • ดึงจาก GET /trip-records/my-driver-income
  • ส่ง query param year
  • หน้ารายได้แสดงผลลัพธ์ที่ backend คำนวณมาแล้ว

Logic ของหน้าแรกที่สำคัญ​

หน้า /home map สถานะเที่ยวรถเป็น 3 สถานะตามโค้ด:

  • COMPLETED เมื่อ isDraft เป็น false
  • PENDING เมื่อ isDraft ยังเป็น true แต่เวลารอบรถผ่านไปแล้ว
  • SCHEDULED เมื่อ isDraft ยังเป็น true และยังไม่ถึงเวลารอบรถ

logic นี้ใช้ tripRecord.date และ tripRecord.routeRound.time เทียบกับเวลา current ของ dayjs()

ข้อจำกัดของบัญชีที่ login ได้​

  • ฝั่ง driver จะตรวจ userType หลัง login
  • ถ้าเป็น OFFICE ระบบจะ logout และไม่ให้เข้าต่อ
  • ถ้าไม่ใช่ COMPANY_DRIVER หรือ PARTNER_DRIVER ก็จะไม่ผ่านเช่นกัน

สิ่งที่ควรรู้สำหรับคู่มือ​

  • เมนูที่ผู้ใช้เห็นอาจไม่ครบทุกเมนูใน config ถ้า permission ไม่ครบ
  • หน้า home เป็นจุดรวมทั้งข้อมูล profile และรายการเที่ยวรถ
  • route /trip-records/:id และ /trip-records/:id/edit ไม่ได้อยู่ใน menu ตรง ๆ แต่เปิดจาก flow ของงานในหน้า home
  • หน้า income ไม่มี logic คำนวณรายได้ใน UI

อ้างอิงโค้ด​

  • atp30-tos-driver/src/routes/LoginRoutes.tsx
  • atp30-tos-driver/src/routes/MainRoutes.tsx
  • atp30-tos-driver/src/config/menu.config.ts
  • atp30-tos-driver/src/utils/filterMenuByPermission.ts
  • atp30-tos-driver/src/views/home/index.tsx
  • atp30-tos-driver/src/contexts/DriverContext.tsx
  • atp30-tos-driver/src/hooks/query/useTripRecord.ts
  • atp30-tos-driver/src/hooks/query/useIncome.ts
  • atp30-tos-driver/src/views/authentication/jwt/AuthLogin.tsx