---
# System prepended metadata

title: Configuration Schema
tags: [v2]

---

---
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 命名, 使用方法...)