## 新增表格紀錄
### 查詢
```graphql=
mutation insert($table: String!, $data: [InsertRecord!]!) {
insert(table: $table, data: $data)
}
```
### 參數
| 參數名稱 | 是否必填 | 備註 |
| ------- | ------ | ---- |
| table | 是 | 表格名稱 |
| data | 是 | 要新增的紀錄,支援批次新增。|
### 回傳值
新增紀錄後將回應一個數值陣列,內容是被新增紀錄的 id 值
### 範例
查詢: 新增一個會員
```graphql=
mutation insert($table: String!, $data: [InsertRecord!]!) {
insert(table: $table, data: $data)
}
```
參數 (Variables 的形式)
```json=
{
"table": "member",
"data": [
{
"bodyFields": [
{
"fieldName": "username",
"valueType": "STRING",
"string": "Mary"
},
{
"fieldName": "age",
"valueType": "NUMBER",
"number": 33
}
],
"lineRows": []
}
]
}
```
結果
```json=
{
"data": {
"mutationResult": [14]
}
}
```
## 更新表格紀錄
### 查詢
```graphql=
mutation update($table: String!, $data: [UpdateRecord!]!) {
update(table: $table, data: $data)
}
```
### 參數
| 參數名稱 | 是否必填 | 備註 |
| ------- | -------- | ------- |
| table | 是 | 表格名稱 |
| data | 是 | 要更新的紀錄,支援批次更新。|
### 回傳值
更新紀錄後將回應一個數值陣列,內容是被更新紀錄的 id 值
### 範例
查詢: 更新一個會員
```graphql=
mutation update($table: String!, $data: [UpdateRecord!]!) {
update(table: $table, data: $data)
}
```
參數 (Variables 的形式)
```json=
{
"table": "member",
"data": [
{
"keyName": "username",
"keyValue": "Mary",
"bodyFields": [
{
"fieldName": "age",
"valueType": "NUMBER",
"number": 23
}
]
}
]
}
```
結果
```json=
{
"data": {
"mutationResult": [14]
}
}
```
## 查詢表格紀錄
查詢表格紀錄,可以篩選需要的資料。
### 查詢
```graphql=
query ($offset: Int, $limit: Int, $sorting: FindSorting, $filters: [FindFilter!]) {
findSomeTable(offset: $offset, limit: $limit, sorting: $sorting, filters: $filters) {
body { field1 field2 }
}
}
```
端點名稱使用的固定格式是 `findXXX` 其中 XXX 是表格的英文名稱,並且首字大寫。例如一個表格名稱為 `posmember` ,查詢的名稱就是 `findPosmember`
### 參數
| 參數名稱 | 是否必填 | 備註 |
| ------- | ------ | ------- |
| filters | | 設定一些篩選的條件<br>1. 可以傳入複數個篩選器,篩選器之間的關係為 **聯集(or)**<br>2. 篩選器條件與條件間關係為 **交集(and)**<br>3. 部分條件可以輸入多個查詢值,此時查詢值之間的關係為 **聯集(or)** |
| sorting | | 將紀錄以某個欄位做排序。1 代表升冪排序;-1 代表降冪排序 |
| limit | | 限制回傳紀錄的數量。預設是 100 筆 |
| offset | | 頁偏移量,通常使用在分頁,依據當前使用的 limit 做分頁偏移。<br>limit=50, offset=0 相當於取得第 1 ~ 50 筆資<br>limit=50, offset=1 相當於取得第 51 ~ 100 筆資料<br>以此類推 |
#### 篩選範例 1
查詢會員姓名為 `使用者` 且 手機號碼為 `+886987654321` 或 `+886900000000`的會員資料
```json=
{
"filters": [
{
"bodyConditions": [
{
"fieldName": "displayName",
"valueType": "STRING",
"string": "使用者",
"operator": "in"
},
{
"fieldName": "mobile",
"valueType": "STRING",
"string": "+886987654321",
"operator": "in"
},
{
"fieldName": "mobile",
"valueType": "STRING",
"string": "+886900000000",
"operator": "in"
},
]
}
],
}
```
#### 篩選範例 2
查詢符合以下條件的會員
1. 手機號碼為 `+886987654321` 且 會員姓名為 `使用者1`
2. 手機號碼為`+886900000000` 且 會員姓名為 `使用者2`
```json=
{
"filters": [
// 第一組 filter
{
"bodyConditions": [
{
"fieldName": "mobile",
"valueType": "STRING",
"string": "+886987654321",
"operator": "in"
},
{
"fieldName": "displayName",
"valueType": "STRING",
"string": "使用者1",
"operator": "in"
},
]
},
// 第二組 filter
{
"bodyConditions": [
{
"fieldName": "mobile",
"valueType": "STRING",
"string": "+886900000000",
"operator": "in"
},
{
"fieldName": "displayName",
"valueType": "STRING",
"string": "使用者2",
"operator": "in"
},
]
},
],
}
```
### 回傳值
更新紀錄後將回應一個數值陣列,內容是被更新紀錄的 id 值
### 範例
查詢: 找出大於等於 20 歲的會員,只取前十筆,以會員名稱倒序輸出
```graphql
query ($offset: Int, $limit: Int, $sorting: FindSorting, $filters: [FindFilter!]) {
findPosMember(offset: $offset, limit: $limit, sorting: $sorting, filters: $filters) {
body {
username
age
}
}
}
```
參數 (Variables 的形式)
```json=
{
"offset": 0,
"limit": 10,
"sorting": {
"field": "body.username",
"direction": -1
},
"filters": [
{
"bodyConditions": [
{
"fieldName": "age",
"valueType": "NUMBER",
"number": 20,
"operator": "gte"
}
]
}
]
}
```
結果
```json=
{
"data": {
"findPosmember": [
{
"body": {
"username": "Zypher",
"age": 21
}
},
{
"body": {
"username": "James",
"age": 23
}
},
]
}
}
```
## 呼叫表格函數
每個表格可能有一些已預先定義好的動作,稱為表格函數,透過執行 call 可以執行這些動作。
### 查詢
```graphql=
mutation call($table: String!, $name: String!, $argument: String!) {
call(table: $table, name: $name, argument: $argument)
}
```
### 參數
| 參數名稱 | 是否必填 | 備註 |
| ------- | -------- | ------- |
| table | 是 | 表格名稱 |
| name | 是 | 表格函數名稱 |
| argument | 是 | 函數的引數,內容依照各表格定義。JSON strinify 後傳入 |
### 回傳值
呼叫後將回傳一個字串,內容依照各表格定義
### 範例
查詢: 計算會員幸運數
```graphql
mutation call($table: String!, $name: String!, $argument: String!) {
call(table: $table, name: $name, argument: $argument)
}
```
參數 (Variables 的形式)
```json=
{
"table": "member",
"name": "計算幸運數",
"argument": "{\"username\":\"John\"}}"
}
```
結果
```json=
{
"data": {
"call": "{\"body\":{\"luckyNumber\": 7}}"
}
}
```
## API 串接測試
僅提供測試串接使用,相關欄位與函式不具有特殊意義
### 表格欄位範例
- 測試表格名: magentotest
- 表頭與表身欄位 (findMagentotest)
| 表頭欄位名稱 | 中文名稱 | 數值類型 | 新增屬性 | 更新屬性 |
| ------------ | ------- | ----------------------------- | -------- | -------- |
| name | 會員編號 | 字串 | N | R |
| displayName | 會員姓名 | 字串 | R | I |
| email | 電子郵件 | 字串(可能為空值) | O | U |
| gender | 性別 | 字串列舉值 `MALE,FEMALE,OTHERS` | R | U |
| birth | 生日 | 日期,ISO 字串格式 | R | U |
| height | 身高 | 浮點數 | O | U |
| age | 年齡 | 整數 | O | U |
| isNative | 本國人 | 布林值 | O | U |
| 表身 | 中文名稱 | 表身資料屬性 |
| ---- | -------- | ------------ |
| tag | 標籤 | F |
| 所屬表身 | 表身欄位 | 中文名稱 | 數值類型 | 新增屬性 | 更新屬性 |
| -------- | -------- | -------- | -------- | -------- | -------- |
| tag | text | 標籤文字 | 字串 | R | I |
- 客製化函式
| 所屬表格 | 函式名稱 | 輸入參數 | 回傳值 |
| ----------- | -------- | ----------------- | ------ |
| magentotest | 領取獎勵 | 見 `領取獎勵參數` | 字串 |
註:回傳值一律為 JSON 字串,必須經過轉換才能取得真正的回傳值
`領取獎勵參數`:
```JSON=
{
"body": {
"customArg": "王小明"
},
"lines": {
"tags": [{
"text": "標籤"
}]
}
}
```
### 表格欄位與表身屬性說明
- 欄位新增屬性
- N = 無須填寫
- R = 必填
- O = 選填
- 更新欄位屬性
- R = 唯讀,無法修改
- I = 新增後無法更新
- U = 可更新
- 表身資料屬性
- F = 可隨意更新指定表身資料
- R = 僅能讀取指定表身資料,無法新增、更新、刪除
- U = 僅可對指定表身已存在的資料做更新,無法新增、刪除
- P = 可對指定表身資料新增、更新,無法刪除
- D = 僅可對指定表身資料做刪除
- I = 只有在建立資料時可設定表身資料,建立後無法新增、更新、刪除
| 表身屬性 | 讀取 | 初始建立 | 新增 | 移除 | 更新 |
| -------- | ---- | -------- | ---- | ---- | ---- |
| F | O | O | O | O | O |
| R | O | X | X | X | X |
| U | O | O | X | X | O |
| P | O | O | O | X | O |
| D | O | O | X | O | X |
| I | O | O | X | X | X |