하석형 하석형 05-19
250519 하석형 콘텐츠 영문명/컴포넌트 URL 중복 검사, 중복검사예외 시 커스텀메세지 출력 설정
@3e1704e6239e34626244e824fda8e5c4ee357cdc
src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
@@ -87,7 +87,7 @@
         try {
             boolean result = bbsCnDAO.bbsCnIdCheck(bbsCnVO);
             if(result) {
-                throw new CustomDataDuplicationException("이미 존재하는 게시판 아이디입니다.");
+                throw new CustomDataDuplicationException("이미 존재하는 게시판 아이디입니다.", "Y");
             }
 
             return result;
src/main/java/com/takensoft/cms/bbs/service/Impl/BbsMngServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/BbsMngServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/BbsMngServiceImpl.java
@@ -66,7 +66,7 @@
         try {
             boolean result = bbsMngDAO.bbsMngIdCheck(bbsMngVO);
             if(result) {
-                throw new CustomDataDuplicationException("이미 존재하는 게시판 아이디입니다.");
+                throw new CustomDataDuplicationException("이미 존재하는 게시판 아이디입니다.", "Y");
             }
 
             return result;
src/main/java/com/takensoft/cms/contsType/dao/ContsTypeDAO.java
--- src/main/java/com/takensoft/cms/contsType/dao/ContsTypeDAO.java
+++ src/main/java/com/takensoft/cms/contsType/dao/ContsTypeDAO.java
@@ -18,6 +18,7 @@
  *  2024.04.29  |    박정하     | findAllByExpsr 추가
  *  2024.05.02  |   takensoft | findByContsAuthrt 추가
  *  2025.03.13  |    방선주    | 코드 리펙토링
+ *  2025.05.19  |    하석형     | findByCheckContsEngNm, findByCheckCompnCrs 추가
  *
  * 콘텐츠 유형 관리 관련 DAO
  */
@@ -25,6 +26,22 @@
 public interface ContsTypeDAO {
 
     /**
+     * @param contsEngNm - 콘텐츠 영문명
+     * @return boolean - 콘텐츠 영문명 중복 검사 결과
+     *
+     * 콘텐츠 영문명 중복 확인
+     */
+    boolean findByCheckContsEngNm(String contsEngNm);
+
+    /**
+     * @param compnCrs - 컴포넌트 URL
+     * @return boolean - 컴포넌트 URL 중복 검사 결과
+     *
+     * 컴포넌트 URL 중복 확인
+     */
+    boolean findByCheckCompnCrs(String compnCrs);
+
+    /**
      * @param contsTypeVO - 컨텐츠 유형 관리 객체
      * @return int - 등록 성공 여부
      *
src/main/java/com/takensoft/cms/contsType/service/ContsTypeService.java
--- src/main/java/com/takensoft/cms/contsType/service/ContsTypeService.java
+++ src/main/java/com/takensoft/cms/contsType/service/ContsTypeService.java
@@ -15,12 +15,29 @@
  *  2024.04.29  |    박정하     | findAllByExpsr 추가
  *  2024.05.10  |  takensoft   | findByContsAuthrt 추가
  *  2025.03.14  |    방선주     | 코드 리펙토링
+ *  2025.05.19  |    하석형     | findByCheckContsEngNm, findByCheckCompnCrs 추가
  *
  * 콘텐츠 유형 관리 관련 인터페이스
  */
 public interface ContsTypeService {
 
     /**
+     * @param contsEngNm - 콘텐츠 영문명
+     * @return boolean - 콘텐츠 영문명 중복 검사 결과
+     *
+     * 콘텐츠 영문명 중복 검사
+     */
+    boolean findByCheckContsEngNm(String contsEngNm);
+
+    /**
+     * @param compnCrs - 컴포넌트 URL
+     * @return boolean - 컴포넌트 URL 중복 검사 결과
+     *
+     * 컴포넌트 URL 중복 검사
+     */
+    boolean findByCheckCompnCrs(String compnCrs);
+
+    /**
      * @param contsTypeVO - 콘텐츠 유형 VO
      * @return HashMap<String, Object> - 콘텐츠 유형 등록 결과
      *
src/main/java/com/takensoft/cms/contsType/service/Impl/ContsTypeServiceImpl.java
--- src/main/java/com/takensoft/cms/contsType/service/Impl/ContsTypeServiceImpl.java
+++ src/main/java/com/takensoft/cms/contsType/service/Impl/ContsTypeServiceImpl.java
@@ -35,6 +35,7 @@
  *  2024.05.08  |  takensoft   | groupAndShareAuth, findMostComprehensiveAuth 추가
  *  2025.03.14  |    방선주     | 코드 리펙토링
  *  2025.04.04  |    하석형     | 콘텐츠 유형 등록 시 메뉴 필수 등록
+ *  2025.05.19  |    하석형     | findByCheckContsEngNm, findByCheckCompnCrs 추가
  *
  * EgovAbstractServiceImpl - 전자정부 프레임워크에서 제공하는 추상 서비스 구현 클래스
  * ContsTypeService - 콘텐츠 유형 관리 관련 인터페이스 상속
@@ -53,6 +54,54 @@
     private final MenuDAO menuDAO;
 
     /**
+     * @param contsEngNm - 콘텐츠 영문명
+     * @return boolean - 콘텐츠 영문명 중복 여부
+     * @throws CustomDataDuplicationException - 데이터 중복 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 콘텐츠 영문명 중복 검사
+     */
+    @Override
+    public boolean findByCheckContsEngNm(String contsEngNm) {
+        try {
+            boolean result = contsTypeDAO.findByCheckContsEngNm(contsEngNm);
+            if (result) {
+                throw new CustomDataDuplicationException("이미 사용 중인 콘텐츠 영문명입니다.", "Y");
+            }
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    /**
+     * @param compnCrs - 컴포넌트 URL
+     * @return boolean - 컴포넌트 URL 중복 여부
+     * @throws CustomDataDuplicationException - 데이터 중복 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 컴포넌트 URL 중복 검사
+     */
+    @Override
+    public boolean findByCheckCompnCrs(String compnCrs) {
+        try {
+            boolean result = contsTypeDAO.findByCheckCompnCrs(compnCrs);
+            if (result) {
+                throw new CustomDataDuplicationException("이미 사용 중인 컴포넌트 URL입니다.", "Y");
+            }
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+
+    /**
      * @param contsTypeVO - 콘텐츠 유형 객체
      * @return HashMap<String, Object> - 콘텐츠 유형 등록 결과값
      * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
src/main/java/com/takensoft/cms/contsType/web/ContsTypeController.java
--- src/main/java/com/takensoft/cms/contsType/web/ContsTypeController.java
+++ src/main/java/com/takensoft/cms/contsType/web/ContsTypeController.java
@@ -3,9 +3,11 @@
 import com.takensoft.cms.contsType.service.ContsTypeService;
 import com.takensoft.cms.contsType.vo.ContsAuthrtVO;
 import com.takensoft.cms.contsType.vo.ContsTypeVO;
+import com.takensoft.common.exception.CustomIdTakenException;
 import com.takensoft.common.message.MessageCode;
 import com.takensoft.common.util.ResponseUtil;
 import lombok.RequiredArgsConstructor;
+import org.springframework.dao.DataAccessException;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -42,6 +44,11 @@
 
     @PostMapping("/saveProc.json")
     public ResponseEntity<?> savePorc(@RequestBody ContsTypeVO contsTypeVO){
+        // 콘텐츠 영문명 중복 검사
+        boolean isEngNmExist = contsTypeService.findByCheckContsEngNm(contsTypeVO.getContsEngNm());
+        // 컴포넌트 URL 중복 검사
+        boolean isCompnCrsExist = contsTypeService.findByCheckCompnCrs(contsTypeVO.getCompnCrs());
+
         // 콘텐츠 유형 등록
         HashMap<String, Object> result = contsTypeService.contsSave(contsTypeVO);
         // 응답 처리
@@ -56,6 +63,11 @@
      */
     @PostMapping("/updateProc.json")
     public ResponseEntity<?> updateProc(@RequestBody ContsTypeVO contsTypeVO) {
+        // 콘텐츠 영문명 중복 검사
+        boolean isEngNmExist = contsTypeService.findByCheckContsEngNm(contsTypeVO.getContsEngNm());
+        // 컴포넌트 URL 중복 검사
+        boolean isCompnCrsExist = contsTypeService.findByCheckCompnCrs(contsTypeVO.getCompnCrs());
+
         // 콘텐츠 유형 수정 처리
         int result = contsTypeService.contsUpdate(contsTypeVO);
         // 응답 처리
src/main/java/com/takensoft/cms/dept/web/DeptController.java
--- src/main/java/com/takensoft/cms/dept/web/DeptController.java
+++ src/main/java/com/takensoft/cms/dept/web/DeptController.java
@@ -58,7 +58,7 @@
     }
 
     /**
-     * @param mbrList - 부서 사용자 정보
+     * @param deptMbrList - 부서 사용자 목록
      * @return ResponseEntity - 부서 사용자 등록 결과
      *
      * 부서 사용자 등록
src/main/java/com/takensoft/common/exception/CustomDataDuplicationException.java
--- src/main/java/com/takensoft/common/exception/CustomDataDuplicationException.java
+++ src/main/java/com/takensoft/common/exception/CustomDataDuplicationException.java
@@ -6,6 +6,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.03.12  |    하석형     | 최초 등록
+ *  2025.05.19  |    하석형     | 커스텀 메세지 출력 여부 추가
  *
  * RuntimeException - 실행 중 발생하는 예외를 처리하는 기본 클래스
  *
@@ -13,14 +14,21 @@
  */
 public class CustomDataDuplicationException extends RuntimeException {
 
+    private String isCustom; // 커스텀 메세지 출력 여부
+
     public CustomDataDuplicationException() {
     }
 
-    public CustomDataDuplicationException(String message) {
+    public CustomDataDuplicationException(String message, String isCustom) {
         super(message);
+        this.isCustom = isCustom;
     }
 
     public CustomDataDuplicationException(String message, Throwable cause) {
         super(message, cause);
     }
+
+    public String getCustom() {
+        return isCustom;
+    }
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/common/exception/GlobalExceptionHandler.java
--- src/main/java/com/takensoft/common/exception/GlobalExceptionHandler.java
+++ src/main/java/com/takensoft/common/exception/GlobalExceptionHandler.java
@@ -267,7 +267,12 @@
     @ExceptionHandler(CustomDataDuplicationException.class)
     public ResponseEntity<?> handleCustomDataDuplicationException(CustomDataDuplicationException cdde) {
         logError(cdde);
-        return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_DATA);
+        // CustomDataDuplicationException의 커스텀 메시지가 "Y"인 경우
+        if(cdde.getCustom().equals("Y")) {
+            return resUtil.errorRes(HttpStatus.INTERNAL_SERVER_ERROR, cdde.getMessage());
+        } else {
+            return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_DATA);
+        }
     }
 
     /**
src/main/resources/mybatis/mapper/contsType/contsType-SQL.xml
--- src/main/resources/mybatis/mapper/contsType/contsType-SQL.xml
+++ src/main/resources/mybatis/mapper/contsType/contsType-SQL.xml
@@ -28,6 +28,30 @@
     </resultMap>
 
     <!--
+        작성자 : 하석형
+        작성일 : 2025.05.19
+        내 용 : 콘텐츠 영문명 중복 확인
+    -->
+    <select id="findByCheckContsEngNm" parameterType="String" resultType="boolean">
+        SELECT COUNT(conts_eng_nm)
+        FROM conts_type_mng
+        WHERE LOWER(conts_eng_nm) = LOWER(#{contsEngNm})
+          AND use_yn = 'Y'
+    </select>
+
+    <!--
+        작성자 : 하석형
+        작성일 : 2025.05.19
+        내 용 : 컴포넌트 URL 중복 확인
+    -->
+    <select id="findByCheckCompnCrs" parameterType="String" resultType="boolean">
+        SELECT COUNT(compn_crs)
+        FROM conts_type_mng
+        WHERE LOWER(compn_crs) = LOWER(#{compnCrs})
+          AND use_yn = 'Y'
+    </select>
+
+    <!--
         작성자 : takensoft
         작성일 : 2024.04.17
         내 용 : 콘텐츠 유형 등록
Add a comment
List