WELIFE Docs Swagger Admin Web

WP-RIDE-API-AUDIT-01 — Audit đặt xe (D-RIDES)

Domain: D-RIDES · Surfaces: CON · API · DRV · Date: 2026-08-14 · Status: AUDIT

Verdict

Layer Kết luận
API core (local) Đủ & hoạt động cho quote → create (CASH) → get → tracking → list → cancel
E2E đặt xe có tài xế Chưa đủ thực tế nếu không có driver online/GPS → chuyến kẹt REQUESTED
Thanh toán CASH OK · WALLET đúng khi đủ số dư (thiếu → 400) · MoMo/VNPay có BE, FE chưa chọn được
VPS Health OK · OTP SMS (esms) 503 → không smoke rides trên prod trong audit này

Luồng CON (mobile)

RideHome → RideQuote (POST /rides/quotes)
         → book (POST /rides)
         → RideMatching (poll GET /rides/:id)
         → RideDetail (get + tracking + WS /rides)
         → cancel / rate
FE screen API Smoke local
Quote POST /rides/quotes PASS fare=35450 · 3 options · dist≈4690m
Book POST /rides PASS status=REQUESTED · CASH UNPAID · no driver
Detail GET /rides/:id PASS
Tracking GET /rides/:id/tracking PASS · realtime=socket.io /rides · driverLoc=null
History GET /rides PASS count≥1
Cancel POST /rides/:id/cancel PASS → CANCELLED
Rate POST /rides/:id/rate PASS guard — reject khi chưa COMPLETED/CONFIRMED
Wallet book POST /rides WALLET PASS guard — Số dư ví không đủ
Bad promo promoCode=NOTEXIST999 PASS guard — mã không hợp lệ

Unit: rides.service.spec.ts — 3/3 PASS.

API surface (Swagger tag rides)

Method Path Auth Ghi chú
POST /rides/quotes JWT Haversine + TTL quote
POST /rides JWT vehicle · pay · promo · gateway · tryAutoAssign
GET /rides JWT lịch sử
GET /rides/:id JWT chi tiết + driver embed
POST /rides/:id/cancel JWT + refund ví/gateway
POST /rides/:id/rate JWT COMPLETED/CONFIRMED
GET /rides/:id/tracking JWT meta + last driver loc (WS)
GET/POST /rides/admin/trips* ADMIN ops

DRV (liên quan): GET /driver/trips/available|active|history · accept|pickup|complete|reject|cancel.

Đủ / chưa đủ

Đã đủ (MVP kỹ thuật)

  1. Báo giá 3 loại xe (BIKE/CAR/CAR_PLUS) từ BE options
  2. Tạo chuyến + idempotent theo quote
  3. Hủy + refund path (WALLET/gateway) khi đã prepaid
  4. Settle khi complete (BE · gọi từ driver complete)
  5. Promo resolve + mark used
  6. Gateway RIDE_PAY + IPN → PREPAID → match
  7. Auto-match nếu có driver APPROVED + online + lastLat/lng ≤8km
  8. CON WS join /rides trên RideDetail

Gap / rủi ro sản phẩm

# Gap Impact
1 Không có driver online → mãi REQUESTED · Matching poll vô hạn UX User thấy “đang tìm” mãi
2 FE chỉ CASH / WALLET — không UI MoMo/VNPay · payUrl chỉ Alert Gateway IMP BE nhưng CON không dùng đủ
3 Fare = Haversine, không OSRM/Mapbox road distance Giá lệch thực tế đường đi
4 Matching không subscribe WS status — chỉ poll 2.5s Chậm hơn realtime một nhịp
5 Rate cho phép CONFIRMED (không chỉ COMPLETED) Có thể rate sớm nếu match auto CONFIRMED
6 VPS OTP SMS fail → không verify rides prod trong audit Ops/SMS

Khuyến nghị (ưu tiên)

  1. WP-RIDE-MATCH-UX-01 — timeout matching · CTA hủy rõ · empty “không có tài xế gần bạn”
  2. WP-FE-RIDE-PAY-GATEWAY-02 — chọn MoMo/VNPay + Linking.openURL(payUrl)
  3. Seed / ops: ≥1 driver online + lastLat/lng Q1 để demo match
  4. Optional: quote distance từ /routing/directions thay Haversine

Files tham chiếu