iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Modern Web

用 LINE OA 打造中小企業訂單系統:從零開始的 30 天實作紀錄系列 第 13

讓訂單會呼吸:訂單狀態管理設計與實作

  • 分享至 

  • xImage
  •  

昨天我們完成了「新訂單通知」,店家能即時收到顧客下單提醒。

但訂單不是單純存起來就結束,還需要隨著處理流程而變化。
例如:等待處理(Pending)、製作中(In Progress)、完成(Completed)。

今天我們要在系統中加入訂單狀態管理,讓店家能透過 API 更新訂單進度,並在資料庫中維護清楚的狀態紀錄,為之後的通知與查詢功能打下基礎。


為什麼需要狀態管理?

  • 顧客下單後 → 預設是 Pending

  • 店家開始處理 → 改為 In Progress

  • 訂單完成 → 更新為 Completed

  • 沒有狀態管理,訂單只是死資料,無法反映真實流程。


Schema 回顧

在 Day 8 定義的 OrderSchema 已包含狀態欄位:

status: {
  type: String,
  enum: ['Pending', 'In Progress', 'Completed'],
  default: 'Pending',
  index: true
}

這樣設計的好處:

  • 有效避免錯誤值(例如 "Done"、"Finish")被寫進資料庫。

  • 支援索引,方便快速查詢特定狀態的訂單。


API 設計

  • EndpointPATCH /orders/:id/status

  • Request body{ status: 'In Progress' }

  • 功能:更新指定訂單的狀態。

  • 驗證:輸入值必須符合 enum 定義。


資料流示意

https://ithelp.ithome.com.tw/upload/images/20250927/20178868OKOZewZ4xL.png


程式碼範例

// routes/orders.js

// 更新訂單狀態
router.patch("/:id/status", async (req, res) => {
  try {
    const { status } = req.body;
    const validStatus = ["Pending", "In Progress", "Completed"];
    if (!validStatus.includes(status)) {
      return res.status(400).json({ success: false, message: "無效的狀態值" });
    }

    const order = await Order.findByIdAndUpdate(
      req.params.id,
      { status },
      { new: true } // 回傳更新後的資料
    );

    if (!order) {
      return res.status(404).json({ success: false, message: "找不到訂單" });
    }

    res.json({ success: true, order });
  } catch (err) {
    console.error(err);
    res.status(500).json({ success: false, message: "更新訂單狀態失敗" });
  }
});

測試看看

大家可以選擇自己熟悉的工具來發 Request,我的範例還是會以 Postman 為主。

首先可以先至 MongoDB Compass 選擇一筆前幾天我們從 Line 建立的訂單,並將其 "_id" 填入 endpoint 的 ":id" 位置。
https://ithelp.ithome.com.tw/upload/images/20250927/20178868TAHiuHaFtA.png

再來發 PATCH request 前,記得要將 Body 填上去,填入要變更成的訂單狀態。
https://ithelp.ithome.com.tw/upload/images/20250927/20178868sY2wqahKYI.png

發出 Request 後,更新 MongoDB Compass 的介面,就可以發現剛剛所填的訂單已經更改為我們在 request body 所填入的狀態了!
https://ithelp.ithome.com.tw/upload/images/20250927/20178868nCn8ml2Xc9.png


下一步:通知顧客

今天我們專注在「後端狀態管理」。明天(Day 14)將進一步實作「顧客查詢訂單狀態」,並在狀態變更時推播通知,讓顧客能即時追蹤訂單進度。


重點回顧

  • 訂單管理的核心在於「狀態」,能反映現實流程。

  • API 設計需嚴格驗證,避免寫入無效狀態。

  • 狀態管理是通知與查詢的基礎,讓訂單「會呼吸」。


上一篇
不再漏單!自動推播新訂單到管理者群組
下一篇
顧客也要安心:訂單狀態查詢與回覆訊息
系列文
用 LINE OA 打造中小企業訂單系統:從零開始的 30 天實作紀錄15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言