diff --git a/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java b/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java index 4233c68..bac9dd9 100644 --- a/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java @@ -22,6 +22,7 @@ import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.eactive.apim.portal.apispec.repository.ApiSpecInfoRepository; import com.eactive.apim.portal.common.entity.Auditable; import com.eactive.apim.portal.djb.apistatus.incident.entity.DjbApistatusIncident; import com.eactive.apim.portal.djb.apistatus.incident.entity.DjbApistatusIncidentApi; @@ -110,6 +111,10 @@ public class ApiStatusDetectionService { @Autowired private ApiStatusRepository apiStatusRepository; + /** EMSAPP(PTL_API_SPEC_INFO) 조회용. AGWAPP 커넥션으로 도는 apiStatusRepository 로는 못 읽는다 */ + @Autowired + private ApiSpecInfoRepository apiSpecInfoRepository; + @Autowired private PortalPropertyService portalPropertyService; @@ -534,14 +539,23 @@ public class ApiStatusDetectionService { } } - /** 게시 인터페이스 판정. 조회에 실패하면 전부 비게시로 보아 ID·명칭 노출을 막는다. */ + /** + * 게시 인터페이스 판정. 조회에 실패하면 전부 비게시로 보아 ID·명칭 노출을 막는다. + * + *
판정 조건 두 개가 서로 다른 스키마에 있어 조회를 나눈다 - API 그룹 편성은 AGWAPP, + * 스펙 존재는 EMSAPP(PTL_API_SPEC_INFO). 한 쿼리로 조인하면 tenant=APIGW 커넥션이 + * EMSAPP 를 못 봐서 ORA-00942 가 난다.
+ */ private ApiSplit splitPublished(ListGW 인터페이스는 전부 탐지 대상이지만 개발자포탈에 노출되는 것은 그 일부다. * 자동 초안(제목·공지 본문·타임라인)에 게시되지 않은 인터페이스 ID 가 그대로 박히면 * 고객 화면에 내부 인터페이스가 드러나므로, 여기서 걸러 나머지는 건수로만 표기한다.
* - *판정 기준은 포털 "오픈 API" 목록과 같은 두 조건이다 - 노출 중인 API 그룹에 편성돼 있고 - * PTL_API_SPEC_INFO 에 스펙이 있을 것. 역할·소속에 따른 사용자별 공개 범위는 admin 에 - * 사용자 컨텍스트가 없어 적용하지 않는다(= 포털 화면이 한 번 더 좁힌다).
+ *게시 판정은 포털 "오픈 API" 목록과 같은 두 조건이다 - 노출 중인 API 그룹에 편성돼 있고 + * PTL_API_SPEC_INFO 에 스펙이 있을 것. 이 쿼리는 앞 조건(AGWAPP)만 본다. 뒤 조건은 + * EMSAPP 스키마라 {@code ApiSpecInfoRepository.findApiIdsIn} 으로 따로 조회해 교집합을 잡는다 + * - 이 리포지토리는 tenant=APIGW(AGWAPP) 커넥션으로 도는 탓에 한 쿼리로 조인하면 ORA-00942 다.
+ * + *역할·소속에 따른 사용자별 공개 범위는 admin 에 사용자 컨텍스트가 없어 적용하지 않는다 + * (= 포털 화면이 한 번 더 좁힌다).
*/ @Query(nativeQuery = true, value = " SELECT DISTINCT GA.API_ID" + " FROM API_GROUP_API GA" + " JOIN API_GROUP G ON G.ID = GA.API_GROUP_ID" + " WHERE GA.API_ID IN (:apiIds)" - + " AND G.DISPLAY_YN = '1'" - + " AND EXISTS (SELECT 1 FROM EMSAPP.PTL_API_SPEC_INFO S WHERE S.API_ID = GA.API_ID)") - List