WELIFE Docs Swagger Admin Web

Local test — WELIFE

Chạy trên máy dev. Secrets: secrets/LOCAL-CREDENTIALS.md (gitignore). Env: 07-ENVIRONMENT.md · Plan chain: WP-CHAIN-PLAN.md

Trước khi test

Windows (PowerShell)

npm run setup          # lần đầu
npm run dev:up         # PG + Redis + MinIO + Mailpit + migrate + env:check
npm run api:dev        # terminal 1
npm run dev:smoke      # sau khi API listen
npm run mobile:start       # terminal 2 (Consumer Expo · WP-ENV-EXPO-01)
npm run mobile:start:lan   # Expo Go trên device (LAN)
# optional: mobile:start:prod · mobile:reset:metro
# optional
npm run driver:start   # :8082
npm run partner:start  # :8083

Bash

npm run infra:up
npm run env:check
npm run api:dev          # terminal 1
# optional
cd api && npx prisma migrate deploy && npm run prisma:seed
npm run mobile:start     # terminal 2 (Consumer Expo)
npm run driver:start     # terminal 3 (Driver Expo :8082)
npm run partner:start    # terminal 4 (Partner Expo :8083)
URL Mục đích
http://localhost:3000/api/v1 API index (links)
http://localhost:3000/api/v1/health API sống
http://localhost:3000/api/v1/health/deps Postgres / Redis / MinIO
http://localhost:3000/docs Swagger
http://localhost:3000/chat HTTP probe Socket.IO (không phải UI chat)
http://localhost:9001 MinIO console

Smoke E2E: npm run smoke:chain → docs/SMOKE-CHAIN-RESULT.json

Extra domain audit: node scripts/functional-extra-audit.mjs → docs/reports/FUNCTIONAL-EXTRA-AUDIT.json

Final functional status (corrected classification): docs/reports/FUNCTIONAL-AUDIT-2026-08-06.md · WP-FUNCTIONAL-AUDIT-01

Lệnh Artifact
npm run audit:refresh references/imp-stub-audit.json · references/agent-work-queue.json
npm run audit:nav CON navigate ↔ registered screens (WP-NAV-CI-01) · exit 1 nếu missing
npm run smoke:chain SMOKE-CHAIN-RESULT.json
npm run smoke:ride stdout 14 checks đặt xe (quote tuyến thật · auto-match · nearby-drivers · avatar tài xế) · WP-RIDE-AUDIT-BOOKING-01 · WP-FE-RIDE-MAP-PINS-01
npm run drivers:check stdout tài xế seed (online · GPS · avatar) · WP-SEED-DRIVER-01
node scripts/functional-extra-audit.mjs reports/FUNCTIONAL-EXTRA-AUDIT.json
npm run wallet:transfer:smoke stdout (wallet transfer)
npm run routing:osm:smoke / routing:mapbox:smoke provider vs Haversine (external may PARTIAL)

Metro :8081 trong browser = manifest Expo, không phải web app / mobile E2E. Cấm thiết bị thật khi agent verify: không bắt Expo Go trên phone. Verify = unit + API smoke + Metro lên.

Routing thật (không rơi về chim bay) · WP-RIDE-AUDIT-BOOKING-01

Máy dev có TLS inspection (proxy/AV) làm fetch của Node fail UNABLE_TO_VERIFY_LEAF_SIGNATURE → Mapbox/OSRM chết → quote rơi về Haversine (sai khoảng cách, ETA, giá; map không vẽ tuyến). npm run api:dev đã tự thêm NODE_OPTIONS=--use-system-ca (scripts/api-dev.mjs). Chạy nest trực tiếp thì tự set:

$env:NODE_OPTIONS="--use-system-ca"; npm run start:dev --prefix api

Kiểm tra: npm run smoke:ride — check "quote dùng tuyến đường thật" phải PASS với provider=mapbox|welife-osrm.

Marker tài xế trên map CON phải đi theo đường (không nét đứt chim bay). WP-RIDE-GPS-ROAD-01: vệt remaining + sim stepAlongPolyline. Reload Expo sau khi sửa FE.

GPS hành khách (WP-RIDE-GPS-PAX-01): CON Matching/Detail ping POST /rides/:id/passenger-location + WS ride:passenger-location mỗi 3s. Cần migrate passengerLastLat/Lng trên bảng rides.

Tài xế demo

cd api && npm run prisma:seed tạo 6 tài xế APPROVED/online quanh Q1 (có ảnh đại diện) — auto-match cần dữ liệu này, DB trắng sẽ luôn trả no_driver_nearby. Prod/VPS: node api/prisma/seed-drivers.mjs trong container API (đã seed 2026-08-17).

Gate (api/)

cd api
npm run build
npm run lint
npm test

Smoke checklist (Bearer sau OTP)

  1. Auth — POST /auth/otp/send → verify (phone + OTP trong secrets) → lấy accessToken
  2. Users — GET /users/me
  3. Places — GET /places/nearby?lat=10.77&lng=106.7 (không gãy); alias radius hoặc radiusMeters OK
  4. MEDIA — POST /upload/single multipart → DELETE /upload/file
  5. ADDR — POST /addresses → GET /addresses/me/default
  6. WALLET — POST /wallet/topup + header Idempotency-Key (gửi 2 lần → replayed: true)
  7. FNB — GET /merchants → add cart item → POST /orders
  8. RIDE — POST /rides/quotes → POST /rides → POST /rides/:id/cancel

Smoke Auth + Driver (bắt buộc)

  1. OTP Consumer +84901234567 → GET /driver/me expect 403
  2. POST /driver/register → PENDING
  3. OTP Admin (ADMIN_PHONES) → PATCH /driver/admin/applications/:id { status: "APPROVED" }
  4. OTP surface=DRIVER → roles gồm DRIVER
  5. Passenger tạo POST /rides (REQUESTED) → driver accept → pickup → complete

Smoke Partner (WP-PAR-AUTH-01)

  1. OTP surface=PARTNER (phone partner) → POST /partners/onboarding
  2. Admin → GET /partners/admin/applications → PATCH .../:id { status: "APPROVED" }
  3. Partner token → GET /partners/me có PARTNER_OWNER · GET /partners/staff OK
  4. USER không role → GET /partners/staff expect 403

Smoke ATM · PARK · FUEL · Redis OTP

  1. GET /atms/nearby?lat=10.7769&lng=106.7009 · GET /atms/banks
  2. GET /parking/lots/nearby → JWT POST /parking/partner/check-in → check-out
  3. GET /fuel/stations/nearby · GET /fuel/brands
  4. POST /auth/otp/send → response otpBackend: "redis"

Kết quả lần retest gần nhất

2026-08-06 ~13:20 ICT — WP-FUNCTIONAL-AUDIT-01 · COMPLETE_WITH_EXTERNAL_BLOCKERS

Gate / Smoke Result
audit:refresh 354 IMP / 0 STUB · queue empty
env:check PASS WITH WARNING (Google PLACEHOLDER · OWNER)
smoke:chain 57 PASS / 0 FAIL
Extra domain audit 46 PASS / 0 FAIL
Wallet transfer PASS
Routing OSRM/Mapbox PARTIAL — Haversine fallback (BLOCKED_EXTERNAL)
Google real OAuth OWNER_REQUIRED · config guard only
Chat realtime JWT E2E NOT CONFIRMED
Device / Expo Go NOT TESTED
Báo cáo FUNCTIONAL-AUDIT-2026-08-06.md

2026-07-29 ~16:45 ICT — LOCAL_SMOKE_CHAIN_PASS

Gate / Smoke Result
npm run smoke:chain (WP-SMOKE-E2E-01) 57 PASS / 0 FAIL · avg 95.2%
Chains mới MED health vax/history/book · ATM · FUEL · ROUTE directions · PARK check-in/out
OTP otpBackend redis (via auth.otp.send step)
Core (auth→FNB→ride→driver→partner) PASS

2026-07-27 ~11:55 ICT — LOCAL_DOC_TEST_PASS (lịch sử)

Gate / Smoke Result
env:check · health · deps (PG/Redis/MinIO) PASS
api jest orders + suite PASS
Chain audit smoke-chain-audit.mjs 44 PASS / 0 FAIL · avg 95.5% · fnb.order addressSnapshot OK
OTP / ATM / PARK / FUEL (via smoke) PASS
Partner staff 403 / me+staff PASS
Driver trip CONFIRMED→IN_TRIP→COMPLETED PASS