Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ Redis 鍵:`drivers:geo`(GEO 位置集合)、`driver:{id}:loc`(最新位
- ✅ **搶單鎖**:`SETNX` 確保同一單只有一位司機成單。
- ✅ **LINE 簽章安全**:以真實 HMAC-SHA256 簽章請求驗證——正確簽章 `200`、偽造簽章 `401`、缺簽章 `401`。
- ✅ **PostGIS**:pickup 點、`ST_DWithin` 圍籬、`ST_Length` 里程、`ST_AsGeoJSON` 回放均正確輸出。
- ✅ **App 推播送出路徑(2026-07-30)**:`scripts/push_e2e.sh`/`push_cancel_e2e.sh`
以假 device token 走完整鏈路,從 log 判定收件人——**10 則推播全部推對人**
(行程狀態、對話、協尋各步驟),取消三條另驗到「乘客自己取消完全沒有推播」。
**不需 Firebase 憑證**(走 `LogPusher` stub);憑證到位後不必改程式碼。

---

Expand Down
32 changes: 32 additions & 0 deletions docs/TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -1223,6 +1223,38 @@ FCM/APNs token 是「這台裝置上的這個 App」的識別,換人登入

## 下次任務

> **🎯 2026-07-30 這一輪做完了什麼(開工先看這段)**
>
> 主題是「**推播這條通道從頭到尾打通**」,五支 PR 全部合併進 main:
>
> | PR | 內容 | 章節 |
> |---|---|---|
> | [#61](https://github.com/thothawei/fleet-dispatch/pull/61) | 乘客端行程狀態推播的**送出路徑**(先前只有司機派單那一條) | U |
> | [#62](https://github.com/thothawei/fleet-dispatch/pull/62) | 對話訊息推播給收訊那一方 | U2 |
> | [#63](https://github.com/thothawei/fleet-dispatch/pull/63) | 協尋單每一步推播給對方 | U3 |
> | [#64](https://github.com/thothawei/fleet-dispatch/pull/64) | 接單/取消失敗改回 **409**(先前 200+文案) | T1 |
> | [#65](https://github.com/thothawei/fleet-dispatch/pull/65) | **一支裝置 token 只能有一位主人**(換人登入的隱私外洩) | U5 |
>
> App 端同批:fleet-app #79(冷啟動推播補送)/#80(對話)/#81(協尋)+三支文件 PR。
>
> **➡️ 下一步只剩一個外部卡點:Firebase 憑證**(`FCM_CREDENTIALS_FILE`)。
> 憑證放進來後**不需要再改任何程式碼**——沒有憑證時走 `LogPusher` stub,
> 送出路徑已用真服務逐則驗過(見 U4 的表)。憑證到位那天要驗的是:
> 司機端「App 被殺 → 點推播 → 接單卡」、乘客端「App 被殺 → 點推播 → 畫面已是最新狀態」。
>
> **想繼續推進、又不解憑證卡點的話,剩下的候選**(依價值排序):
> 1. **T4 多裝置同帳號**(產品決策:要不要一個帳號只能一台上線)——**需要你拍板**。
> 2. **`/metrics`(P4 #20)**:目前沒有任何可觀測性;上線前遲早要做,但沒有使用者可見價值。
> 3. **`GET /api/driver/rides`(P4 #18)**:司機歷史逐趟明細(收入面已由 earnings 涵蓋)。
> 4. **對話/協尋的推播節流**:目前每則訊息都推一次。等真的有量再說——
> 現在做只是猜。
>
> **這一輪學到、值得記住的兩條**:
> - 通道清單要問的不是「WS 送了嗎」,而是「**他現在如果沒開著 App,會知道嗎?**」
> (反過來也要問「這則需要吵他嗎」——`driver.location` 每 8 秒一則就不該推)。
> - 補完通道後要接著問「**送對人了嗎**」——U5 那個隱私洞就是這樣查出來的,
> 而且它是**新功能帶進來的新風險**:推播管道打通之前,那張表寫錯沒有可觀察的後果。

**新需求(2026-07-16 加入,尚未實作,皆需後端地基先行)**:
- **N. 多乘客/多停靠點行程**:一張訂單最多 5 位乘客各自上下車+中斷點;司機端同步收到全程。
**車資已拍板(2026-07-16):全程實際路線含繞路**(N5)——需擴充 OSRM client 支援多 waypoint
Expand Down
Loading