後端實作:Header 上的公司名稱判斷問題
===
修改公司名稱 Debug 流程圖1
---
where is the issue:
```flow
st=>start: 開始
e=>end: 結束
op=>operation: /admin/company
op2=>operation: 公司顯示名稱修改
cond=>condition: header?
cond2=>condition: ajax?
op3=>operation: other ajax
st->op->op2->cond
op3->e
cond(yes)->e
cond(no)->cond2
cond2(yes)->e
cond2(no)->op3
```
==:pushpin:fix ajax 沒 error 但 fail 後,仍 set company displayname 的 cookie==
---
### commit id: ab5470649ab3d6f5940013a51936d40ff5399e56
error === [updateCompanyByCid] Calling Company_upsert_put_Companies failed;
```
{ name: 'DynogelsUpdateError',
status: 500,
message: 'Schema validation error while updating item in table 104Pro_Company: {"update":{"0":{"message":"\\"IsTesting\\" is not allowed","path":["IsTesting"],"type":"object.allowUnknown","context":{"child":"IsTesting","key":"IsTesting","label":"IsTesting"}},"1":{"message":"\\"Tags\\" is not allowed","path":["Tags"],"type":"object.allowUnknown","context":{"child":"Tags","key":"Tags","label":"Tags"}}}}',
detail: { update: { '0': [Object], '1': [Object] } },
stack: 'DynogelsUpdateError: Schema validation error while updating item in table 104Pro_Company: {"update":{"0":{"message":"\\"IsTesting\\" is not allowed","path":["IsTesting"],"type":"object.allowUnknown","context":{"child":"IsTesting","key":"IsTesting","label":"IsTesting"}},"1":{"message":"\\"Tags\\" is not allowed","path":["Tags"],"type":"object.allowUnknown","context":{"child":"Tags","key":"Tags","label":"Tags"}}}}\n at module.exports.Table.update (/opt/platform_ds-334/node_modules/dynogels/lib/table.js:300:30)\n at Function.wrapper [as update] (/opt/platform_ds-334/node_modules/dynogels/node_modules/lodash/lodash.js:4968:19)\n at DynamoDB.updateAttributes (/opt/platform_ds-334/_support/loopback-connector-dynamodb/lib/dynamodb.js:1302:11)\n at invokeConnectorMethod (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:172:21)\n at /opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:2938:15\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:178:5)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)' }
```
but refresh page:
req.user.company displayName
蘭XXXXXXX______股份有限公司
登出再登入後,
req.user.company displayName
蘭XXXXXXX股份有限公司
***
## ==:pushpin:next issue: companyService.updateCompanyByCid==
* company
```
{ cid: '7505',
pro: 'Pro',
invoice: '80688092',
name: '環XXXXXXX股份有限公司',
searchKey: '80688092_80688092000_undefined_環XXXXXXX股份有限公司',
displayName: '蘭XXXXXXX__股份有限公司',
area: 6001003001,
address: '民XXXXXXX8巷6號4樓',
industryCategory: 1003002013,
empCount: '12',
capital: '100000',
principal: '江素芬',
isOpen: 0,
isPay: 1,
payDate: 1532077572586,
vipCustNo: '80688092000',
mdmKey: '1112191966',
erpCustNo: '1112191966',
createDate: 1470317860000,
updateDate: 1545123776537,
isTesting: true,
tags: [ '1', '2', '27' ],
phonearea: '',
phone: '',
faxarea: '',
fax: '' }
```
* 印convertObjectToUpperCamel(company)
```
{ "Cid": "7505",
"Pro": "Pro",
"Invoice": "80688092",
"Name": "環XXXXXXX股份有限公司",
"SearchKey": "80688092_80688092000_undefined_環XXXXXXX股份有限公司",
"DisplayName": "蘭XXXXXXX__股份有限公司",
"Area": 6001003001,
"Address": "民XXXXXXX8巷6號4樓",
"IndustryCategory": 1003002013,
"EmpCount": "12",
"Capital": "100000",
"Principal": "江素芬",
"IsOpen": 0,
"IsPay": 1,
"PayDate": 1532077572586,
"VipCustNo": "80688092000",
"MdmKey": "1112191966",
"ErpCustNo": "1112191966",
"CreateDate": 1470317860000,
"UpdateDate": 1545123776537,
"IsTesting": true,
"Tags": [ "1", "2", "27" ],
"Phonearea": "",
"Phone": "",
"Faxarea": "",
"Fax": "" }
```
修改公司名稱 Debug 流程圖2
---
where is the issue:
```flow
st=>start: 開始
e=>end: 結束
op=>operation: /admin/company
op2=>operation: 公司顯示名稱修改
cond=>condition: DS ajax?
st->op->op2->cond
cond(yes)->e
cond(no)->op2
```
below TODO: DS ajax find one and test result.
http://172.19.7.155:3080/explorer
server/services/impl/company-service.js >
module.exports.updateCompanyByCid >
==app.DataService.Company_upsert_put_Companies==
進DS `modules/doc/api-def.yml` 檔案
搜尋關鍵字 `Company upsert`

其中一個operationId有match,而且是put
再使用其summary 回去 http://172.19.7.155:3080/explorer 的company分類找put的:

就找到了
重新送出後結果一樣:"Schema validation error while updating item in table 104Pro_Company"
```
{
"error": {
"name": "DynogelsUpdateError",
"status": 500,
"message": "Schema validation error while updating item in table 104Pro_Company: {\"update\":{\"0\":{\"message\":\"\\\"IsTesting\\\" is not allowed\",\"path\":[\"IsTesting\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"IsTesting\",\"key\":\"IsTesting\",\"label\":\"IsTesting\"}},\"1\":{\"message\":\"\\\"Tags\\\" is not allowed\",\"path\":[\"Tags\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"Tags\",\"key\":\"Tags\",\"label\":\"Tags\"}}}}",
"detail": {
"update": {
"0": {
"message": "\"IsTesting\" is not allowed",
"path": [
"IsTesting"
],
"type": "object.allowUnknown",
"context": {
"child": "IsTesting",
"key": "IsTesting",
"label": "IsTesting"
}
},
"1": {
"message": "\"Tags\" is not allowed",
"path": [
"Tags"
],
"type": "object.allowUnknown",
"context": {
"child": "Tags",
"key": "Tags",
"label": "Tags"
}
}
}
},
"stack": "DynogelsUpdateError: Schema validation error while updating item in table 104Pro_Company: {\"update\":{\"0\":{\"message\":\"\\\"IsTesting\\\" is not allowed\",\"path\":[\"IsTesting\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"IsTesting\",\"key\":\"IsTesting\",\"label\":\"IsTesting\"}},\"1\":{\"message\":\"\\\"Tags\\\" is not allowed\",\"path\":[\"Tags\"],\"type\":\"object.allowUnknown\",\"context\":{\"child\":\"Tags\",\"key\":\"Tags\",\"label\":\"Tags\"}}}}\n at module.exports.Table.update (/opt/platform_ds-334/node_modules/dynogels/lib/table.js:300:30)\n at Function.wrapper [as update] (/opt/platform_ds-334/node_modules/dynogels/node_modules/lodash/lodash.js:4968:19)\n at DynamoDB.updateAttributes (/opt/platform_ds-334/_support/loopback-connector-dynamodb/lib/dynamodb.js:1302:11)\n at invokeConnectorMethod (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:172:21)\n at /opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/dao.js:2938:15\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at doNotify (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:178:5)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n at Function.ObserverMixin.notifyObserversOf (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n at Function.ObserverMixin._notifyBaseObservers (/opt/platform_ds-334/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)"
}
}
```
使用 `104Pro_Company` 去 DS 搜尋後得他設定好的格式
經比對後,傳入以下值即回傳 200
```
{ "Cid": "7505",
"Pro": "Pro",
"Invoice": "80688092",
"Name": "環XXXXXXX股份有限公司",
"SearchKey": "80688092_80688092000_undefined_環XXXXXXX股份有限公司",
"DisplayName": "蘭XXXXXXX__股份有限公司",
"Area": 6001003001,
"Address": "民XXXXXXX8巷6號4樓",
"IndustryCategory": 1003002013,
"EmpCount": 12,
"Capital": 100000,
"Principal": "江素芬",
"IsOpen": 0,
"IsPay": 1,
"PayDate": 1532077572586,
"VipCustNo": "80688092000",
"MdmKey": "1112191966",
"ErpCustNo": "1112191966",
"CreateDate": 1470317860000,
"UpdateDate": 1545123776537,
"Phonearea": "",
"Phone": "",
"Faxarea": "",
"Fax": "" }
```
後來去 DS ``` server/models/company_new.json ```
schema新增值:
```
"Tags": {
"type": "array",
"required": false,
"description": "Tags"
},
"IsTesting": {
"type": "boolean",
"required": false,
"description": "新公司測試"
}
```
然後再送出平台原本的 json 就可以了。