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
를 인자로 갖는다.
Code Block |
---|
@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}
Code Block |
---|
[
{
"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 작성
Code Block |
---|
{
"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 결과
Code Block |
---|
{{protocol}}://{{hostname}}:{{port}}/svc/snack/thumbsUp?_siteId=bestshop&id=119
{
"result": "200",
"resultMessage": "SUCCESS",
"item": {
"id": "119",
"label": "오레오 민트초코",
"name": "오레오 민트초코",
"vendor": "크래프트푸즈,동서식품",
"tags": "민트초코,초코쿠키",
"thumbsUp": 7
}
} |