# Pos 商品相關 API
## 文件異動紀錄
| Date | Description |
| -------- | -------- |
| 2021-08-27 | 初版內容 |
| 2021-10-08 | 1. 增加環境說明<br>2. 調整部分說明方式<br>3. API驗證統一說明 |
---
## API 版本異動紀錄
| API Version | Update Description | Date |
| -------- | -------- | -------- |
| v1 | 初版 API | 2021-08-27 |
---
## 環境
* 測試環境 `https://carguru-shop-uat.kagulu.com`
* 正式環境 `https://shop.carguru.com.tw`
---
## API 驗證
* 新芽端會提供測試環境及正式環境共兩組 API token
* API共用同一環境的token
例如 `https://carguru-shop-uat.kagulu.com/backstage/api/XXX/YYY` 及 `https://carguru-shop-uat.kagulu.com/backstage/api/YYY/ZZZ` 共用測試環境的token
或是 `https://shop.carguru.com.tw/backstage/api/XXX/YYY` 及 `https://shop.carguru.com.tw/backstage/api/YYY/ZZZ` 共用正式環境的token
* 請在 headers 增加 Key
| Key Name | Data Type | Example |
| -------- | -------- | -------- |
| authentication | String | `ABCDEFK5654FEFE4584` |
* 權限驗證錯誤 - API token 不正確 (HttpStatusCode: 401)
```json
{
"status": 401,
"message": "token invalid", // 訊息
"data": null
}
```
---
## `/backstage/api/{API Version}/POS/sync/products`
* Method: `POST`
* 同步`商品`資料 一次限制最多 `1000` 筆資料 超出會回傳 `422` 錯誤訊息而不進行後續同步
* Body
**v1 會強改為下架狀態 故 v1 中 `status` 可忽略**
```json
{
"products": [
{
"mainCategoryCode": "string", // 主分類代碼
"subCategoryCode": "string", // 子分類代碼
"brandCode": "string", // 品牌分類代碼
"code": "string", // 商品代碼 *必填
"name": "string", // 商品名稱
"amount": 0, // 商品金額
"isInstallation": 0, // 是否包含安裝 0: 不含安裝 1: 含安裝
"status": 1 // 商品狀態 0: 下架 1: 上架
}
]
}
```
* Responses
* 成功 (HttpStatusCode: 200)
```json
{
"status": 200, // 200 代表成功
"message": "success", // 訊息
"data": {
"data": {
"create": [
"string"
], // 此次新增的商品代碼集合
"update": [
"string"
] // 此次更新的商品代碼集合
}
}
}
```
* 驗證錯誤 (HttpStatusCode: 422)
```json
{
"status": 422, // 422
"message": "部分資料有缺失", // 錯誤訊息
"data": null
}
```
---
## `/backstage/api/{API Version}/POS/sync/productStocks`
* Method: `POST`
* 同步`商品規格`資料 一次限制最多 `1000` 筆資料 超出會回傳 `422` 錯誤訊息而不進行後續同步
* Body
```json
{
"stocks": [
{
"productCode": "string", // 商品代碼 *必填
"code": "string", // 貨號代碼 *必填
"color": "string", // 顏色
"size": "string", // 規格
"isOut": 0 // 是否補貨中 0: 非補貨中 1: 補貨中
}
]
}
```
* Responses
* 成功 (HttpStatusCode: 200)
```json
{
"status": 200, // 200 代表成功
"message": "success", // 訊息
"data": {
"data": {
"create": [
"string"
], // 此次新增的商品規格代碼集合
"update": [
"string"
] // 此次更新的商品規格代碼集合
}
}
}
```
* 驗證錯誤 (HttpStatusCode: 422)
```json
{
"status": 422, // 422
"message": "部分資料有缺失", // 錯誤訊息
"data": null
}
```
---
## `/backstage/api/{API Version}/POS/sync/mainCategories`
* Method: `POST`
* 同步`商品主分類`資料 一次限制最多 `1000` 筆資料 超出會回傳 `422` 錯誤訊息而不進行後續同步
* Body
```json
{
"categories": [
{
"code": "string", // 分類代碼 *必填
"name": "string" // 分類名稱
}
]
}
```
* Responses
* 成功 (HttpStatusCode: 200)
```json
{
"status": 200, // 200 代表成功
"message": "success", // 訊息
"data": {
"data": {
"create": [
"string"
], // 此次新增的商品主分類代碼集合
"update": [
"string"
] // 此次更新的商品主分類代碼集合
}
}
}
```
* 驗證錯誤 (HttpStatusCode: 422)
```json
{
"status": 422, // 422
"message": "部分資料有缺失", // 錯誤訊息
"data": null
}
```
---
## `/backstage/api/{API Version}/POS/sync/subCategories`
* Method: `POST`
* 同步`商品子分類`資料 一次限制最多 `1000` 筆資料 超出會回傳 `422` 錯誤訊息而不進行後續同步
* body
```json
{
"categories": [
{
"code": "string", // 分類代碼 *必填
"name": "string", // 分類名稱
"upperCategoryCode": "string" // 對應主分類代碼 *必填
}
]
}
```
* Responses
* 成功 (HttpStatusCode: 200)
```json
{
"status": 200, // 200 代表成功
"message": "success", // 訊息
"data": {
"data": {
"create": [
"string"
], // 此次新增的商品子分類代碼集合
"update": [
"string"
] // 此次更新的商品子分類代碼集合
}
}
}
```
* 驗證錯誤 (HttpStatusCode: 422)
```json
{
"status": 422, // 422
"message": "部分資料有缺失", // 錯誤訊息
"data": null
}
```
---
## `/backstage/api/{API Version}/POS/sync/brands`
* Method: `POST`
* 同步`商品品牌`資料 一次限制最多 `1000` 筆資料 超出會回傳 `422` 錯誤訊息而不進行後續同步
* Body
```json
{
"brands": [
{
"code": "string", // 品牌分類代碼 *必填
"name": "string" // 品牌名稱
}
]
}
```
* Responses
* 成功 (HttpStatusCode: 200)
```json
{
"status": 200, // 200 代表成功
"message": "success", // 訊息
"data": {
"data": {
"create": [
"string"
], // 此次新增的品牌分類代碼代碼集合
"update": [
"string"
] // 此次更新的品牌分類代碼代碼集合
}
}
}
```
* 驗證錯誤 (HttpStatusCode: 422)
```json
{
"status": 422, // 422
"message": "部分資料有缺失", // 錯誤訊息
"data": null
}
```