From 9089c2f54160d355c6cd6397cb24f73512a3dcef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=98=84=EC=84=B1=ED=95=84?= Date: Thu, 2 Oct 2025 14:14:48 +0900 Subject: [PATCH] =?UTF-8?q?API=20=EB=AA=A9=EB=A1=9D,=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/apis/controller/ApiController.java | 13 ++++++++++--- .../apis/controller/TestbedSpecController.java | 17 +++++++++++------ .../portal/apps/apis/dto/ApiSpecInfoDto.java | 2 ++ .../apps/apis/service/ApiSearchFacadeImpl.java | 7 ++++++- .../portal/apps/main/service/MainApiFacade.java | 10 +++++++--- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/eactive/apim/portal/apps/apis/controller/ApiController.java b/src/main/java/com/eactive/apim/portal/apps/apis/controller/ApiController.java index a3ecb91..a00e750 100644 --- a/src/main/java/com/eactive/apim/portal/apps/apis/controller/ApiController.java +++ b/src/main/java/com/eactive/apim/portal/apps/apis/controller/ApiController.java @@ -1,6 +1,7 @@ package com.eactive.apim.portal.apps.apis.controller; +import com.eactive.apim.portal.apps.apis.dto.ApiSearchData; import com.eactive.apim.portal.apps.apis.dto.ApiSpecInfoDto; import com.eactive.apim.portal.apps.apis.service.ApiSearchFacade; import com.eactive.apim.portal.apps.apis.service.ApiService; @@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestParam; @RequestMapping("/apis") @RequiredArgsConstructor public class ApiController { + private static final String NOT_FOUND_MESSAGE = "찾을 수 없습니다."; private final ApiService apiService; private final ApiServiceService apiServiceService; @@ -33,15 +35,20 @@ public class ApiController { @GetMapping("/detail") public String apidetail(@RequestParam(value = "id", required = false) String id, ModelMap model) { - if( id ==null) { + if (id == null) { return "redirect:/apis/common"; } ApiSpecInfoDto api = apiService.selectDetail(id); - if(api==null){ + if (api == null) { throw new NotFoundException(NOT_FOUND_MESSAGE); } + + Map searchResult = apiSearchFacade.searchApis(new ApiGroupSearch()); + model.addAttribute("apiSpecInfo", api); + model.addAttribute("totalApiCount", searchResult.get("totalApiCount")); + model.addAttribute("services", searchResult.get("services")); return "apps/apis/mainApiDetail"; } @@ -54,7 +61,7 @@ public class ApiController { model.addAttribute("apis", searchResult.get("apis")); model.addAttribute("totalApiCount", searchResult.get("totalApiCount")); model.addAttribute("selectedApiCount", searchResult.get("selectedApiCount")); - model.addAttribute("selected", search.getGroupIds().size() >0 ? search.getGroupIds().get(0) : "-1"); + model.addAttribute("selected", search.getGroupIds().size() > 0 ? search.getGroupIds().get(0) : "-1"); return "apps/apis/mainApiList"; } diff --git a/src/main/java/com/eactive/apim/portal/apps/apis/controller/TestbedSpecController.java b/src/main/java/com/eactive/apim/portal/apps/apis/controller/TestbedSpecController.java index a442e93..4c1c670 100644 --- a/src/main/java/com/eactive/apim/portal/apps/apis/controller/TestbedSpecController.java +++ b/src/main/java/com/eactive/apim/portal/apps/apis/controller/TestbedSpecController.java @@ -1,7 +1,11 @@ package com.eactive.apim.portal.apps.apis.controller; +import com.eactive.apim.portal.apispec.entity.ApiSpecInfo; +import com.eactive.apim.portal.apispec.service.ApiSpecInfoService; +import com.eactive.apim.portal.apps.apis.service.ApiService; import com.eactive.apim.portal.apps.apiservice.service.ApiSpecService; import java.io.IOException; +import java.util.Optional; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; @@ -10,6 +14,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.FileCopyUtils; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -21,7 +26,7 @@ import org.springframework.web.bind.annotation.RestController; public class TestbedSpecController { @Autowired - ApiSpecService apiSpecService; + private ApiSpecInfoService apiSpecInfoService; private static final String DEFAULT_TOKEN_API_ID = "default-token-api-spec"; private static final String DEFAULT_SPEC_PATH = "swagger/default-token-api-spec.json"; @@ -40,12 +45,12 @@ public class TestbedSpecController { } } - String testbedSpec = apiSpecService.generateApiServiceTestbedSpec(id); + Optional spec = apiSpecInfoService.findById(id); - if (testbedSpec.isEmpty()) { - return ResponseEntity.notFound().build(); - } else { - return ResponseEntity.ok().body(testbedSpec); + if (!spec.isPresent()) { + StringUtils.hasText(spec.get().getTestbedSpec()); } + return ResponseEntity.ok().body(spec.get().getTestbedSpec()); + } } diff --git a/src/main/java/com/eactive/apim/portal/apps/apis/dto/ApiSpecInfoDto.java b/src/main/java/com/eactive/apim/portal/apps/apis/dto/ApiSpecInfoDto.java index 593c80d..fdeafca 100644 --- a/src/main/java/com/eactive/apim/portal/apps/apis/dto/ApiSpecInfoDto.java +++ b/src/main/java/com/eactive/apim/portal/apps/apis/dto/ApiSpecInfoDto.java @@ -44,4 +44,6 @@ public class ApiSpecInfoDto { private String displayOrg; private String displayRoleCode; + + private String apiGroupName; } diff --git a/src/main/java/com/eactive/apim/portal/apps/apis/service/ApiSearchFacadeImpl.java b/src/main/java/com/eactive/apim/portal/apps/apis/service/ApiSearchFacadeImpl.java index 8fdf84b..f599f52 100644 --- a/src/main/java/com/eactive/apim/portal/apps/apis/service/ApiSearchFacadeImpl.java +++ b/src/main/java/com/eactive/apim/portal/apps/apis/service/ApiSearchFacadeImpl.java @@ -113,7 +113,11 @@ public class ApiSearchFacadeImpl implements ApiSearchFacade { .collect(Collectors.toSet()); filteredApis.forEach(api -> { - api.setMainIcon(apiData.getServicesByApiId().get(api.getApiId()).getMainIcon()); + ApiServiceDTO service = apiData.getServicesByApiId().get(api.getApiId()); + if (service != null) { + api.setMainIcon(service.getMainIcon()); + api.setApiGroupName(service.getGroupName()); + } }); List servicesToReturn = apiData.getAllServices().stream() @@ -143,6 +147,7 @@ public class ApiSearchFacadeImpl implements ApiSearchFacade { result.put("services", servicesToReturn); result.put("apis", sortedApis); result.put("selectedApiCount", sortedApis.size()); + result.put("totalApiCount", apiData.getApiSpecsById().size()); return result; } diff --git a/src/main/java/com/eactive/apim/portal/apps/main/service/MainApiFacade.java b/src/main/java/com/eactive/apim/portal/apps/main/service/MainApiFacade.java index 3ef9abf..f0b07ba 100644 --- a/src/main/java/com/eactive/apim/portal/apps/main/service/MainApiFacade.java +++ b/src/main/java/com/eactive/apim/portal/apps/main/service/MainApiFacade.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -51,9 +52,12 @@ public class MainApiFacade { public List getHashTags() { Map property = portalPropertyService.getPortalPropertiesAsMap(PORTAL_PROPERTY); - String hashTags = property.getOrDefault("main.keyword.list", "#인증, #대출, #예금"); - //split with , and return as a list - return Arrays.asList(hashTags.split(",")); + String hashTags = property.getOrDefault("main.keyword.list", "#계좌조회, #송금API, #실시간결제, #오픈뱅킹"); + //split with , and clean each tag (remove # and trim) + return Arrays.stream(hashTags.split(",")) + .map(tag -> tag.trim().replaceFirst("^#", "")) + .filter(tag -> !tag.isEmpty()) + .collect(Collectors.toList()); } public List getOpenApis(List apiIds) {