Client API 추가 Popup Scope화면에도 적용. bzwksvckeyname를 화면에 넘겨주기위해 일부 수정.

추가요건 1. 팝업 및 리스트에 API명, API FULL PATH 추가.
추가요건 2. API-SCOPE 매핑하면 -> SCOPE 화면에서 통합관리 할 수 있게 변경.
This commit is contained in:
daekuk
2025-12-22 15:03:46 +09:00
parent 379ca31499
commit 8d4b91c977
9 changed files with 291 additions and 24 deletions
@@ -9,6 +9,9 @@ import lombok.Data;
@AllArgsConstructor
public class ApiScopeDto {
@JsonProperty("EAISVCNAME")
private String eaiSvcName;
@JsonProperty("EAISVCDESC")
private String eaiSvcDesc;
@@ -20,5 +23,8 @@ public class ApiScopeDto {
@JsonProperty("SCOPENAME")
private String scopeName;
@JsonProperty("APIFULLPATH")
private String apiFullPath;
}
@@ -59,6 +59,8 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
, qServiceMessageEntity.psvsysadptrbzwkgroupname
, qRouting.nonmotivrouturiname
, qStdInfo.apifullpath
, qStdInfo.bzwksvckeyname
)
.limit(pageable.getPageSize())
.offset(pageable.getOffset())
@@ -111,6 +113,7 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
, qServiceMessageEntity.psvintfacdsticname
, qRouting.nonmotivrouturiname
, qStdInfo.apifullpath
, qStdInfo.bzwksvckeyname
)
.from(qeaiMessageEntity)
.join(qRouting)
@@ -290,10 +293,14 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
List<ApiScopeDto> result = getJPAQueryFactory()
.select(Projections.constructor(ApiScopeDto.class ,
qEaiMessageEntity.eaisvcname ,
qEaiMessageEntity.eaisvcdesc ,
qScopeEntity.id.scopeid ,
qScopeEntity.id.bzwksvckeyname ,
qScopeInfo.scopeName ))
qScopeInfo.scopeName ,
qStandardMessageInfo.apifullpath
)
)
.from(qEaiMessageEntity)
.join(qStandardMessageInfo)
.on(qEaiMessageEntity.eaisvcname.eq(qStandardMessageInfo.eaisvcname))
@@ -313,19 +320,20 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
private BooleanExpression booleanPredicate(QEAIMessageEntity qEaiMessageEntity, QScopeEntity qScopeEntity,
QScopeInfo qScopeInfo, ApiScopeSearch apiScopeSearch) {
BooleanExpression predicate = qEaiMessageEntity.eaisvcdesc.containsIgnoreCase(apiScopeSearch.getSearchEaiSvcDesc());
BooleanExpression predicate = qScopeEntity.id.scopeid.containsIgnoreCase(apiScopeSearch.getSearchScopeId());
// BooleanExpression predicate = qEaiMessageEntity.eaisvcdesc.containsIgnoreCase(apiScopeSearch.getSearchEaiSvcDesc());
if(StringUtils.isNotBlank(apiScopeSearch.getSearchBzwkSvcKeyName())) {
predicate = predicate.and(qScopeEntity.id.bzwksvckeyname.containsIgnoreCase(apiScopeSearch.getSearchBzwkSvcKeyName()));
}
if(StringUtils.isNotBlank(apiScopeSearch.getSearchScopeId())) {
predicate = predicate.and(qScopeEntity.id.scopeid.containsIgnoreCase(apiScopeSearch.getSearchScopeId()));
}
if(StringUtils.isNotBlank(apiScopeSearch.getSearchScopeName())) {
predicate = predicate.and(qScopeInfo.scopeName.containsIgnoreCase(apiScopeSearch.getSearchScopeName()));
}
// if(StringUtils.isNotBlank(apiScopeSearch.getSearchBzwkSvcKeyName())) {
// predicate = predicate.and(qScopeEntity.id.bzwksvckeyname.containsIgnoreCase(apiScopeSearch.getSearchBzwkSvcKeyName()));
// }
//
// if(StringUtils.isNotBlank(apiScopeSearch.getSearchScopeId())) {
// predicate = predicate.and(qScopeEntity.id.scopeid.containsIgnoreCase(apiScopeSearch.getSearchScopeId()));
// }
//
// if(StringUtils.isNotBlank(apiScopeSearch.getSearchScopeName())) {
// predicate = predicate.and(qScopeInfo.scopeName.containsIgnoreCase(apiScopeSearch.getSearchScopeName()));
// }
return predicate;
}
@@ -4,6 +4,15 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.eactive.eai.agent.authserver.ReloadApiScopeCommand;
import com.eactive.eai.agent.command.CommonCommand;
import com.eactive.eai.rms.common.base.OnlBaseAnnotationController;
import com.eactive.eai.rms.common.vo.GridResponse;
import com.eactive.eai.rms.data.entity.onl.eaimsg.ApiScopeSearch;
import com.eactive.eai.rms.onl.common.exception.BizException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -11,6 +20,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.eactive.eai.agent.authserver.ReloadApiScopeCommand;
import com.eactive.eai.agent.command.CommonCommand;
@@ -53,6 +63,25 @@ public class ApiScopeController extends OnlBaseAnnotationController {
return ResponseEntity.ok().build();
}
@PostMapping(value = "/onl/admin/authserver/apiScopeMan.json", params = "cmd=INSERT_APILIST")
public ResponseEntity<Void> insertApiScopeList(@RequestParam("apiList") String apiListJson, @RequestParam("scopeId") String scopeId) {
ObjectMapper mapper = new ObjectMapper();
List<ApiScopeUI> apiScopeList = null;
try {
apiScopeList = mapper.readValue(apiListJson, new TypeReference<List<ApiScopeUI>>(){});
} catch (Exception e) {
throw new BizException("데이터 변환 중 오류가 발생했습니다.");
}
apiScopeManService.insertApiScopeRelationList(apiScopeList, scopeId);
return ResponseEntity.ok().build();
}
@PostMapping(value = "/onl/admin/authserver/apiScopeMan.json", params = "cmd=DELETE")
public ResponseEntity<Void> deleteApiScope(ApiScopeUI apiScopeUI) {
apiScopeManService.deleteApiScopeRelation(apiScopeUI);
@@ -11,6 +11,8 @@ import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.eactive.eai.agent.authserver.ReloadApiScopeCommand;
import com.eactive.eai.agent.command.CommonCommand;
import com.eactive.eai.rms.common.base.OnlBaseService;
import com.eactive.eai.rms.common.spring.LocaleMessage;
import com.eactive.eai.rms.data.entity.onl.authserver.ScopeEntityService;
@@ -56,10 +58,12 @@ public class ApiScopeManService extends OnlBaseService {
private ApiScopeUI convertToApiScopeUI(ApiScopeDto dto) {
ApiScopeUI apiScopeUI = new ApiScopeUI();
apiScopeUI.setEaiSvcDesc(dto.getEaiSvcDesc());
apiScopeUI.setApiDesc(dto.getEaiSvcDesc());
apiScopeUI.setScopeId(dto.getScopeId());
apiScopeUI.setBzwkSvcKeyName(dto.getBzwkSvcKeyName());
apiScopeUI.setScopeName(dto.getScopeName());
apiScopeUI.setApiFullPath(dto.getApiFullPath());
apiScopeUI.setApiId(dto.getEaiSvcName());
return apiScopeUI;
}
@@ -72,6 +76,32 @@ public class ApiScopeManService extends OnlBaseService {
scopeEntityService.save(apiScopeUIMapper.toEntity(apiScopeUI));
}
public void insertApiScopeRelationList(List<ApiScopeUI> apiScopeList, String scopeId) {
// ScopeId 기준 전체 삭제 후 LIST 기준으로 저장.
if(scopeId == null || scopeId.isEmpty()) {
throw new BizException("ScopeId 가 존재하지 않습니다.");
}
scopeEntityService.deleteByIdScopeId(scopeId);
if(apiScopeList == null || apiScopeList.isEmpty()) {
return;
}
for (ApiScopeUI ui : apiScopeList) {
ui.setScopeId(scopeId);
scopeEntityService.save(apiScopeUIMapper.toEntity(ui));
CommonCommand.builder()
.name(CommonCommand.RELOAD_API_SCOPE_COMMAND)
.args(new String[] {ReloadApiScopeCommand.COMMAND_TYPE_API_SCOPE,
ui.getBzwkSvcKeyName(), ui.getScopeId()})
.build()
.broadcast(agentUtilService);
}
}
public void deleteApiScopeRelation(ApiScopeUI apiScopeUI) {
scopeEntityService.deleteById(apiScopeUIMapper.toId(apiScopeUI));
}
@@ -1,10 +1,14 @@
package com.eactive.eai.rms.onl.manage.authserver.scope;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor // jackson 사용을 위해 추가.
@JsonIgnoreProperties(ignoreUnknown = true)
public class ApiScopeUI {
@JsonProperty("SCOPEID")
@@ -16,7 +20,13 @@ public class ApiScopeUI {
@JsonProperty("SCOPENAME")
private String scopeName;
@JsonProperty("EAISVCDESC")
private String eaiSvcDesc;
@JsonProperty("apiDesc")
private String apiDesc;
@JsonProperty("APIFULLPATH")
private String apiFullPath;
@JsonProperty("apiId")
private String apiId;
}
@@ -139,6 +139,7 @@ public class ApiInterfaceService extends OnlBaseService {
EAIMessageEntity eaiMessageEntity = tuple.get(QEAIMessageEntity.eAIMessageEntity);
String apiFullPath = tuple.get(QStandardMessageInfo.standardMessageInfo.apifullpath);
String bzwksvckeyname = tuple.get(QStandardMessageInfo.standardMessageInfo.bzwksvckeyname);
ApiInterfaceUI apiInterfaceUI;
if (eaiMessageEntity.getServiceMessages() != null && eaiMessageEntity.getServiceMessages().size() > 0) {
@@ -148,6 +149,7 @@ public class ApiInterfaceService extends OnlBaseService {
}
apiInterfaceUI.setApiFullPath(apiFullPath);
apiInterfaceUI.setBzwksvckeyname(bzwksvckeyname);
return apiInterfaceUI;
});
@@ -51,6 +51,7 @@ public class ApiInterfaceUI {
private List<StdMessageItemUI> inboundResponseStandardMessageItems ;
private String apiFullPath;
private String bzwksvckeyname;
//ASYNC-SYNC 용
private String inboundResponseHttpMethod;