---
# System prepended metadata

title: Final Configuration Document
tags: [v2]

---

---
title: Final Configuration Document
tags: v2
---

# 設定檔文件
[ToC]

## Configuration settings module

這個設置 ( Configuration settings ) 是系統或開發用的內部設定，

而非開放給使用者可以自由設定與更新的偏好設置 (User Preferences) 
=> 未來可能會有

客戶跟我們要求時，由我方『管理人員』去更動，更動方式如下

1. 可以直接調整資料庫
2. 使用 API
3. FiO Admin 管理後台

## 流程圖
![](https://i.imgur.com/Oohtl43.jpg)

## 範例
1.
![](https://i.imgur.com/gge7JEd.jpg)



## 分類
1. system_config
2. project_config
3. account_config


## 規則
### 設定不能重複 
- 關於 project 的設定就必須放在 project_config 裡面
- 關於 account 的設定就必須放在 account_config 裡面
- 關於 system 的設定就必須放在 system_config 裡面
### 每一個設定都有一個 unique 的 "key"
### "Category key" and "key" 命名
- 全大寫, 單字間會用下劃線（ _ ）區隔連接
- key 以 Category key 當開頭, 加上名稱
- 必須讓人一眼可以看出這是要設定什麼, 它的值型態會是什麼
- Example
    - category_key: NFT_CREATOR_V2
    - key: NFT_CREATOR_V2_MINT_WHITELIST
### 存放規則
- 每個類型的設定檔都會有預設值, 預計會存放在 JSON 檔裡, 如果設定有做 "更改" 才會存到 DB 裡
## JSON 檔格式
- value 是一個 string 的 array,
```
    {
        title: string
        description: string
        category_key: NFT_CREATOR_V2
        key: NFT_CREATOR_V2_CONTRACT 
        display: false // 前端是否顯示此設定
        value: []
    }
```

## Database
- 只用一個 table 記錄所有設定
- value 是一個 string 組成的 array
    - 如果是 boolean 就存成 string 的 0 or 1 e.g. ['0']
### DB Schema
```
    {
        category_key: NFT_CREATOR_V2 // required
        key: NFT_CREATOR_V2_CONTRACT // required
        value: []
        project_id: ObjejctId, // optional
        account_id: ObjectId, // optional
        enable: true // default true
    }
```

