已載入 Skill +5092 tokens · 147280 ms
---
title: "訂單建立流程規劃"
description: "以限定程式碼證據規劃訂單建立流程、資料持久化、事件處理與測試文件。"
---
# 訂單建立流程規劃
> [!IMPORTANT]
> 本文件的證據範圍僅限下列五個程式碼區段。由於目前無法讀取儲存庫或檔案內容,以下僅提供**文件結構、查證矩陣與建議圖型**,不將檔名推測描述成既有實作。
## 1. 文件範圍
| 項目 | 設定 |
|---|---|
| Repository | `https://github.com/acme/shop` |
| Branch | `main` |
| 主題 | 訂單建立流程 |
| 證據限制 | 僅使用指定的五個檔案區段 |
| 目前狀態 | 程式碼內容不可取得,實際控制流程、欄位與錯誤行為均待確認 |
## 2. 證據清單
| 證據 | 規劃查證內容 | 目前可下結論 | Source |
|---|---|---|---|
| API route | HTTP 方法、輸入解析、回應與錯誤映射 | 尚無法確認 | [app/api/orders/route.ts:12-40](https://github.com/acme/shop/blob/main/app/api/orders/route.ts#L12-L40) |
| Orders library | 驗證、訂單建立、持久化及事件呼叫順序 | 尚無法確認 | [lib/orders.ts:8-61](https://github.com/acme/shop/blob/main/lib/orders.ts#L8-L61) |
| Database schema | 訂單欄位、型別、限制、預設值及關聯 | 尚無法確認 | [db/schema.ts:5-32](https://github.com/acme/shop/blob/main/db/schema.ts#L5-L32) |
| Tests | 已驗證的成功、失敗與邊界案例 | 尚無法確認 | [tests/orders.test.ts:10-55](https://github.com/acme/shop/blob/main/tests/orders.test.ts#L10-L55) |
| Worker events | 事件格式、消費行為、重試與失敗處理 | 尚無法確認 | [worker/events.ts:7-44](https://github.com/acme/shop/blob/main/worker/events.ts#L7-L44) |
## 3. 建議章節
| 章節 | 應回答的問題 | 主要證據 |
|---|---|---|
| 流程概觀 | 建立訂單的起點、終點與責任邊界為何? | API route、Orders library |
| API 契約 | 請求欄位、狀態碼與錯誤格式為何? | API route、Tests |
| 應用服務流程 | 驗證、寫入及事件處理的實際順序為何? | Orders library |
| 資料模型 | 哪些欄位必填?有哪些限制、預設值及關聯? | Database schema |
| 事件處理 | 何時產生事件?Worker 如何處理失敗或重複事件? | Orders library、Worker events |
| 失敗與一致性 | 寫入或事件處理失敗時,系統留下什麼狀態? | Orders library、Worker events、Tests |
| 測試覆蓋 | 哪些行為已由測試證明?哪些仍是缺口? | Tests |
| 可觀測性 | 是否有日誌、事件識別碼或追蹤資訊? | 五個限定區段;若未出現則標記未知 |
## 4. 候選元件與責任
下表僅依路徑名稱建立查證假設,不代表已確認的架構。
| 候選元件 | 待確認責任 | 不可先行假設 | Source |
|---|---|---|---|
| `app/api/orders/route.ts` | 接收訂單建立請求及產生 HTTP 回應 | 認證方式、HTTP 方法、狀態碼 | [route.ts:12-40](https://github.com/acme/shop/blob/main/app/api/orders/route.ts#L12-L40) |
| `lib/orders.ts` | 協調訂單建立邏輯 | 交易邊界、驗證規則、事件發布方式 | [orders.ts:8-61](https://github.com/acme/shop/blob/main/lib/orders.ts#L8-L61) |
| `db/schema.ts` | 宣告持久化資料結構 | 資料庫種類、主鍵格式、欄位限制 | [schema.ts:5-32](https://github.com/acme/shop/blob/main/db/schema.ts#L5-L32) |
| `worker/events.ts` | 處理訂單相關事件 | 同步或非同步、重試、冪等策略 | [events.ts:7-44](https://github.com/acme/shop/blob/main/worker/events.ts#L7-L44) |
| `tests/orders.test.ts` | 證明可觀察行為 | 測試框架、完整覆蓋率、未列出的行為 | [orders.test.ts:10-55](https://github.com/acme/shop/blob/main/tests/orders.test.ts#L10-L55) |
## 5. 建議目標流程
此流程是**文件查證順序**,不是既有系統行為:
1. 從 API route 確認請求解析、呼叫目標及 HTTP 回應。
2. 沿著被呼叫函式進入 Orders library,逐步記錄驗證、資料寫入與事件操作。
3. 對照 schema,確認每個寫入欄位的型別、必要性及預設值。
4. 對照 Worker,確認事件的生產者、消費者及失敗處理。
5. 最後以測試判定哪些流程分支已有可執行證據。
## 6. Mermaid 圖型建議
| 優先度 | Mermaid 圖型 | 用途 | 完成條件 |
|---|---|---|---|
| 必要 | `sequenceDiagram` | 呈現請求、應用邏輯、資料寫入及事件處理的時間順序 | 能從程式碼確認每次呼叫及回傳 |
| 必要 | `flowchart` | 呈現輸入驗證、成功與錯誤分支 | 能列出實際條件與狀態碼 |
| 必要 | `erDiagram` | 呈現訂單欄位及資料關聯 | 能從 schema 確認實體、鍵與基數 |
| 建議 | `stateDiagram-v2` | 呈現訂單狀態轉換 | 僅在 schema 或邏輯中存在狀態證據時使用 |
| 建議 | `graph` | 呈現模組責任與依賴方向 | 能從 import 或函式呼叫確認依賴 |
### 6.1 模組查證圖
```mermaid
%%{init: {"theme":"base","themeVariables":{"background":"#161b22","primaryColor":"#2d333b","primaryBorderColor":"#6d5dfc","primaryTextColor":"#e6edf3","lineColor":"#8b949e","tertiaryColor":"#161b22"}}}%%
flowchart LR
API["API route<br>行為待確認"]
ORDERS["Orders library<br>行為待確認"]
DB["Database schema<br>結構待確認"]
WORKER["Event worker<br>行為待確認"]
TESTS["Order tests<br>斷言待確認"]
API -. "呼叫關係待查證" .-> ORDERS
ORDERS -. "寫入關係待查證" .-> DB
ORDERS -. "事件關係待查證" .-> WORKER
TESTS -. "覆蓋範圍待查證" .-> API
TESTS -. "覆蓋範圍待查證" .-> ORDERS
style API fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style ORDERS fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style DB fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style WORKER fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style TESTS fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
```
<!-- Sources: app/api/orders/route.ts:12-40, lib/orders.ts:8-61, db/schema.ts:5-32, tests/orders.test.ts:10-55, worker/events.ts:7-44 -->
所有虛線均表示**待查證關係**,不得在讀取實作前改成已確認的實線依賴。
### 6.2 建立訂單循序圖模板
```mermaid
%%{init: {"theme":"base","themeVariables":{"background":"#161b22","primaryColor":"#2d333b","primaryBorderColor":"#6d5dfc","primaryTextColor":"#e6edf3","lineColor":"#8b949e","actorBkg":"#2d333b","actorBorder":"#6d5dfc","actorTextColor":"#e6edf3","signalColor":"#8b949e","signalTextColor":"#e6edf3"}}}%%
sequenceDiagram
autonumber
participant C as 呼叫端
participant A as API route
participant O as Orders library
participant D as 資料儲存
participant W as Event worker
C-->>A: 請求格式待確認
A-->>O: 呼叫及參數待確認
O-->>D: 寫入行為待確認
O-->>W: 事件交付方式待確認
O-->>A: 回傳型別待確認
A-->>C: HTTP 回應待確認
```
<!-- Sources: app/api/orders/route.ts:12-40, lib/orders.ts:8-61, db/schema.ts:5-32, worker/events.ts:7-44 -->
完成版必須以實際函式名稱、參數、回傳值和同步/非同步邊界取代「待確認」。
### 6.3 分支與錯誤處理圖模板
```mermaid
%%{init: {"theme":"base","themeVariables":{"background":"#161b22","primaryColor":"#2d333b","primaryBorderColor":"#6d5dfc","primaryTextColor":"#e6edf3","lineColor":"#8b949e","tertiaryColor":"#161b22"}}}%%
flowchart TD
START["接收請求"]
PARSE{"解析是否成功?"}
VALID{"業務驗證是否通過?"}
WRITE{"資料寫入是否成功?"}
EVENT{"是否存在事件步驟?"}
SUCCESS["成功回應:待確認"]
ERROR["錯誤回應:待確認"]
START --> PARSE
PARSE -- "條件待確認" --> VALID
PARSE -- "錯誤映射待確認" --> ERROR
VALID -- "條件待確認" --> WRITE
VALID -- "錯誤映射待確認" --> ERROR
WRITE -- "成功行為待確認" --> EVENT
WRITE -- "錯誤映射待確認" --> ERROR
EVENT -- "存在且成功" --> SUCCESS
EVENT -- "不存在或處理方式待確認" --> SUCCESS
style START fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style PARSE fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style VALID fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style WRITE fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style EVENT fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style SUCCESS fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
style ERROR fill:#2d333b,stroke:#6d5dfc,color:#e6edf3
```
<!-- Sources: app/api/orders/route.ts:12-40, lib/orders.ts:8-61, tests/orders.test.ts:10-55, worker/events.ts:7-44 -->
圖中的解析、驗證、寫入與事件節點是規劃中的查證面向;若限定程式碼沒有對應步驟,完成版應刪除該節點。
### 6.4 狀態圖採用條件
```mermaid
%%{init: {"theme":"base","themeVariables":{"background":"#161b22","primaryColor":"#2d333b","primaryBorderColor":"#6d5dfc","primaryTextColor":"#e6edf3","lineColor":"#8b949e"}}}%%
stateDiagram-v2
[*] --> EvidenceCheck
EvidenceCheck --> OmitDiagram: 未發現訂單狀態
EvidenceCheck --> DocumentStates: schema 或邏輯存在狀態證據
DocumentStates --> VerifyTransitions: 列出每個轉換的程式碼位置
VerifyTransitions --> [*]
OmitDiagram --> [*]
```
<!-- Sources: lib/orders.ts:8-61, db/schema.ts:5-32, tests/orders.test.ts:10-55, worker/events.ts:7-44 -->
若限定區段沒有明確狀態欄位或轉換邏輯,不應為了完整性虛構訂單生命週期。
## 7. 待完成查證表
| 問題 | 查證位置 | 記錄格式 |
|---|---|---|
| API 接受哪種 HTTP 方法? | `route.ts:12-40` | 方法名稱與引用行 |
| 請求包含哪些欄位? | `route.ts:12-40`、`orders.ts:8-61` | 欄位、型別、必要性 |
| 驗證發生在哪一層? | `route.ts:12-40`、`orders.ts:8-61` | 條件、錯誤及引用行 |
| 訂單如何寫入? | `orders.ts:8-61`、`schema.ts:5-32` | 呼叫、欄位映射、交易邊界 |
| 是否發布或處理事件? | `orders.ts:8-61`、`events.ts:7-44` | 事件名稱、payload、觸發時機 |
| 如何處理重複請求或事件? | `orders.ts:8-61`、`events.ts:7-44` | 冪等鍵或明確標記「未見證據」 |
| 哪些錯誤已被測試? | `orders.test.ts:10-55` | 輸入、預期結果、引用行 |
| 資料與事件失敗是否可能不一致? | `orders.ts:8-61`、`events.ts:7-44` | 已證明機制或「未知」 |
## 8. 完成標準
| 檢查項目 | 標準 |
|---|---|
| 可追溯性 | 每項實作敘述均附指定行號連結 |
| 事實與建議 | 「程式碼現況」和「改善建議」分開標示 |
| 流程圖 | 每條箭頭均可對應函式呼叫或資料操作 |
| API 契約 | 僅記錄限定區段可證明的輸入、輸出及狀態碼 |
| 資料模型 | 僅記錄 schema 明確宣告的欄位與限制 |
| 事件處理 | 未見重試、冪等或交易證據時明確標記未知 |
| 測試 | 不將未出現在限定測試區段的案例描述成已覆蓋 |
## 9. References
- [app/api/orders/route.ts:12-40](https://github.com/acme/shop/blob/main/app/api/orders/route.ts#L12-L40)
- [lib/orders.ts:8-61](https://github.com/acme/shop/blob/main/lib/orders.ts#L8-L61)
- [db/schema.ts:5-32](https://github.com/acme/shop/blob/main/db/schema.ts#L5-L32)
- [tests/orders.test.ts:10-55](https://github.com/acme/shop/blob/main/tests/orders.test.ts#L10-L55)
- [worker/events.ts:7-44](https://github.com/acme/shop/blob/main/worker/events.ts#L7-L44)
## 10. Related Pages
限定證據未提供其他 Wiki 頁面或文件路徑,因此目前無法建立可靠的交叉連結。