From d7646d2c1c2f274356597f4610657b74738175f5 Mon Sep 17 00:00:00 2001 From: sohot8653 Date: Mon, 1 Sep 2025 10:19:39 +0900 Subject: [PATCH] =?UTF-8?q?[=EA=B3=B5=ED=86=B5=EC=BD=94=EB=93=9C]=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20API=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommonCodeController.java | 2 +- .../repository/CommonCodeRepository.java | 14 +----- .../CommonCodeRepositoryCustom.java | 27 +++++++++++ .../repository/CommonCodeRepositoryImpl.java | 46 +++++++++++++++++++ .../repository/CommonGroupCodeRepository.java | 3 -- .../service/CommonCodeService.java | 2 - .../service/CommonCodeServiceImpl.java | 37 +++++---------- .../global/constants/ApiResponseCode.java | 8 +++- 8 files changed, 94 insertions(+), 45 deletions(-) create mode 100644 src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryCustom.java create mode 100644 src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryImpl.java diff --git a/src/main/java/com/bio/bio_backend/domain/admin/common_code/controller/CommonCodeController.java b/src/main/java/com/bio/bio_backend/domain/admin/common_code/controller/CommonCodeController.java index dc62e7c..30866df 100644 --- a/src/main/java/com/bio/bio_backend/domain/admin/common_code/controller/CommonCodeController.java +++ b/src/main/java/com/bio/bio_backend/domain/admin/common_code/controller/CommonCodeController.java @@ -24,7 +24,7 @@ import java.util.List; @Slf4j @RestController -@RequestMapping("/admin/common-code") +@RequestMapping("/admin/common-codes") @RequiredArgsConstructor @Tag(name = "공통 코드 관리", description = "공통 코드 및 그룹 코드 관리 API") public class CommonCodeController { diff --git a/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepository.java b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepository.java index 39445b4..63878b1 100644 --- a/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepository.java +++ b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepository.java @@ -2,28 +2,16 @@ package com.bio.bio_backend.domain.admin.common_code.repository; import com.bio.bio_backend.domain.admin.common_code.entity.CommonCode; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Optional; @Repository -public interface CommonCodeRepository extends JpaRepository { +public interface CommonCodeRepository extends JpaRepository, CommonCodeRepositoryCustom { Optional findByCode(String code); - List findByGroupCodeAndUseFlagOrderBySortOrderAsc(String groupCode, Boolean useFlag); - - List findByParentCodeAndUseFlagOrderBySortOrderAsc(String parentCode, Boolean useFlag); - - @Query("SELECT cc FROM CommonCode cc WHERE cc.groupCode = :groupCode AND cc.useFlag = :useFlag ORDER BY cc.sortOrder ASC") - List findActiveCodesByGroupCodeOrderBySortOrder(@Param("groupCode") String groupCode, @Param("useFlag") Boolean useFlag); - - @Query("SELECT cc FROM CommonCode cc WHERE cc.parentCode = :parentCode AND cc.useFlag = :useFlag ORDER BY cc.sortOrder ASC") - List findActiveCodesByParentCodeOrderBySortOrder(@Param("parentCode") String parentCode, @Param("useFlag") Boolean useFlag); - boolean existsByCode(String code); boolean existsByGroupCode(String groupCode); diff --git a/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryCustom.java b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryCustom.java new file mode 100644 index 0000000..240a837 --- /dev/null +++ b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryCustom.java @@ -0,0 +1,27 @@ +package com.bio.bio_backend.domain.admin.common_code.repository; + +import com.bio.bio_backend.domain.admin.common_code.entity.CommonCode; +import java.util.List; + +/** + * QueryDSL을 활용한 커스텀 쿼리 메서드들을 정의하는 인터페이스 + * 복잡한 쿼리나 동적 쿼리가 필요한 경우 이 인터페이스를 구현하여 사용합니다. + */ +public interface CommonCodeRepositoryCustom { + + /** + * 그룹 코드로 활성화된 공통 코드들을 정렬 순서대로 조회합니다. + * + * @param groupCode 그룹 코드 + * @return List 활성화된 공통 코드 목록 + */ + List findByGroupCode(String groupCode); + + /** + * 부모 코드로 활성화된 공통 코드들을 정렬 순서대로 조회합니다. + * + * @param parentCode 부모 코드 + * @return List 활성화된 공통 코드 목록 + */ + List findByParentCode(String parentCode); +} \ No newline at end of file diff --git a/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryImpl.java b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryImpl.java new file mode 100644 index 0000000..bf9a279 --- /dev/null +++ b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonCodeRepositoryImpl.java @@ -0,0 +1,46 @@ +package com.bio.bio_backend.domain.admin.common_code.repository; + +import com.bio.bio_backend.domain.admin.common_code.entity.CommonCode; +import com.bio.bio_backend.domain.admin.common_code.entity.QCommonCode; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * QueryDSL을 활용하여 CommonCodeRepositoryCustom 인터페이스를 구현하는 클래스 + * 복잡한 쿼리나 동적 쿼리를 QueryDSL로 작성하여 성능과 가독성을 향상시킵니다. + */ +@Repository +@RequiredArgsConstructor +public class CommonCodeRepositoryImpl implements CommonCodeRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + /** + * QCommonCode 인스턴스를 생성하여 쿼리에서 사용합니다. + * QueryDSL의 Q클래스를 통해 타입 안전한 쿼리 작성이 가능합니다. + */ + private final QCommonCode commonCode = QCommonCode.commonCode; + + @Override + public List findByGroupCode(String groupCode) { + return queryFactory + .selectFrom(commonCode) + .where(commonCode.groupCode.eq(groupCode) + .and(commonCode.useFlag.eq(true))) + .orderBy(commonCode.sortOrder.asc()) + .fetch(); + } + + @Override + public List findByParentCode(String parentCode) { + return queryFactory + .selectFrom(commonCode) + .where(commonCode.parentCode.eq(parentCode) + .and(commonCode.useFlag.eq(true))) + .orderBy(commonCode.sortOrder.asc()) + .fetch(); + } +} diff --git a/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonGroupCodeRepository.java b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonGroupCodeRepository.java index 889d4a2..24659be 100644 --- a/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonGroupCodeRepository.java +++ b/src/main/java/com/bio/bio_backend/domain/admin/common_code/repository/CommonGroupCodeRepository.java @@ -16,8 +16,5 @@ public interface CommonGroupCodeRepository extends JpaRepository findByUseFlagOrderBySortOrderAsc(Boolean useFlag); - @Query("SELECT cgc FROM CommonGroupCode cgc WHERE cgc.useFlag = :useFlag ORDER BY cgc.sortOrder ASC") - List findActiveGroupCodesOrderBySortOrder(@Param("useFlag") Boolean useFlag); - boolean existsByCode(String code); } diff --git a/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeService.java b/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeService.java index d84e0ca..561485c 100644 --- a/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeService.java +++ b/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeService.java @@ -20,9 +20,7 @@ public interface CommonCodeService { void updateCode(String code, CommonCodeDto codeDto); void deleteCode(String code); CommonCodeDto getCode(String code); - List getCodesByGroupCode(String groupCode); List getActiveCodesByGroupCode(String groupCode); - List getCodesByParentCode(String parentCode); List getActiveCodesByParentCode(String parentCode); List getAllCodes(); } diff --git a/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeServiceImpl.java b/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeServiceImpl.java index b9fb8b5..57d32cb 100644 --- a/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeServiceImpl.java +++ b/src/main/java/com/bio/bio_backend/domain/admin/common_code/service/CommonCodeServiceImpl.java @@ -8,7 +8,6 @@ import com.bio.bio_backend.domain.admin.common_code.mapper.CommonCodeMapper; import com.bio.bio_backend.domain.admin.common_code.mapper.CommonGroupCodeMapper; import com.bio.bio_backend.domain.admin.common_code.repository.CommonCodeRepository; import com.bio.bio_backend.domain.admin.common_code.repository.CommonGroupCodeRepository; -import com.bio.bio_backend.global.constants.AppConstants; import com.bio.bio_backend.global.exception.ApiException; import com.bio.bio_backend.global.constants.ApiResponseCode; import lombok.RequiredArgsConstructor; @@ -46,7 +45,7 @@ public class CommonCodeServiceImpl implements CommonCodeService { @Transactional public void updateGroupCode(String code, CommonGroupCodeDto groupCodeDto) { CommonGroupCode existingGroupCode = commonGroupCodeRepository.findByCode(code) - .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_TARGET_NOT_FOUND, "그룹 코드를 찾을 수 없습니다: " + code)); + .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_TARGET_NOT_FOUND)); commonGroupCodeMapper.updateCommonGroupCodeFromDto(groupCodeDto, existingGroupCode); commonGroupCodeRepository.save(existingGroupCode); @@ -56,11 +55,11 @@ public class CommonCodeServiceImpl implements CommonCodeService { @Transactional public void deleteGroupCode(String code) { CommonGroupCode groupCode = commonGroupCodeRepository.findByCode(code) - .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_NOT_FOUND, "그룹 코드를 찾을 수 없습니다: " + code)); + .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_TARGET_NOT_FOUND)); // 하위 공통 코드가 있는지 확인 if (commonCodeRepository.existsByGroupCode(code)) { - throw new ApiException(ApiResponseCode.COMMON_BAD_REQUEST, "하위 공통 코드가 존재하여 삭제할 수 없습니다: " + code); + throw new ApiException(ApiResponseCode.COMMON_CODE_ERROR_001); } commonGroupCodeRepository.delete(groupCode); @@ -69,7 +68,7 @@ public class CommonCodeServiceImpl implements CommonCodeService { @Override public CommonGroupCodeDto getGroupCode(String code) { CommonGroupCode groupCode = commonGroupCodeRepository.findByCode(code) - .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_NOT_FOUND, "그룹 코드를 찾을 수 없습니다: " + code)); + .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_NOT_FOUND)); return commonGroupCodeMapper.toCommonGroupCodeDto(groupCode); } @@ -90,12 +89,12 @@ public class CommonCodeServiceImpl implements CommonCodeService { @Transactional public CommonCodeDto createCode(CommonCodeDto commonCodeDto) { if (commonCodeRepository.existsByCode(commonCodeDto.getCode())) { - throw new ApiException(ApiResponseCode.USER_ID_DUPLICATE, "이미 존재하는 공통 코드입니다: " + commonCodeDto.getCode()); + throw new ApiException(ApiResponseCode.COMMON_CODE_DUPLICATE); } // 그룹 코드 존재 여부 확인 if (!commonGroupCodeRepository.existsByCode(commonCodeDto.getGroupCode())) { - throw new ApiException(ApiResponseCode.COMMON_BAD_REQUEST, "존재하지 않는 그룹 코드입니다: " + commonCodeDto.getGroupCode()); + throw new ApiException(ApiResponseCode.COMMON_CODE_ERROR_002); } CommonCode commonCode = commonCodeMapper.toCommonCode(commonCodeDto); @@ -107,7 +106,7 @@ public class CommonCodeServiceImpl implements CommonCodeService { @Transactional public void updateCode(String code, CommonCodeDto commonCodeDto) { CommonCode existingCommonCode = commonCodeRepository.findByCode(code) - .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_NOT_FOUND, "공통 코드를 찾을 수 없습니다: " + code)); + .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_CODE_ERROR_003)); commonCodeMapper.updateCommonCodeFromDto(commonCodeDto, existingCommonCode); commonCodeRepository.save(existingCommonCode); @@ -117,11 +116,11 @@ public class CommonCodeServiceImpl implements CommonCodeService { @Transactional public void deleteCode(String code) { CommonCode commonCode = commonCodeRepository.findByCode(code) - .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_NOT_FOUND, "공통 코드를 찾을 수 없습니다: " + code)); + .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_CODE_ERROR_003)); // 하위 공통 코드가 있는지 확인 if (commonCodeRepository.existsByParentCode(code)) { - throw new ApiException(ApiResponseCode.COMMON_BAD_REQUEST, "하위 공통 코드가 존재하여 삭제할 수 없습니다: " + code); + throw new ApiException(ApiResponseCode.COMMON_CODE_ERROR_001); } commonCodeRepository.delete(commonCode); @@ -130,31 +129,19 @@ public class CommonCodeServiceImpl implements CommonCodeService { @Override public CommonCodeDto getCode(String code) { CommonCode commonCode = commonCodeRepository.findByCode(code) - .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_NOT_FOUND, "공통 코드를 찾을 수 없습니다: " + code)); + .orElseThrow(() -> new ApiException(ApiResponseCode.COMMON_CODE_ERROR_003)); return commonCodeMapper.toCommonCodeDto(commonCode); } - @Override - public List getCodesByGroupCode(String groupCode) { - List commonCodes = commonCodeRepository.findByGroupCodeAndUseFlagOrderBySortOrderAsc(groupCode, true); - return commonCodeMapper.toCommonCodeDtoList(commonCodes); - } - @Override public List getActiveCodesByGroupCode(String groupCode) { - List commonCodes = commonCodeRepository.findActiveCodesByGroupCodeOrderBySortOrder(groupCode, true); - return commonCodeMapper.toCommonCodeDtoList(commonCodes); - } - - @Override - public List getCodesByParentCode(String parentCode) { - List commonCodes = commonCodeRepository.findByParentCodeAndUseFlagOrderBySortOrderAsc(parentCode, true); + List commonCodes = commonCodeRepository.findByGroupCode(groupCode); return commonCodeMapper.toCommonCodeDtoList(commonCodes); } @Override public List getActiveCodesByParentCode(String parentCode) { - List commonCodes = commonCodeRepository.findActiveCodesByParentCodeOrderBySortOrder(parentCode, true); + List commonCodes = commonCodeRepository.findByParentCode(parentCode); return commonCodeMapper.toCommonCodeDtoList(commonCodes); } diff --git a/src/main/java/com/bio/bio_backend/global/constants/ApiResponseCode.java b/src/main/java/com/bio/bio_backend/global/constants/ApiResponseCode.java index b10f764..ae7b561 100644 --- a/src/main/java/com/bio/bio_backend/global/constants/ApiResponseCode.java +++ b/src/main/java/com/bio/bio_backend/global/constants/ApiResponseCode.java @@ -84,7 +84,13 @@ public enum ApiResponseCode { // 500 Internal Server Error FILE_UPLOAD_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "파일 업로드에 실패했습니다"), FILE_DOWNLOAD_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "파일 다운로드에 실패했습니다"), - FILE_DELETE_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "파일 삭제에 실패했습니다"); + FILE_DELETE_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "파일 삭제에 실패했습니다"), + + /*공통 코드 관련 Code*/ + // 400 Bad Request + COMMON_CODE_ERROR_001(HttpStatus.BAD_REQUEST.value(), "하위 공통 코드가 존재하여 삭제할 수 없습니다."), + COMMON_CODE_ERROR_002(HttpStatus.BAD_REQUEST.value(), "존재하지 않는 그룹 코드입니다"), + COMMON_CODE_ERROR_003(HttpStatus.NOT_FOUND.value(), "공통 코드를 찾을 수 없습니다"); private final int statusCode; private final String description;