[공통코드] 기본 API 구현 완료료
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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<CommonCode, Long> {
|
||||
public interface CommonCodeRepository extends JpaRepository<CommonCode, Long>, CommonCodeRepositoryCustom {
|
||||
|
||||
Optional<CommonCode> findByCode(String code);
|
||||
|
||||
List<CommonCode> findByGroupCodeAndUseFlagOrderBySortOrderAsc(String groupCode, Boolean useFlag);
|
||||
|
||||
List<CommonCode> 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<CommonCode> 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<CommonCode> findActiveCodesByParentCodeOrderBySortOrder(@Param("parentCode") String parentCode, @Param("useFlag") Boolean useFlag);
|
||||
|
||||
boolean existsByCode(String code);
|
||||
|
||||
boolean existsByGroupCode(String groupCode);
|
||||
|
@@ -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<CommonCode> 활성화된 공통 코드 목록
|
||||
*/
|
||||
List<CommonCode> findByGroupCode(String groupCode);
|
||||
|
||||
/**
|
||||
* 부모 코드로 활성화된 공통 코드들을 정렬 순서대로 조회합니다.
|
||||
*
|
||||
* @param parentCode 부모 코드
|
||||
* @return List<CommonCode> 활성화된 공통 코드 목록
|
||||
*/
|
||||
List<CommonCode> findByParentCode(String parentCode);
|
||||
}
|
@@ -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<CommonCode> 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<CommonCode> findByParentCode(String parentCode) {
|
||||
return queryFactory
|
||||
.selectFrom(commonCode)
|
||||
.where(commonCode.parentCode.eq(parentCode)
|
||||
.and(commonCode.useFlag.eq(true)))
|
||||
.orderBy(commonCode.sortOrder.asc())
|
||||
.fetch();
|
||||
}
|
||||
}
|
@@ -16,8 +16,5 @@ public interface CommonGroupCodeRepository extends JpaRepository<CommonGroupCode
|
||||
|
||||
List<CommonGroupCode> findByUseFlagOrderBySortOrderAsc(Boolean useFlag);
|
||||
|
||||
@Query("SELECT cgc FROM CommonGroupCode cgc WHERE cgc.useFlag = :useFlag ORDER BY cgc.sortOrder ASC")
|
||||
List<CommonGroupCode> findActiveGroupCodesOrderBySortOrder(@Param("useFlag") Boolean useFlag);
|
||||
|
||||
boolean existsByCode(String code);
|
||||
}
|
||||
|
@@ -20,9 +20,7 @@ public interface CommonCodeService {
|
||||
void updateCode(String code, CommonCodeDto codeDto);
|
||||
void deleteCode(String code);
|
||||
CommonCodeDto getCode(String code);
|
||||
List<CommonCodeDto> getCodesByGroupCode(String groupCode);
|
||||
List<CommonCodeDto> getActiveCodesByGroupCode(String groupCode);
|
||||
List<CommonCodeDto> getCodesByParentCode(String parentCode);
|
||||
List<CommonCodeDto> getActiveCodesByParentCode(String parentCode);
|
||||
List<CommonCodeDto> getAllCodes();
|
||||
}
|
||||
|
@@ -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<CommonCodeDto> getCodesByGroupCode(String groupCode) {
|
||||
List<CommonCode> commonCodes = commonCodeRepository.findByGroupCodeAndUseFlagOrderBySortOrderAsc(groupCode, true);
|
||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CommonCodeDto> getActiveCodesByGroupCode(String groupCode) {
|
||||
List<CommonCode> commonCodes = commonCodeRepository.findActiveCodesByGroupCodeOrderBySortOrder(groupCode, true);
|
||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CommonCodeDto> getCodesByParentCode(String parentCode) {
|
||||
List<CommonCode> commonCodes = commonCodeRepository.findByParentCodeAndUseFlagOrderBySortOrderAsc(parentCode, true);
|
||||
List<CommonCode> commonCodes = commonCodeRepository.findByGroupCode(groupCode);
|
||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CommonCodeDto> getActiveCodesByParentCode(String parentCode) {
|
||||
List<CommonCode> commonCodes = commonCodeRepository.findActiveCodesByParentCodeOrderBySortOrder(parentCode, true);
|
||||
List<CommonCode> commonCodes = commonCodeRepository.findByParentCode(parentCode);
|
||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user