iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
0
Modern Web

NestJs 讀書筆記系列 第 23

實戰 - 商業邏輯與資料庫

  • 分享至 

  • xImage
  •  

商業邏輯與資料庫

Schema 完成後就可以開始把邏輯部分補完
這個主題也沒有太複雜的邏輯
主要只是將資料寫入資料庫以及針對查詢參數查詢出正確的資料

Create Task

直接將前端傳過來的資訊存入資料庫即可
可以看到狀態並不是由前端設定的,而是直接由後端給一個固定值,這是因為我們定義只要一創建Task,他的狀態一定會是 WAITING
其餘的一些值則是使用 DB 預設值,這部分直接在 Model 設定

createTask(taskData: TaskInput) {
    const newTask = new this.taskModel({ ...taskData, status: 'WAITING'});

    return newTask.save();
}

Update Task

mongoose 提供了方便的函式 findByIdAndUpdate ,給予 id 能直接更新該筆資料
findByIdAndUpdate 回傳的預設值是還未更新的資料,所以如果想回傳更新後的資料就給 { new: true } 參數

updateTask(_id: String, args: UpdateTaskArgs) {
    return this.taskModel.findByIdAndUpdate(_id, {
        ...args,
        updatedAt: new Date
    }, { new: true });
}

Query Task

由於查詢參數不是固定的,所以我們用串接的方式來做查詢
當前端有針對 Status 做過濾時,我們才將 Status 放進查詢中
否則其餘都是預設的查詢結果
skip 以及 limit 是分頁查詢,在 Model 中有給予預設值,避免後續前端沒有給分頁查詢,造成資料庫太大的查詢負擔

queryTasks(args: TaskArgs, status: TaskStatus) {
    const tasks = this.taskModel.find()
        .where('active').equals(true)
        .sort('createdAt')
        .skip(args.start)
        .limit(args.pageSize);

    if (status) {
        tasks.where('status').equals(status)
    }

    return tasks.exec();
}

完成後就能在 Playground 執行
Create Task 成功後也能在資料庫看到寫入結果


上一篇
實戰 - Schema 設計
下一篇
實戰 - 前端切版
系列文
NestJs 讀書筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言