diff --git a/WebContent/jsp/onl/admin/authserver/clientManDetail.jsp b/WebContent/jsp/onl/admin/authserver/clientManDetail.jsp
index 38aaca6..922b23b 100644
--- a/WebContent/jsp/onl/admin/authserver/clientManDetail.jsp
+++ b/WebContent/jsp/onl/admin/authserver/clientManDetail.jsp
@@ -285,6 +285,56 @@
}
});
+ $("#btn_sync_portal").click(function() {
+ var clientId = $('input[name=clientId]').val();
+ var clientName = $('input[name=clientName]').val();
+
+ if (!clientId) {
+ alert("Client ID가 없습니다.");
+ return;
+ }
+
+ if (!confirm("'" + clientName + "'의 개발자포탈 정보를 반영하시겠습니까?\n\n" +
+ "APIGW 인증 정보를 포탈 DB에 반영합니다. (없으면 생성, 있으면 업데이트)")) {
+ return;
+ }
+
+ $.ajax({
+ type: "POST",
+ url: url,
+ dataType: "json",
+ data: {
+ cmd: 'SYNC_PORTAL',
+ clientId: clientId
+ },
+ success: function(response) {
+ if (response.success) {
+ var msg = "포탈 정보 반영 완료";
+
+ if (response.action === 'INSERTED') {
+ msg = "포탈 정보를 새로 생성했습니다.";
+ } else if (response.action === 'UPDATED') {
+ msg = "포탈 정보를 업데이트했습니다.";
+ } else if (response.action === 'SKIPPED_NO_ORG') {
+ msg = "반영을 건너뜁니다.\n법인(orgId)이 설정되지 않은 클라이언트입니다.";
+ } else if (response.action === 'SKIPPED_INVALID_API') {
+ msg = "반영을 건너뜁니다.\n존재하지 않는 API가 포함되어 있습니다.\n\n";
+ if (response.invalidApis && response.invalidApis.length > 0) {
+ msg += "누락된 API: " + response.invalidApis.join(", ");
+ }
+ }
+
+ alert(msg);
+ } else {
+ alert("반영 실패\n\n" + response.message);
+ }
+ },
+ error: function(xhr) {
+ alert("반영 중 오류가 발생했습니다.");
+ }
+ });
+ });
+
$("#btn_popup_api").click(function () {
const args = {};
const url2 = api_url_view += "?cmd=POPUP";
@@ -417,6 +467,8 @@
+