--- title: API for /public/console/app-dashboard.html tags: v1 --- # API for /public/console/app-dashboard.html [TOC] 建議 - 假想閱讀文件的人沒有背景知識,先交代一下背景知識 - 將句子精簡,不要有口語、修飾詞等等字出現 # 先備知識 fio = app = S.M.A.R.T. Contract ## MongoDB - Collection: `fio`,`alpha_admin` - field: fio.invitations = [{type: '', status: '', email: '', date: ''}, ...] - type: value of ['user', 'approver'] - status: value of ['pending', 'active', 'reject'] - email: value of ['被邀請人的 email'] - date: value of ['更改日期'] - - field: alpha_admin.invited = [{type: '', fio_id: '', fio_name: '', enable, solution: ''}, ...] - type: value of ['user', 'approver'] - fio_id: value of [fio_id] - fio_name: value of ['fio_name'] - enable: value of [true,false] - solution: value of ['LearningCurve'] ## API API 可以 做到這些事 - User - Add/delete - Approver - Add/delete # 現況 - `api.put('/fio/:id ...)` - 前端拿到 `fio.invitations` 所有資料 => 新增刪除資料後將全部資料傳回後端 => 更新 `fio.invitations` # 遇到問題 - 更新日期 - 新增/刪除一筆資料 => 資料全部更新 => 先前資料的欄位 `fio.invitations[].date` 將被一併蓋過,無法得知分別的更新日期 - 效能不佳 - 假設 `fio.invitaions` 已有 1000 筆資料,新增一筆資料,就要將 1001 筆資料重新傳入`fio.invitations` # 發想 1. 一次做一筆資料 - 一隻 api 新增 - 方便日後加入大量新增與維護 - 一隻 api 刪除 - 方便日後加入刪除多個 2. 大量新增/刪除 (Ivan 表示這個版本還不需要) # 規劃 1. 新增 API - `PUT /fio/:id/invitation` - 新增一筆資料 - 欄位 ``` [ { type: 'user', // user || approver email: 'micky@fio.one' // 被邀請人的 email status: pending // 邀請後一率都是 pending 直到被邀請人接受或拒絕 date: '2021,01,01' // 後端產生 } ] 2. 刪除 API - `DELETE /fio/invitation/:id/:email/:type?/:date/:status` - Mongo.update.pull - input: {fio._id, email, type, date, status} - output: {modifiedCount:.. } - (feature) `DELETE /fio/:fio_id/invitations` - inupt: [{type, email, status, date}, ..] - 移除一筆資料:傳入要刪除的那一筆物件 {type, email, status, date} - 判斷 status - pending - `fio.invitations` 刪除資料 - active - `fio.invitations` 刪除資料 - `alpha_admin.invited` 刪除此筆資料 3. 驗證 code - 0: success - 1: 重複 - others: fail alert error message ## 可能遇到問題 1. 重複邀請 - 目前是將全部`fio.invitations` 資料都給前端,前端在新增邀請時判斷 email 是否有重複,如果將來量大,改成只給特定的筆數,判斷機制就需要重新設計 * 問題: 現在是否需要在後端再驗證一次是否有重複邀請 * 解決: 前後端皆有驗證