From ac77796e21fb1e61f525d965c321456578fe8dea Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Wed, 8 Apr 2026 14:37:57 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat(risk):=20UpdatedRiskList=20=EC=97=94?= =?UTF-8?q?=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20Ship=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UpdatedComplianceList → UpdatedRiskList 경로 및 설명 수정 - Ship 데이터 조회 모듈 (Controller, Service) 신규 추가 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../web/risk/controller/RiskController.java | 4 +- .../service/UpdatedComplianceListService.java | 2 +- .../web/ship/controller/ShipController.java | 37 +++++++++++++++++++ .../GetShipDataByIHSLRorIMOService.java | 32 ++++++++++++++++ 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/snp/batch/jobs/web/ship/controller/ShipController.java create mode 100644 src/main/java/com/snp/batch/jobs/web/ship/service/GetShipDataByIHSLRorIMOService.java diff --git a/src/main/java/com/snp/batch/jobs/web/risk/controller/RiskController.java b/src/main/java/com/snp/batch/jobs/web/risk/controller/RiskController.java index 088bf59..9bbd908 100644 --- a/src/main/java/com/snp/batch/jobs/web/risk/controller/RiskController.java +++ b/src/main/java/com/snp/batch/jobs/web/risk/controller/RiskController.java @@ -39,9 +39,9 @@ public class RiskController extends BaseBypassController { @Operation( summary = "기간 내 변경된 위험지표 조회", - description = "Gets details of the IMOs of all ships with compliance updates" + description = "Gets details of the IMOs of all ships with risk updates" ) - @GetMapping("/UpdatedComplianceList") + @GetMapping("/UpdatedRiskList") public ResponseEntity getUpdatedComplianceListData(@Parameter(description = "Time/seconds are optional", example = "2026-03-30T07:01:27.000Z") @RequestParam(required = true) String fromDate, @Parameter(description = "Time/seconds are optional. If unspecified, the current UTC date and time is used", example = "2026-03-31T07:01:27.000Z") diff --git a/src/main/java/com/snp/batch/jobs/web/risk/service/UpdatedComplianceListService.java b/src/main/java/com/snp/batch/jobs/web/risk/service/UpdatedComplianceListService.java index add4913..dfb661b 100644 --- a/src/main/java/com/snp/batch/jobs/web/risk/service/UpdatedComplianceListService.java +++ b/src/main/java/com/snp/batch/jobs/web/risk/service/UpdatedComplianceListService.java @@ -16,7 +16,7 @@ public class UpdatedComplianceListService extends BaseBypassService { public UpdatedComplianceListService( @Qualifier("maritimeServiceApiWebClient") WebClient webClient) { - super(webClient, "/RiskAndCompliance/UpdatedComplianceList", "기간 내 변경된 위험지표 조회", + super(webClient, "/RiskAndCompliance/UpdatedRiskList", "기간 내 변경된 위험지표 조회", new ParameterizedTypeReference<>() {}, new ParameterizedTypeReference<>() {}); } diff --git a/src/main/java/com/snp/batch/jobs/web/ship/controller/ShipController.java b/src/main/java/com/snp/batch/jobs/web/ship/controller/ShipController.java new file mode 100644 index 0000000..dc79cde --- /dev/null +++ b/src/main/java/com/snp/batch/jobs/web/ship/controller/ShipController.java @@ -0,0 +1,37 @@ +package com.snp.batch.jobs.web.ship.controller; + +import com.fasterxml.jackson.databind.JsonNode; +import com.snp.batch.common.web.controller.BaseBypassController; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import com.snp.batch.jobs.web.ship.service.GetShipDataByIHSLRorIMOService; + +/** + * Ship bypass API + * S&P Maritime API에서 데이터를 실시간 조회하여 JSON을 그대로 반환 + */ +@RestController +@RequestMapping("/api/ship") +@RequiredArgsConstructor +@Tag(name = "Ship", description = "[Ship API] Ship bypass API") +public class ShipController extends BaseBypassController { + + private final GetShipDataByIHSLRorIMOService getShipDataByIHSLRorIMOService; + + @Operation( + summary = "IMO 기반 선박제원정보 조회", + description = "IMO 기반 선박제원정보 조회" + ) + @GetMapping("/GetShipDataByIHSLRorIMO") + public ResponseEntity getGetShipDataByIHSLRorIMOData(@Parameter(description = "", example = "9876543") + @RequestParam(required = true) String ihslrOrImo) { + return executeRaw(() -> getShipDataByIHSLRorIMOService.getGetShipDataByIHSLRorIMOData(ihslrOrImo)); + } +} diff --git a/src/main/java/com/snp/batch/jobs/web/ship/service/GetShipDataByIHSLRorIMOService.java b/src/main/java/com/snp/batch/jobs/web/ship/service/GetShipDataByIHSLRorIMOService.java new file mode 100644 index 0000000..04e6e57 --- /dev/null +++ b/src/main/java/com/snp/batch/jobs/web/ship/service/GetShipDataByIHSLRorIMOService.java @@ -0,0 +1,32 @@ +package com.snp.batch.jobs.web.ship.service; + +import com.fasterxml.jackson.databind.JsonNode; +import com.snp.batch.common.web.service.BaseBypassService; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; + +/** + * IMO 기반 선박제원정보 조회 bypass 서비스 + * 외부 Maritime API에서 데이터를 실시간 조회하여 JSON을 그대로 반환 + */ +@Service +public class GetShipDataByIHSLRorIMOService extends BaseBypassService { + + public GetShipDataByIHSLRorIMOService( + @Qualifier("maritimeApiWebClient") WebClient webClient) { + super(webClient, "/MaritimeWCF/APSShipService.svc/RESTFul/GetShipDataByIHSLRorIMO", "IMO 기반 선박제원정보 조회", + new ParameterizedTypeReference<>() {}, + new ParameterizedTypeReference<>() {}); + } + + /** + * IMO 기반 선박제원정보 조회 데이터를 조회합니다. + */ + public JsonNode getGetShipDataByIHSLRorIMOData(String ihslrOrImo) { + return fetchRawGet(uri -> uri.path(getApiPath()) + .queryParam("ihslrOrImo", ihslrOrImo) + .build()); + } +} From 59d471230c287a6e5a1fb2909c4f09d92aecf41c Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Wed, 8 Apr 2026 14:40:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=EB=A6=B4=EB=A6=AC=EC=A6=88=20?= =?UTF-8?q?=EB=85=B8=ED=8A=B8=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/RELEASE-NOTES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/RELEASE-NOTES.md b/docs/RELEASE-NOTES.md index 404631e..fda52e6 100644 --- a/docs/RELEASE-NOTES.md +++ b/docs/RELEASE-NOTES.md @@ -4,6 +4,9 @@ ## [Unreleased] +### 추가 +- UpdatedRiskList 엔드포인트 변경 및 Ship 데이터 조회 모듈 추가 + ## [2026-04-08] ### 변경