iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Modern Web

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

資料設計的第一步:使用者與訂單模型

  • 分享至 

  • xImage
  •  

在完成了 Echo Bot 後,我們已經能讓 LINE OA 與伺服器互動。但一個訂單系統的靈魂不只是「訊息收發」,而是 資料的設計與管理。今天,我們要從兩個最核心的角色開始 —— 使用者 (User)訂單 (Order)


為什麼先設計資料模型?

在軟體開發中,資料結構往往決定了系統的可維護性:

  • 決定能存什麼:沒有設計好的欄位,後續就很難滿足業務需求。

  • 決定 API 長什麼樣子:例如「建立訂單」API,需要先知道訂單包含哪些欄位。

  • 避免爛尾:一開始想清楚資料結構,可以避免系統長歪、難以擴充。

所以,在進入訂單流程前,必須先把 Schema 設計清楚。


事前準備:套件安裝

npm install mongoose

Mongoose 是一個 MongoDB 的 ODM(Object Data Modeling)工具,讓我們能在 Node.js 中用「物件導向」去定義資料結構、做欄位驗證、建立關聯,並簡化 CRUD。

https://ithelp.ithome.com.tw/upload/images/20250922/20178868LTsC5E5E5N.png


使用者模型 (User)

每一張訂單都需要對應到一位顧客。最低需求是:

  • lineUserId:唯一識別顧客的 ID(LINE 提供)。

  • name / phone:方便聯繫與查詢。

  • 建立時間:有助於日後統計。

範例 Schema(Mongoose):

const userSchema = new mongoose.Schema({
  lineUserId: { type: String, required: true, unique: true },
  name: String,
  phone: String,
}, { timestamps: true });

module.exports = mongoose.model('User', userSchema);

timestamps: true 會自動幫你加上 createdAtupdatedAt


訂單模型 (Order)

一張訂單通常包含「誰下單、買了什麼、狀態是什麼」。

  • userId:對應 User,用 ObjectId 參照。

  • items:商品清單(名稱、數量、單價)。

  • status:訂單狀態,建議用 Enum 管理。

範例 Schema:

const orderItemSchema = new mongoose.Schema({
  productName: { type: String, required: true },
  quantity: { type: Number, required: true, min: 1 },
  price: { type: Number, required: true, min: 0 },
}, { _id: false });

const orderSchema = new mongoose.Schema({
  userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', index: true },
  items: { type: [orderItemSchema], default: [] },
  status: {
    type: String,
    enum: ['Pending', 'In Progress', 'Completed'],
    default: 'Pending',
    index: true
  }
}, { timestamps: true });

module.exports = mongoose.model('Order', orderSchema);

專案結構:Schema 放哪裡?

建議將資料庫連線與 Schema 分開:

line-order-system/
├─ src/
│  ├─ lib/db.js          # MongoDB 連線(Day11會告訴大家如何做)
│  ├─ models/user.model.js
│  ├─ models/order.model.js
│  └─ index.js           # 入口檔
├─ .env                  
└─ package.json

這樣後續在 API 中引用模型會更乾淨:

const User = require('./models/user.model');
const Order = require('./models/order.model');

MongoDB 與 Compass:快速上手

  1. 安裝 MongoDB

  2. 安裝 MongoDB Compass

    當安裝 MongoDB 時,其中一個流程就會問你是否要安裝 MongoDB Compass,這裡直接勾選起來就可以了。

    https://ithelp.ithome.com.tw/upload/images/20250922/20178868mdXnusZWOC.png

  3. 使用 MongoDB Compass

    • GUI 工具,適合快速檢查資料。

    • 連線字串範例:mongodb://127.0.0.1:27017/line-order-system

    介面就如下方一樣,配色很簡單,我自己蠻喜歡的XD
    https://ithelp.ithome.com.tw/upload/images/20250922/20178868yfJYRIEFoo.png

Connection / Database / Collection 差異

  • Connection:伺服器連線入口(如 mongodb://localhost:27017)。

  • Database:專案空間(如 line-order-system)。

  • Collection:類似 SQL 的 Table(如 usersorders)。

Compass 操作流程:

  1. 建立 Connection

    • URI:MongoDB 預設的埠號是 27017
    • 其他選項,各位可以依自己需求調整。
      https://ithelp.ithome.com.tw/upload/images/20250922/201788681sU9yixJir.png

    若連線建立成功左下角會跳出此成功訊息。
    https://ithelp.ithome.com.tw/upload/images/20250922/20178868yJ9xaeAxG5.png

  2. Create Database,輸入 Database Name:line-order-system 並同時建立 users collection,因 DB 最少要包含一張表。

    https://ithelp.ithome.com.tw/upload/images/20250922/20178868KdgCkEsmhV.png

  3. 再新增一個 orders collection。

Connection (mongodb://localhost:27017)
 └─ Database: line-order-system
     ├─ Collection: users
     └─ Collection: orders

大家可以先嘗試看看自己在 MongoDB Compass 建立看看 Connection, Database, Collection,Day 11 即將會告訴各位如何做 伺服器連線 DB 和資料寫入的部分!


今日重點回顧

  • 資料 Schema = 系統骨架:API 與邏輯都依賴它。

  • User 與 Order 是 MVP 核心

  • Compass 是新手好幫手,可視化檢查資料。

  • 先簡單後擴充:商品暫時存在 Order 中,之後再獨立 Product 表。


📌 明天(Day 9),我們會開始設計 Flex Message 商品選單,讓顧客能直接在 LINE 點選商品下單!


上一篇
Hello World!打造第一個 Echo Bot 🎉
下一篇
讓商品直接出現在 LINE!用 Flex Message 打造互動選單 🛒
系列文
用 LINE OA 打造中小企業訂單系統:從零開始的 30 天實作紀錄10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言