diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsMetadataService.java b/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsMetadataService.java index b095800..903b61b 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsMetadataService.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsMetadataService.java @@ -48,6 +48,20 @@ public class OrdsMetadataService { .toList(); } + public String objectQueryHandlerSource(long objectId) { + ProtectedObject object = protectedObjectService.assertEnabled(objectId); + List columns = protectedObjectService.findColumns(objectId).stream() + .map(ProtectedColumn::columnName) + .toList(); + if (columns.isEmpty()) { + throw new AppException("보호 객체 컬럼이 없어 ORDS 조회 Handler Source를 만들 수 없습니다."); + } + requireIdentifier(object.owner(), "owner"); + requireIdentifier(object.objectName(), "objectName"); + columns.forEach(column -> requireIdentifier(column, "column")); + return objectQuerySource(object, columns); + } + @Transactional public void updateHandlerSource(OrdsHandlerUpdateCommand command) { if (command.source() == null || command.source().isBlank()) { @@ -97,14 +111,14 @@ public class OrdsMetadataService { String currentUser = jdbcTemplate.queryForObject("SELECT USER FROM dual", String.class); if (currentUser == null || !currentUser.equalsIgnoreCase("CB_ORDS")) { throw new AppException("ORDS 조회 Handler 생성은 ORDS parsing schema(CB_ORDS)로 DB에 연결했을 때만 가능합니다. 현재 연결 사용자: " - + currentUser); + + currentUser + ". 현재 연결에서는 소스 보기를 눌러 기본 PL/SQL을 확인한 뒤 ORDS Handler에 적용하세요."); } String moduleName = "cb.object.query"; String basePath = "cb-object-query/"; String template = object.owner().toLowerCase(Locale.ROOT) + "/" + object.objectName().toLowerCase(Locale.ROOT); String ordsPath = "cb-ords/" + basePath + template; - String source = objectQuerySource(object, columns); + String source = objectQueryHandlerSource(objectId); jdbcTemplate.update(""" BEGIN diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/web/ProtectedObjectController.java b/src/main/java/com/cloudhandson/vpdbackoffice/web/ProtectedObjectController.java index 080e67c..665681c 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/web/ProtectedObjectController.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/web/ProtectedObjectController.java @@ -79,6 +79,17 @@ public class ProtectedObjectController { return "redirect:/objects"; } + @GetMapping("/objects/ords-handler-source") + public String ordsHandlerSource(@RequestParam long objectId, Model model) { + try { + model.addAttribute("object", protectedObjectService.assertEnabled(objectId)); + model.addAttribute("source", ordsMetadataService.objectQueryHandlerSource(objectId)); + } catch (AppException exception) { + model.addAttribute("errorMessage", exception.getMessage()); + } + return "fragments/ords-handler-source :: source"; + } + @PostMapping("/objects/disable") public String disable(@RequestParam long objectId, RedirectAttributes redirectAttributes) { protectedObjectService.disableObject(objectId); diff --git a/src/main/resources/templates/fragments/ords-handler-source.html b/src/main/resources/templates/fragments/ords-handler-source.html new file mode 100644 index 0000000..2cad533 --- /dev/null +++ b/src/main/resources/templates/fragments/ords-handler-source.html @@ -0,0 +1,15 @@ + + + +
+
+
+

+ ADMIN.TABLE_NAME + / 기본 ORDS Handler PL/SQL +

+
source
+
+
+ + diff --git a/src/main/resources/templates/objects.html b/src/main/resources/templates/objects.html index 13fd430..247fd12 100644 --- a/src/main/resources/templates/objects.html +++ b/src/main/resources/templates/objects.html @@ -51,33 +51,47 @@ - - 1 - ADMIN - CB_V_SEARCH_DOCUMENTS - -
- - - - -
- - -
-
+ + + 1 + ADMIN + CB_V_SEARCH_DOCUMENTS + + - + + -
- - - -
-
- - + + +
+
+ + + +
+ +
+ + + +
+
+ + + + +
+ 소스 보기를 누르면 기본 Handler PL/SQL이 표시됩니다. +
+ + + 등록된 조회 Handler 대상이 없습니다.