---
title: Configuration Schema
tags: v2
---
[ToC]
## 情境
- 情境 1
-
- light / dark mode
- 情境 2
-
- 封存整個 project
- 情境 3
-
- 切換語言, currency, 顯示時間 Use relative times
For example: 30 minutes ago.
- 情境 4
-
- email 通知
- 情境 5
-
- 開啟 api-key 給別人使用
- 情境 6
-
- read only
- 情境 7
-
- 設定合約地址
- 情境 8
-
- 上傳/下載 限制
## 預計做法
### 將設定檔分成兩種
1. 前端顯示用, 呈現要設定的 title, description, option, 將資料寫進一個 JSON 檔
2. 在資料庫儲存設定過後的值
### JSON 檔依照 acccount / project / system 做切分
- account_config.json
- project_config.json
- system_config.json
### JSON 檔格式
- project_config.json
```
格式
{
title: string
description: string
category_key: NFT_CREATOR_V2
key: NFT_CREATOR_V2_CONTRACT
display: false
default_value: []
},
Example 1
{
title: nft contract
description: set your nft contract address
category_key: NFT_CREATOR_V2
key: NFT_CREATOR_V2_CONTRACT
display: false
default_value: []
},
Example 2 account_config.json
{
title: currency display
description: what kind of currency would show on the page
category_key: PREFERENCE
key: PREFERENCE_CURRENCY
display: true
default_value: []
},
Example 3
{
title: upload whitelist
description: only one the whitelist can upload data to the project
category_key: WHITELIST
key: WHITELIST_UPLOAD
display: true
default_value: []
}
```
### DB Schema
```
格式
{
category_key: NFT_CREATOR_V2
key: NFT_CREATOR_V2_CONTRACT,
value: []
project_id: ObjejctId,
account_id: ObjectId,
enable: true
}
```
### 規則
- 在根據 key 拿資料的時候, 看到 key 就應該知道要拿到什麼資料
- 例如 IPFS_ISENCRYPT, 看到就知道會是一個 boolean 值, 所以拿到就會做相對應的操作
- NFT_MINT_START_DATE, 看到就知道是 date
### 0615 筆記
- 暫時不要管前端顯示畫面, 因為前端顯示的畫面跟後端存資料的方式不一樣
- 後端存 DB 就用一個叫 value 的 array 去接值, 因為我可以透過 key 的名字去解析他
- boolean 就存成 string 的 0 or 1 ex: ['0']
### 設定檔
- 目前我將設定檔切成 3 份, 每一份檔案都要有預設值
- system_config 就是固定的, 後端不會有存值
- account_config, project_config 是可以做更改的, 所以要在 DB 存資料
### 待辦清單
- 畫架構圖
- 定義規則(key 命名, 使用方法...)