[Developer] #424 show VPD policy function source
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package com.cloudhandson.vpdbackoffice.domain.vpd;
|
||||
|
||||
public record VpdFunctionSource(
|
||||
String owner,
|
||||
String objectName,
|
||||
String objectType,
|
||||
String source
|
||||
) {
|
||||
|
||||
public boolean found() {
|
||||
return source != null && !source.isBlank();
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,16 @@ package com.cloudhandson.vpdbackoffice.mapper;
|
||||
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyView;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
public interface VpdPolicyMapper {
|
||||
|
||||
List<VpdPolicyView> findPolicies();
|
||||
|
||||
String findFunctionSource(
|
||||
@Param("owner") String owner,
|
||||
@Param("objectName") String objectName,
|
||||
@Param("objectType") String objectType
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.cloudhandson.vpdbackoffice.service;
|
||||
|
||||
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdFunctionSource;
|
||||
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyView;
|
||||
import com.cloudhandson.vpdbackoffice.mapper.VpdPolicyMapper;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@@ -17,4 +19,33 @@ public class VpdPolicyService {
|
||||
public List<VpdPolicyView> findPolicies() {
|
||||
return mapper.findPolicies();
|
||||
}
|
||||
|
||||
public VpdFunctionSource findFunctionSource(String owner, String packageName, String functionName) {
|
||||
String normalizedOwner = requiredIdentifier(owner, "Function owner");
|
||||
String normalizedFunction = requiredIdentifier(functionName, "Function name");
|
||||
String normalizedPackage = normalizeOptionalIdentifier(packageName);
|
||||
String objectName = normalizedPackage == null ? normalizedFunction : normalizedPackage;
|
||||
String objectType = normalizedPackage == null ? "FUNCTION" : "PACKAGE BODY";
|
||||
String source = mapper.findFunctionSource(normalizedOwner, objectName, objectType);
|
||||
return new VpdFunctionSource(normalizedOwner, objectName, objectType, source);
|
||||
}
|
||||
|
||||
private String requiredIdentifier(String value, String label) {
|
||||
String normalized = normalizeOptionalIdentifier(value);
|
||||
if (normalized == null) {
|
||||
throw new AppException(label + " 값이 없습니다.");
|
||||
}
|
||||
return normalized;
|
||||
}
|
||||
|
||||
private String normalizeOptionalIdentifier(String value) {
|
||||
if (value == null || value.isBlank()) {
|
||||
return null;
|
||||
}
|
||||
String normalized = value.trim().toUpperCase(Locale.ROOT);
|
||||
if (!normalized.matches("[A-Z][A-Z0-9_$#]{0,127}")) {
|
||||
throw new AppException("Oracle identifier 형식이 올바르지 않습니다: " + value);
|
||||
}
|
||||
return normalized;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.cloudhandson.vpdbackoffice.web;
|
||||
|
||||
import com.cloudhandson.vpdbackoffice.service.AppException;
|
||||
import com.cloudhandson.vpdbackoffice.service.VpdPolicyService;
|
||||
import java.util.List;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
@Controller
|
||||
public class VpdPolicyController {
|
||||
@@ -27,4 +29,22 @@ public class VpdPolicyController {
|
||||
}
|
||||
return "vpd-policies";
|
||||
}
|
||||
|
||||
@GetMapping("/vpd-policies/function-source")
|
||||
public String functionSource(
|
||||
@RequestParam String owner,
|
||||
@RequestParam(required = false) String packageName,
|
||||
@RequestParam String functionName,
|
||||
Model model
|
||||
) {
|
||||
try {
|
||||
model.addAttribute("source", vpdPolicyService.findFunctionSource(owner, packageName, functionName));
|
||||
} catch (AppException exception) {
|
||||
model.addAttribute("errorMessage", exception.getMessage());
|
||||
} catch (DataAccessException exception) {
|
||||
RuntimeErrorMessage message = RuntimeErrorMessages.dataAccess(exception);
|
||||
model.addAttribute("errorMessage", message.message());
|
||||
}
|
||||
return "fragments/vpd-function-source :: source";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user