Browse Source

20220817-api get to post

shjung 3 years ago
parent
commit
40949d4e2a

+ 62 - 44
src/main/java/com/tsi/api/server/controller/TscSsipApiController.java

@@ -1,25 +1,21 @@
 package com.tsi.api.server.controller;
 
 import com.tsi.api.server.controller.result.*;
-import com.tsi.api.server.dto.KafkaTokenAuthDto;
-import com.tsi.api.server.dto.KafkaTokenDto;
-import com.tsi.api.server.dto.SystemStatus2Dto;
-import com.tsi.api.server.dto.SystemStatusDto;
+import com.tsi.api.server.dto.*;
 import com.tsi.api.server.error.TscSsipApiErrorCode;
 import com.tsi.api.server.repository.TsiSystemStatusManager;
 import com.tsi.api.server.service.TscSsipApiService;
 import com.tsi.api.server.service.TscSsipKafkaTokenService;
 import com.tsi.api.server.util.ApiUtils;
-import com.tsi.api.server.vo.ApiInvokeVo;
-import com.tsi.api.server.vo.BrokerVo;
-import com.tsi.api.server.vo.KafkaAuthorizedVo;
-import com.tsi.api.server.vo.SystemStatusVo;
+import com.tsi.api.server.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.UUID;
 
 @Slf4j
@@ -42,13 +38,14 @@ public class TscSsipApiController {
         this.tscSsipKafkaTokenService = tscSsipKafkaTokenService;
     }
 
-    @GetMapping(value = {SSIP_API_NODE_INFO}, produces = {"application/json; charset=utf8"})
-    public ResponseEntity<AbstractTscSsipApiResult> getNodeInfo(@PathVariable("apiToken") String apiToken, HttpServletRequest request) {
+    @PostMapping(value = {SSIP_API_NODE_INFO}, produces = {"application/json; charset=utf8"})
+    public ResponseEntity<TscSsipApiResultNodeInfo> getNodeInfo(@PathVariable("apiToken") String apiToken, HttpServletRequest request) {
 
         String apiId = SSIP_API_NODE_INFO;
         String remoteIP = ApiUtils.getRemoteIP(request);
         log.info("{}, {}, {}", apiId, remoteIP, apiToken);
 
+        List<NodeDto> resultData = new ArrayList<>();
         ApiInvokeVo apiInvokeVo = ApiInvokeVo.builder()
                 .apiId(apiId)
                 .apiToken(apiToken)
@@ -57,15 +54,25 @@ public class TscSsipApiController {
                 .build();
 
         try {
-            TscSsipApiErrorCode authorizedInfo = this.tscSsipApiService.getAuthorizedInfo(apiId, apiToken, remoteIP);
-            if (authorizedInfo != TscSsipApiErrorCode.SUCCESS) {
+            TscApiResultCode errorCode = this.tscSsipApiService.getTscAuthorizedInfo(apiId, apiToken, remoteIP);
+            if (errorCode != TscApiResultCode.SUCCESS) {
                 // api token 인증 오류
-                log.error("인증오류: [{}] ==> [{}]: [{}].[{}]" + apiId, remoteIP, apiToken, authorizedInfo.getCode(), authorizedInfo.getMessage());
-                apiInvokeVo.setError(authorizedInfo.getCode());
+                log.error("인증오류: [{}] ==> [{}]: [{}].[{}]" + apiId, remoteIP, apiToken, errorCode.getValue(), errorCode.toString());
+                apiInvokeVo.setError(errorCode.getValue());
                 this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
-                TscSsipApiResultError error = new TscSsipApiResultError(authorizedInfo.getCode(), authorizedInfo.getMessage());
-                return new ResponseEntity<>(error, HttpStatus.UNAUTHORIZED);
+                //TscSsipApiResultError error = new TscSsipApiResultError(authorizedInfo.getCode(), authorizedInfo.getMessage());
+                //return new ResponseEntity<>(new TscSsipApiResultNodeInfo(errorCode, resultData), HttpStatus.UNAUTHORIZED);
+                return new ResponseEntity<>(new TscSsipApiResultNodeInfo(errorCode, resultData), HttpStatus.OK);
             }
+
+            List<NodeVo> nodeInfoList = tscSsipApiService.getNodeInfoList();
+            nodeInfoList.forEach(obj -> {
+                resultData.add(obj.toDto());
+            });
+
+            // 이력저장
+            this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
+            return new ResponseEntity<>(new TscSsipApiResultNodeInfo(errorCode, resultData), HttpStatus.OK);
         }
         catch (Exception e) {
             log.error("getNodeInfo: {}", e.getMessage());
@@ -73,19 +80,19 @@ public class TscSsipApiController {
             TscSsipApiResultError error = new TscSsipApiResultError(TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getCode(), TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getMessage());
             apiInvokeVo.setError(TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getCode());
             this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
-            return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
+            //return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
+            TscApiResultCode errorCode = TscApiResultCode.FAIL_INTERNAL_ERROR;
+            return new ResponseEntity<>(new TscSsipApiResultNodeInfo(errorCode, resultData), HttpStatus.OK);
         }
-        TscSsipApiResultNodeInfo result = new TscSsipApiResultNodeInfo(TscSsipApiErrorCode.SUCCESS.getCode(), TscSsipApiErrorCode.SUCCESS.getMessage());
-        result.setNodes(tscSsipApiService.getNodeInfoList());
-        result.setCount(result.getNodes().size());
 
-        // 이력저장
-        this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
-        return new ResponseEntity<>(result, HttpStatus.OK);
-    }
+//        TscSsipApiResultNodeInfo result = new TscSsipApiResultNodeInfo(TscSsipApiErrorCode.SUCCESS.getCode(), TscSsipApiErrorCode.SUCCESS.getMessage());
+//        result.setNodes(tscSsipApiService.getNodeInfoList());
+//        result.setCount(result.getNodes().size());
+
+     }
 
-    @GetMapping(value = {SSIP_API_BROKER_INFO}, produces = {"application/json; charset=utf8"})
-    public ResponseEntity<AbstractTscSsipApiResult> getBrokerInfo(@PathVariable("apiToken") String apiToken, HttpServletRequest request) {
+    @PostMapping(value = {SSIP_API_BROKER_INFO}, produces = {"application/json; charset=utf8"})
+    public ResponseEntity<TscSsipApiResultBrokerInfo> getBrokerInfo(@PathVariable("apiToken") String apiToken, HttpServletRequest request) {
 
         String apiId = SSIP_API_BROKER_INFO;
         String remoteIP = ApiUtils.getRemoteIP(request);
@@ -98,34 +105,46 @@ public class TscSsipApiController {
                 .error(TscSsipApiErrorCode.SUCCESS.getCode())
                 .build();
 
+        TscApiResultCode errorCode = null;
         try {
-            TscSsipApiErrorCode authorizedInfo = this.tscSsipApiService.getAuthorizedInfo(apiId, apiToken, remoteIP);
-            if (authorizedInfo != TscSsipApiErrorCode.SUCCESS) {
+            errorCode = this.tscSsipApiService.getTscAuthorizedInfo(apiId, apiToken, remoteIP);
+            if (errorCode != TscApiResultCode.SUCCESS) {
                 // api token 인증 오류
-                log.error("인증오류: [{}] ==> [{}]: [{}].[{}]" + apiId, remoteIP, apiToken, authorizedInfo.getCode(), authorizedInfo.getMessage());
-                apiInvokeVo.setError(authorizedInfo.getCode());
+                //log.error("인증오류: [{}] ==> [{}]: [{}].[{}]" + apiId, remoteIP, apiToken, authorizedInfo.getCode(), authorizedInfo.getMessage());
+                log.error("인증오류: [{}] ==> [{}]: [{}].[{}]" + apiId, remoteIP, apiToken, errorCode.getValue(), errorCode.toString());
+                apiInvokeVo.setError(errorCode.getValue());
                 this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
-                TscSsipApiResultError error = new TscSsipApiResultError(authorizedInfo.getCode(), authorizedInfo.getMessage());
-                return new ResponseEntity<> (error, HttpStatus.UNAUTHORIZED);
+                //TscSsipApiResultError error = new TscSsipApiResultError(authorizedInfo.getCode(), authorizedInfo.getMessage());
+                //return new ResponseEntity<> (error, HttpStatus.UNAUTHORIZED);
+                return new ResponseEntity<>(new TscSsipApiResultBrokerInfo(errorCode, null), HttpStatus.OK);
             }
         }
         catch (Exception e) {
             log.error("getBrokerInfo: {}", e.getMessage());
             // 데이터베이스 오류
             TscSsipApiResultError error = new TscSsipApiResultError(TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getCode(), TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getMessage());
-            return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
+            apiInvokeVo.setError(TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getCode());
+            this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
+             //return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
+            errorCode = TscApiResultCode.FAIL_INTERNAL_ERROR;
+            return new ResponseEntity<>(new TscSsipApiResultBrokerInfo(errorCode, null), HttpStatus.OK);
         }
 
-        BrokerVo brokerVo = null;
         try {
-            brokerVo = this.tscSsipApiService.getBrokerInfo(apiToken);
+            BrokerVo brokerVo = this.tscSsipApiService.getBrokerInfo(apiToken);
             if (brokerVo == null) {
                 apiInvokeVo.setError(TscSsipApiErrorCode.NOTFOUND_BROKER_INFO.getCode());
                 log.error("{}", apiInvokeVo.toString());
                 this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
-                TscSsipApiResultError error = new TscSsipApiResultError(TscSsipApiErrorCode.NOTFOUND_BROKER_INFO.getCode(), TscSsipApiErrorCode.NOTFOUND_BROKER_INFO.getMessage());
-                return new ResponseEntity<> (error, HttpStatus.NON_AUTHORITATIVE_INFORMATION);
+                errorCode = TscApiResultCode.DATA_NOT_FOUND;
+                return new ResponseEntity<>(new TscSsipApiResultBrokerInfo(errorCode, null), HttpStatus.OK);
+//                TscSsipApiResultError error = new TscSsipApiResultError(TscSsipApiErrorCode.NOTFOUND_BROKER_INFO.getCode(), TscSsipApiErrorCode.NOTFOUND_BROKER_INFO.getMessage());
+//                return new ResponseEntity<> (error, HttpStatus.NON_AUTHORITATIVE_INFORMATION);
             }
+            // 이력저장
+            this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
+            //return new ResponseEntity<>(result, HttpStatus.OK);
+            return new ResponseEntity<>(new TscSsipApiResultBrokerInfo(errorCode, brokerVo.toDto()), HttpStatus.OK);
         }
         catch (Exception e) {
             log.error("getBrokerInfo: {}", e.getMessage());
@@ -133,16 +152,15 @@ public class TscSsipApiController {
             TscSsipApiResultError error = new TscSsipApiResultError(TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getCode(), TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getMessage());
             apiInvokeVo.setError(TscSsipApiErrorCode.ERROR_INTERNAL_DATA.getCode());
             this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
-            return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
+            //return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
+            errorCode = TscApiResultCode.FAIL_INTERNAL_ERROR;
+            return new ResponseEntity<>(new TscSsipApiResultBrokerInfo(errorCode, null), HttpStatus.OK);
         }
 
-        TscSsipApiResultBrokerInfo result = new TscSsipApiResultBrokerInfo(TscSsipApiErrorCode.SUCCESS.getCode(), TscSsipApiErrorCode.SUCCESS.getMessage());
-        result.setBrokerInfo(brokerVo);
-        result.setCount(1);
+//        TscSsipApiResultBrokerInfo result = new TscSsipApiResultBrokerInfo(TscSsipApiErrorCode.SUCCESS.getCode(), TscSsipApiErrorCode.SUCCESS.getMessage());
+//        result.setBrokerInfo(brokerVo);
+//        result.setCount(1);
 
-        // 이력저장
-        this.tscSsipApiService.insertInvokeHs(apiInvokeVo, true);
-        return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @GetMapping(value = {SSIP_API_UUID})

+ 20 - 0
src/main/java/com/tsi/api/server/controller/result/AbstractTscApiResult.java

@@ -0,0 +1,20 @@
+package com.tsi.api.server.controller.result;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+public abstract class AbstractTscApiResult {
+
+    protected int resultCode;
+    protected String resultDesc;
+
+    public AbstractTscApiResult(TscApiResultCode result) {
+        this.resultCode = result.getValue();
+        this.resultDesc = result.toString();
+    }
+
+}

+ 3 - 1
src/main/java/com/tsi/api/server/controller/result/AbstractTscSsipApiResult.java

@@ -12,6 +12,9 @@ import java.util.Date;
 @ToString
 public abstract class AbstractTscSsipApiResult {
 
+    protected int resultCode;
+    protected String resultDesc;
+
     private String timestamp;
     private int status;
     private String message;
@@ -25,7 +28,6 @@ public abstract class AbstractTscSsipApiResult {
         Date date = new Date();
         SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
         sdf.setTimeZone(java.util.TimeZone.getTimeZone("GMT+9"));
-
         this.timestamp = sdf.format(date);
     }
 }

+ 22 - 0
src/main/java/com/tsi/api/server/controller/result/TscApiResultCode.java

@@ -0,0 +1,22 @@
+package com.tsi.api.server.controller.result;
+
+public enum TscApiResultCode {
+
+    SUCCESS(1000),                  // 성공
+    FAIL_UNDEFINED(9900),           // 분류되지 않은 에러
+    FAIL_INTERNAL_ERROR(9901),      // TSI-Hub 시스템 내부 에러
+    FAIL_APITOKEN_AUTH(9911),       // apiToken 사용권한 없음
+    FAIL_APITOKEN_EXPIRED(9912),    // apiToken 유효기간 만료
+    FAIL_UNREGI_IPADDR(9913),       // 미등록 IP 에서 접근
+    DATA_NOT_FOUND(9914);           // 데이터가 존재하지 않음
+
+    private final int value;
+
+    TscApiResultCode(int value) {
+        this.value = value;
+    }
+
+    public int getValue() {
+        return this.value;
+    }
+}

+ 6 - 5
src/main/java/com/tsi/api/server/controller/result/TscSsipApiResultBrokerInfo.java

@@ -1,6 +1,6 @@
 package com.tsi.api.server.controller.result;
 
-import com.tsi.api.server.vo.BrokerVo;
+import com.tsi.api.server.dto.BrokerDto;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -8,13 +8,14 @@ import lombok.ToString;
 @Setter
 @Getter
 @ToString
-public class TscSsipApiResultBrokerInfo extends AbstractTscSsipApiResult {
+public class TscSsipApiResultBrokerInfo extends AbstractTscApiResult {
 
     private static final long serialVersionUID = 1L;
 
-    private BrokerVo brokerInfo;
+    private BrokerDto resultData;
 
-    public TscSsipApiResultBrokerInfo(int resultCode, String resultDesc) {
-        super(resultCode, resultDesc);
+    public TscSsipApiResultBrokerInfo(TscApiResultCode result, BrokerDto resultData) {
+        super(result);
+        this.resultData = resultData;
     }
 }

+ 6 - 11
src/main/java/com/tsi/api/server/controller/result/TscSsipApiResultNodeInfo.java

@@ -1,6 +1,6 @@
 package com.tsi.api.server.controller.result;
 
-import com.tsi.api.server.vo.NodeVo;
+import com.tsi.api.server.dto.NodeDto;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -10,20 +10,15 @@ import java.util.List;
 @Setter
 @Getter
 @ToString
-public class TscSsipApiResultNodeInfo extends AbstractTscSsipApiResult {
+public class TscSsipApiResultNodeInfo extends AbstractTscApiResult {
 
     private static final long serialVersionUID = 1L;
 
-    private List<NodeVo> nodes;
+    private List<NodeDto> resultData;
 
-    public TscSsipApiResultNodeInfo(int status, String message) {
-        super(status, message);
-        this.nodes = null;
-    }
-
-    public TscSsipApiResultNodeInfo(int status, String message, List<NodeVo> nodeList) {
-        super(status, message);
-        this.nodes = nodeList;
+    public TscSsipApiResultNodeInfo(TscApiResultCode result, List<NodeDto> resultData) {
+        super(result);
+        this.resultData = resultData;
     }
 
 }

+ 17 - 0
src/main/java/com/tsi/api/server/dto/BrokerDto.java

@@ -0,0 +1,17 @@
+package com.tsi.api.server.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@Builder
+public class BrokerDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String host;
+    private Integer port;
+    private String id;
+    private String pwd;
+}

+ 18 - 0
src/main/java/com/tsi/api/server/dto/NodeDto.java

@@ -0,0 +1,18 @@
+package com.tsi.api.server.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@Builder
+public class NodeDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Long node_id;
+    private String node_name;
+    private Double latitude;
+    private Double longitude;
+
+}

+ 25 - 0
src/main/java/com/tsi/api/server/service/TscSsipApiService.java

@@ -1,5 +1,6 @@
 package com.tsi.api.server.service;
 
+import com.tsi.api.server.controller.result.TscApiResultCode;
 import com.tsi.api.server.dto.SystemStatusDto;
 import com.tsi.api.server.error.TscSsipApiErrorCode;
 import com.tsi.api.server.mybatis.TscSsipApiMapper;
@@ -36,6 +37,30 @@ public class TscSsipApiService {
         return tscSsipApiMapper.getApiAuthorizedInfo(apiId, apiToken);
     }
 
+    public TscApiResultCode getTscAuthorizedInfo(String apiId, String apiToken, String remoteIP) {
+
+        AuthorizedVo authorized = getApiAuthorizedInfo(apiId, apiToken);
+        if (authorized == null) {
+            // 등록되지 않은 사용자
+            return TscApiResultCode.FAIL_APITOKEN_AUTH;
+        }
+        else {
+            if (authorized.getIsAuthorized() == 0) {
+                // 키 유효기간이 지남
+                return TscApiResultCode.FAIL_APITOKEN_EXPIRED;
+            }
+            else {
+                // ip address 체크
+                String[] ipAddrs = authorized.getAccessIpAddress().replaceAll(" ", "").split(",");
+                Set<String> setIpAddrs = new HashSet<>(Arrays.asList(ipAddrs));
+                if (setIpAddrs.contains("*") || setIpAddrs.contains(remoteIP)) {
+                    return TscApiResultCode.SUCCESS;
+                }
+            }
+        }
+        return TscApiResultCode.FAIL_UNREGI_IPADDR;
+    }
+
     public TscSsipApiErrorCode getAuthorizedInfo(String apiId, String apiToken, String remoteIP) {
 
         AuthorizedVo authorized = getApiAuthorizedInfo(apiId, apiToken);

+ 11 - 0
src/main/java/com/tsi/api/server/vo/BrokerVo.java

@@ -1,11 +1,22 @@
 package com.tsi.api.server.vo;
 
+import com.tsi.api.server.dto.BrokerDto;
+import lombok.Builder;
 import lombok.Data;
 
 @Data
+@Builder
 public class BrokerVo {
     private String ipAddr;  // 브로커 서버 IP주소
     private int    port;    // 브로커 서버 포트번호
     private String id;      // 브로커 서버 접속 ID
     private String pwd;     // 브로커 서버 접속 패스워드
+
+    public BrokerDto toDto() {
+        return BrokerDto.builder()
+                .host(this.ipAddr)
+                .port(this.port)
+                .id(this.id)
+                .pwd(this.pwd).build();
+    }
 }

+ 12 - 0
src/main/java/com/tsi/api/server/vo/NodeVo.java

@@ -1,11 +1,23 @@
 package com.tsi.api.server.vo;
 
+import com.tsi.api.server.dto.NodeDto;
+import lombok.Builder;
 import lombok.Data;
 
 @Data
+@Builder
 public class NodeVo {
     private long   nodeId;      // 교차로 번호
     private String nodeName;    // 교차로 이름
     private String lat;    // 위도(경위도)
     private String lng;   // 경도(경위도)
+
+    public NodeDto toDto() {
+        return NodeDto.builder()
+                .node_id(this.nodeId)
+                .node_name(this.nodeName)
+                .latitude(Double.parseDouble(this.lat))
+                .longitude(Double.parseDouble(this.lng))
+                .build();
+    }
 }

+ 2 - 3
src/main/resources/application.yml

@@ -32,12 +32,11 @@ spring:
   profiles: seoul
   datasource:
     mybatis:
-      jdbc-url: jdbc:mariadb://192.168.202.105:3306/cvim_db?characterEncoding=UTF-8&serverTimezone=UTC
+      jdbc-url: jdbc:mariadb://10.4.4.20:3306/cvim_db?characterEncoding=UTF-8&serverTimezone=UTC
 
 ---
 spring:
   profiles: dev
   datasource:
     mybatis:
-      #jdbc-url: jdbc:mariadb://61.108.209.105:3306/cvim_db?characterEncoding=UTF-8&serverTimezone=UTC
-      jdbc-url: jdbc:mariadb://59.29.208.150:23307/cvim_db?characterEncoding=UTF-8&serverTimezone=UTC
+      jdbc-url: jdbc:mariadb://10.4.4.20:3306/cvim_db?characterEncoding=UTF-8&serverTimezone=UTC