Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Current »

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
    }
}

  • No labels