---
# System prepended metadata

title: API for /public/console/app-dashboard.html
tags: [v1]

---

---
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 是否有重複，如果將來量大，改成只給特定的筆數，判斷機制就需要重新設計
    
* 問題: 現在是否需要在後端再驗證一次是否有重複邀請
* 解決: 前後端皆有驗證