# API design
## Data Types
ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON
- string
- number
- object
- an array
- boolean
if optional append '?' at end, e.g. string?
## Global Exceptions
[401] 尚未登入
```javascript=
{
message: 'Unauthorized'
}
```
[403] 已登入但權限不足
```javascript=
{
message: 'Forbidden'
}
```
[400] 尚未啟動
```javascript=
{
message: 'Unactivate'
}
```
## Authentication
### 登入
POST /api/auth/login
request body payload
```javascript=
{
account: 'kellly', // string
password: '12345678' // string
}
```
[200] success
```javascript=
{
accessToken: 'your_access_token' // string
}
```
[400] 帳號密碼錯誤
```javascript=
{
message: 'Bad request' // string
}
```
## Activate
### 傳送啟動碼
POST /api/activate
request body payload
```javascript=
{
serial: '1111-2222-3333-4444' // string
}
```
[200] success
```javascript=
{
message: 'Activate Success!' // string
}
```
[400] error
```javascript=
{
message: 'Activate Failed!' // string
}
```
## Users
[GET] /api/users
RESTful

[200] success
```javascript=
{
message: 'OK',
data: [
{
account: 'kellly', // string
lastModifierTime: "2022-12-13T13:16:56.007Z", // string?
role: 'admin', // string
active: true // bool
},
{
account: 'kellly',
lastModifierTime: "2022-12-13T13:16:56.007Z",
role: 'admin',
active: true
},
]
}
```
[204] no data
```javascript=
{
message: 'ok',
data: []
}
```
# Create User
[POST] /api/users
payload
```javascript
{
account: 'kelly',
password: '12345678',
active: true,
permissions: {
}
}
```
[200]
```javascript=
{
message: 'ok',
}
```
[400]
```javascript=
{
message: 'need password',
}
```
[401]
```javascript=
{
message: 'unauthorized',
}
```
[403]
```javascript=
{
message: 'forbidden',
}
```
# Update User
[POST] /api/users/:account
payload
```javascript
{
password: '',
active: true,
permissions: {
}
}
```
[200]
```javascript=
{
message: 'ok',
}
```
[401]
```javascript=
{
message: 'unauthorized',
}
```
[403]
```javascript=
{
message: 'forbidden',
}
```
