跳至主要内容

SBE Scenario 2: 設計完成流轉(設計中 → 待出貨)

場景描述

設計師完成商品設計並上傳作品照片後,訂單狀態從「設計中」變更為「待出貨」。


Given(前置條件)

系統狀態

  • 當前日期: 2025-11-01
  • 當前租戶: ABC (ABC 花店)
  • 已登入用戶: 王小花 (ROLE_FLORIST)

測試資料

現有訂單

{
"orderId": "ABC-20251101-0002",
"orderNumber": "ABC-20251101-0002",
"tenantId": "ABC",
"status": "in_production",
"customerId": "cust-002",
"assignedFlorist": {
"id": "user-002",
"name": "王小花",
"role": "ROLE_FLORIST"
},
"deliveryDate": "2025-11-03",
"createdAt": "2025-11-01T09:00:00Z"
}

When(執行操作)

步驟 1: 進入訂單詳情頁

  • 設計師「王小花」進入工作列表
  • 點擊訂單 ABC-20251101-0002
  • 當前狀態顯示為「設計中」

步驟 2: 上傳作品照片

  • 設計師點擊「上傳作品照片」按鈕
  • 選擇 3 張照片(photo1.jpg, photo2.jpg, photo3.jpg)
  • 系統上傳照片至雲端儲存(S3)
  • 照片 URL 儲存至訂單

步驟 3: 標記為完成

  • 設計師點擊「標記為完成」按鈕
  • 系統顯示確認對話框: 「確定已完成設計並準備出貨嗎?」
  • 設計師點擊「確定」

Then(預期結果)

API 請求

端點: PUT /api/v1/orders/ABC-20251101-0002/status

Request Body

{
"newStatus": "ready_for_delivery",
"photoUrls": [
"https://s3.example.com/ABC/portfolios/ABC-20251101-0002/photo1.jpg",
"https://s3.example.com/ABC/portfolios/ABC-20251101-0002/photo2.jpg",
"https://s3.example.com/ABC/portfolios/ABC-20251101-0002/photo3.jpg"
]
}

Response Body (200 OK)

{
"orderId": "ABC-20251101-0002",
"oldStatus": "in_production",
"newStatus": "ready_for_delivery",
"updatedAt": "2025-11-01T14:30:00Z",
"updatedBy": {
"userId": "user-002",
"userName": "王小花",
"role": "ROLE_FLORIST"
},
"message": "訂單狀態已更新為「待出貨」"
}

資料庫變更

1. 更新 orders 表

UPDATE orders
SET status = 'ready_for_delivery',
work_photos = '["photo1.jpg", "photo2.jpg", "photo3.jpg"]',
design_completed_at = '2025-11-01T14:30:00Z',
updated_at = '2025-11-01T14:30:00Z'
WHERE order_id = 'ABC-20251101-0002';

2. 新增狀態歷史記錄

{
"id": "history-002",
"orderId": "ABC-20251101-0002",
"tenantId": "ABC",
"oldStatus": "in_production",
"newStatus": "ready_for_delivery",
"timestamp": "2025-11-01T14:30:00Z",
"operatorId": "user-002",
"operatorName": "王小花",
"operatorRole": "ROLE_FLORIST",
"description": "上傳作品照片並標記完成",
"metadata": {
"photoCount": 3
}
}

通知觸發

1. Email 通知(發送給客戶)

{
"to": "customer@example.com",
"subject": "ABC 花店 - 訂單設計完成 ABC-20251101-0002",
"body": "您的訂單已完成設計,即將配送。"
}

2. 內部通知(發送給送貨員)

{
"to": "delivery-team@abc-ROLE_FLORIST.com",
"subject": "新訂單待出貨 ABC-20251101-0002",
"body": "訂單 ABC-20251101-0002 已完成設計,請安排配送。"
}

驗證檢查清單

狀態流轉

  • 訂單狀態從「設計中」變更為「待出貨」
  • 作品照片 URL 正確儲存
  • 設計完成時間正確記錄

照片管理

  • 照片上傳至雲端儲存成功
  • 照片數量至少 1 張
  • 照片 URL 可訪問

通知系統

  • 發送通知給客戶
  • 發送通知給送貨員
  • 通知內容正確

錯誤場景測試

錯誤場景 1: 未上傳照片

  • 操作: 點擊「標記為完成」但未上傳照片
  • 預期結果:
    • 前端驗證失敗
    • 錯誤訊息: 「請先上傳至少 1 張作品照片」

最後更新: 2025-11-03