diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/web/AppExceptionHandler.java b/src/main/java/com/cloudhandson/vpdbackoffice/web/AppExceptionHandler.java index 90a7be8..5910ad8 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/web/AppExceptionHandler.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/web/AppExceptionHandler.java @@ -1,6 +1,7 @@ package com.cloudhandson.vpdbackoffice.web; import com.cloudhandson.vpdbackoffice.service.AppException; +import org.springframework.dao.DataAccessException; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -13,4 +14,16 @@ public class AppExceptionHandler { model.addAttribute("errorMessage", exception.getMessage()); return "error"; } + + @ExceptionHandler(DataAccessException.class) + public String handleDataAccessException(DataAccessException exception, Model model) { + String detail = exception.getMostSpecificCause() == null + ? exception.getMessage() + : exception.getMostSpecificCause().getMessage(); + model.addAttribute("errorTitle", "ADB 연결 설정이 필요합니다."); + model.addAttribute("errorMessage", + "BACKOFFICE_DB_URL, BACKOFFICE_DB_USERNAME, BACKOFFICE_DB_PASSWORD를 실제 ADB 값으로 설정하고 " + + "./run.sh backoffice-support를 실행한 뒤 다시 시도하세요. 상세: " + detail); + return "error"; + } } diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/web/DashboardController.java b/src/main/java/com/cloudhandson/vpdbackoffice/web/DashboardController.java index 943396a..496b3f5 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/web/DashboardController.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/web/DashboardController.java @@ -3,6 +3,8 @@ package com.cloudhandson.vpdbackoffice.web; import com.cloudhandson.vpdbackoffice.service.BearerTokenService; import com.cloudhandson.vpdbackoffice.service.PermissionService; import com.cloudhandson.vpdbackoffice.service.ProtectedObjectService; +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; @@ -26,9 +28,23 @@ public class DashboardController { @GetMapping("/") public String dashboard(Model model) { - model.addAttribute("objects", protectedObjectService.findEnabled()); - model.addAttribute("roles", permissionService.findRoles()); - model.addAttribute("tokens", bearerTokenService.findAll()); + try { + model.addAttribute("objects", protectedObjectService.findEnabled()); + model.addAttribute("roles", permissionService.findRoles()); + model.addAttribute("tokens", bearerTokenService.findAll()); + } catch (DataAccessException e) { + model.addAttribute("objects", List.of()); + model.addAttribute("roles", List.of()); + model.addAttribute("tokens", List.of()); + model.addAttribute("setupError", dbSetupMessage(e)); + } return "dashboard"; } + + private String dbSetupMessage(DataAccessException e) { + String detail = e.getMostSpecificCause() == null ? e.getMessage() : e.getMostSpecificCause().getMessage(); + return "ADB 연결을 확인할 수 없습니다. BACKOFFICE_DB_URL, BACKOFFICE_DB_USERNAME, " + + "BACKOFFICE_DB_PASSWORD를 설정하고 ./run.sh backoffice-support를 먼저 실행하세요. 상세: " + + detail; + } } diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html index efee94c..b86cdbb 100644 --- a/src/main/resources/templates/dashboard.html +++ b/src/main/resources/templates/dashboard.html @@ -9,6 +9,14 @@

보호 객체, Bearer Token, ORDS 검증 상태를 확인합니다.

+
+
DB 연결 설정이 필요합니다.
+
+
+ ./run.sh backoffice-support +
+
+
보호 객체 diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html index 8ff730b..2243e5e 100644 --- a/src/main/resources/templates/error.html +++ b/src/main/resources/templates/error.html @@ -5,7 +5,7 @@
- 처리할 수 없습니다. + 처리할 수 없습니다.
대시보드