在完成了 Echo Bot 後,我們已經能讓 LINE OA 與伺服器互動。但一個訂單系統的靈魂不只是「訊息收發」,而是 資料的設計與管理。今天,我們要從兩個最核心的角色開始 —— 使用者 (User) 與 訂單 (Order)。
在軟體開發中,資料結構往往決定了系統的可維護性:
決定能存什麼:沒有設計好的欄位,後續就很難滿足業務需求。
決定 API 長什麼樣子:例如「建立訂單」API,需要先知道訂單包含哪些欄位。
避免爛尾:一開始想清楚資料結構,可以避免系統長歪、難以擴充。
所以,在進入訂單流程前,必須先把 Schema 設計清楚。
npm install mongoose
Mongoose 是一個 MongoDB 的 ODM(Object Data Modeling)工具,讓我們能在 Node.js 中用「物件導向」去定義資料結構、做欄位驗證、建立關聯,並簡化 CRUD。
每一張訂單都需要對應到一位顧客。最低需求是:
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
會自動幫你加上createdAt
與updatedAt
。
一張訂單通常包含「誰下單、買了什麼、狀態是什麼」。
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 分開:
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
Windows/Mac/Linux 都有安裝方式。
安裝 MongoDB Compass
當安裝 MongoDB 時,其中一個流程就會問你是否要安裝 MongoDB Compass,這裡直接勾選起來就可以了。
使用 MongoDB Compass
GUI 工具,適合快速檢查資料。
連線字串範例:mongodb://127.0.0.1:27017/line-order-system
。
介面就如下方一樣,配色很簡單,我自己蠻喜歡的XD
Connection:伺服器連線入口(如 mongodb://localhost:27017
)。
Database:專案空間(如 line-order-system
)。
Collection:類似 SQL 的 Table(如 users
、orders
)。
Compass 操作流程:
建立 Connection
若連線建立成功左下角會跳出此成功訊息。
點 Create Database,輸入 Database Name:line-order-system
並同時建立 users
collection,因 DB 最少要包含一張表。
再新增一個 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 點選商品下單!