Event Type
ICE 내부 특정 NodeType에 정의된 Event를 실행하기 위한 API 유형으로, 다음과 같은 추가적인 항목을 정의한다.
pid | valueType | description |
---|---|---|
tid | REFERENCE | 대상 Node Type |
event | REFERENCE | 대상 노드타입의 실행하기 위한 Event 정의 |
아래는 좋아요 카운트 증가하는 "actionType": "service"
인 EVENT API 구현 사례이다.
Service Class 추가
location : net/ion/ice/services
@Service 어노테이션 추가
@Service("snackService")
Event에 사용할 메서드는 반드시
ExecuteContext
를 인자로 갖는다.
@Service("snackService") public class SnackService { public void increaseCount(ExecuteContext context) { Node node = context.getNode(); node.put("thumbsUp", context.getNode().getIntValue("thumbsUp") + 1); NodeUtils.getNodeService().executeNodeByNode(node, EventService.UPDATE, context.getEvent()); } }
snack Schema에 event 추가
"actionBody": "snackService.increaseCount"
: 작성규칙 {service annotation name}.{method}
[ { "typeId": "nodeType", "tid": "snack", "parentId": "test", "repositoryType": "node", "typeName": "간식", "standaloneIndex": false, "microservice": "test", "propertyTypes": [ { "pid": "id", "name": "ID", "valueType": "STRING", "idable": true, "indexable": true, "labelable": false, "required": true, "idType": "", "orderNo": 10 }, { "pid": "name", "name": "Name", "valueType": "STRING", "idable": false, "indexable": true, "analyzer": "simple", "labelable": true, "required": true, "orderNo": 20 }, { "pid": "vendor", "name": "vendor", "valueType": "STRING", "idable": false, "indexable": true, "analyzer": "code ", "labelable": false, "required": false, "orderNo": 30 }, { "pid": "tags", "name": "tags", "valueType": "STRING", "idable": false, "indexable": true, "analyzer": "code", "labelable": false, "required": false, "orderNo": 40 }, { "pid": "thumbsUp", "name": "따봉", "valueType": "INT", "indexable": true, "defaultValue": 0, "orderNo": 50 } ], "events": [ { "event": "thumbsUpEvent", "name": "thumbs Up Event", "label": "thumbs Up Event", "noneExecute": false, "eventActions": [ { "action": "increaseCount", "actionName": "increaseCount", "actionType": "service", "actionBody": "snackService.increaseCount", "order": 1 } ] } ] } ]
apiConfig
"type": "event"
인 API 작성
{ "typeId": "api", "category": "snack", "apiId": "thumbsUp", "apiName": "좋아요", "method": "GET", "parameters": [ { "parameter": "id", "name": "ID", "valueType": "STRING", "required": true } ], "statistic": true, "aggregation": false, "root": { "configId": "root", "tid": "snack", "type": "event", "allowParams": false, "orderNo": 1, "event": "thumbsUpEvent" } }
API 결과
{{protocol}}://{{hostname}}:{{port}}/svc/snack/thumbsUp?_siteId=bestshop&id=119 { "result": "200", "resultMessage": "SUCCESS", "item": { "id": "119", "label": "오레오 민트초코", "name": "오레오 민트초코", "vendor": "크래프트푸즈,동서식품", "tags": "민트초코,초코쿠키", "thumbsUp": 7 } }