[공통코드] 기본 API 구현 완료료
This commit is contained in:
@@ -24,7 +24,7 @@ import java.util.List;
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/admin/common-code")
|
@RequestMapping("/admin/common-codes")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Tag(name = "공통 코드 관리", description = "공통 코드 및 그룹 코드 관리 API")
|
@Tag(name = "공통 코드 관리", description = "공통 코드 및 그룹 코드 관리 API")
|
||||||
public class CommonCodeController {
|
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 com.bio.bio_backend.domain.admin.common_code.entity.CommonCode;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
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 org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface CommonCodeRepository extends JpaRepository<CommonCode, Long> {
|
public interface CommonCodeRepository extends JpaRepository<CommonCode, Long>, CommonCodeRepositoryCustom {
|
||||||
|
|
||||||
Optional<CommonCode> findByCode(String code);
|
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 existsByCode(String code);
|
||||||
|
|
||||||
boolean existsByGroupCode(String groupCode);
|
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);
|
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);
|
boolean existsByCode(String code);
|
||||||
}
|
}
|
||||||
|
@@ -20,9 +20,7 @@ public interface CommonCodeService {
|
|||||||
void updateCode(String code, CommonCodeDto codeDto);
|
void updateCode(String code, CommonCodeDto codeDto);
|
||||||
void deleteCode(String code);
|
void deleteCode(String code);
|
||||||
CommonCodeDto getCode(String code);
|
CommonCodeDto getCode(String code);
|
||||||
List<CommonCodeDto> getCodesByGroupCode(String groupCode);
|
|
||||||
List<CommonCodeDto> getActiveCodesByGroupCode(String groupCode);
|
List<CommonCodeDto> getActiveCodesByGroupCode(String groupCode);
|
||||||
List<CommonCodeDto> getCodesByParentCode(String parentCode);
|
|
||||||
List<CommonCodeDto> getActiveCodesByParentCode(String parentCode);
|
List<CommonCodeDto> getActiveCodesByParentCode(String parentCode);
|
||||||
List<CommonCodeDto> getAllCodes();
|
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.mapper.CommonGroupCodeMapper;
|
||||||
import com.bio.bio_backend.domain.admin.common_code.repository.CommonCodeRepository;
|
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.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.exception.ApiException;
|
||||||
import com.bio.bio_backend.global.constants.ApiResponseCode;
|
import com.bio.bio_backend.global.constants.ApiResponseCode;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -46,7 +45,7 @@ public class CommonCodeServiceImpl implements CommonCodeService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public void updateGroupCode(String code, CommonGroupCodeDto groupCodeDto) {
|
public void updateGroupCode(String code, CommonGroupCodeDto groupCodeDto) {
|
||||||
CommonGroupCode existingGroupCode = commonGroupCodeRepository.findByCode(code)
|
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);
|
commonGroupCodeMapper.updateCommonGroupCodeFromDto(groupCodeDto, existingGroupCode);
|
||||||
commonGroupCodeRepository.save(existingGroupCode);
|
commonGroupCodeRepository.save(existingGroupCode);
|
||||||
@@ -56,11 +55,11 @@ public class CommonCodeServiceImpl implements CommonCodeService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public void deleteGroupCode(String code) {
|
public void deleteGroupCode(String code) {
|
||||||
CommonGroupCode groupCode = commonGroupCodeRepository.findByCode(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)) {
|
if (commonCodeRepository.existsByGroupCode(code)) {
|
||||||
throw new ApiException(ApiResponseCode.COMMON_BAD_REQUEST, "하위 공통 코드가 존재하여 삭제할 수 없습니다: " + code);
|
throw new ApiException(ApiResponseCode.COMMON_CODE_ERROR_001);
|
||||||
}
|
}
|
||||||
|
|
||||||
commonGroupCodeRepository.delete(groupCode);
|
commonGroupCodeRepository.delete(groupCode);
|
||||||
@@ -69,7 +68,7 @@ public class CommonCodeServiceImpl implements CommonCodeService {
|
|||||||
@Override
|
@Override
|
||||||
public CommonGroupCodeDto getGroupCode(String code) {
|
public CommonGroupCodeDto getGroupCode(String code) {
|
||||||
CommonGroupCode groupCode = commonGroupCodeRepository.findByCode(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);
|
return commonGroupCodeMapper.toCommonGroupCodeDto(groupCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,12 +89,12 @@ public class CommonCodeServiceImpl implements CommonCodeService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public CommonCodeDto createCode(CommonCodeDto commonCodeDto) {
|
public CommonCodeDto createCode(CommonCodeDto commonCodeDto) {
|
||||||
if (commonCodeRepository.existsByCode(commonCodeDto.getCode())) {
|
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())) {
|
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);
|
CommonCode commonCode = commonCodeMapper.toCommonCode(commonCodeDto);
|
||||||
@@ -107,7 +106,7 @@ public class CommonCodeServiceImpl implements CommonCodeService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public void updateCode(String code, CommonCodeDto commonCodeDto) {
|
public void updateCode(String code, CommonCodeDto commonCodeDto) {
|
||||||
CommonCode existingCommonCode = commonCodeRepository.findByCode(code)
|
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);
|
commonCodeMapper.updateCommonCodeFromDto(commonCodeDto, existingCommonCode);
|
||||||
commonCodeRepository.save(existingCommonCode);
|
commonCodeRepository.save(existingCommonCode);
|
||||||
@@ -117,11 +116,11 @@ public class CommonCodeServiceImpl implements CommonCodeService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public void deleteCode(String code) {
|
public void deleteCode(String code) {
|
||||||
CommonCode commonCode = commonCodeRepository.findByCode(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)) {
|
if (commonCodeRepository.existsByParentCode(code)) {
|
||||||
throw new ApiException(ApiResponseCode.COMMON_BAD_REQUEST, "하위 공통 코드가 존재하여 삭제할 수 없습니다: " + code);
|
throw new ApiException(ApiResponseCode.COMMON_CODE_ERROR_001);
|
||||||
}
|
}
|
||||||
|
|
||||||
commonCodeRepository.delete(commonCode);
|
commonCodeRepository.delete(commonCode);
|
||||||
@@ -130,31 +129,19 @@ public class CommonCodeServiceImpl implements CommonCodeService {
|
|||||||
@Override
|
@Override
|
||||||
public CommonCodeDto getCode(String code) {
|
public CommonCodeDto getCode(String code) {
|
||||||
CommonCode commonCode = commonCodeRepository.findByCode(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);
|
return commonCodeMapper.toCommonCodeDto(commonCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<CommonCodeDto> getCodesByGroupCode(String groupCode) {
|
|
||||||
List<CommonCode> commonCodes = commonCodeRepository.findByGroupCodeAndUseFlagOrderBySortOrderAsc(groupCode, true);
|
|
||||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CommonCodeDto> getActiveCodesByGroupCode(String groupCode) {
|
public List<CommonCodeDto> getActiveCodesByGroupCode(String groupCode) {
|
||||||
List<CommonCode> commonCodes = commonCodeRepository.findActiveCodesByGroupCodeOrderBySortOrder(groupCode, true);
|
List<CommonCode> commonCodes = commonCodeRepository.findByGroupCode(groupCode);
|
||||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<CommonCodeDto> getCodesByParentCode(String parentCode) {
|
|
||||||
List<CommonCode> commonCodes = commonCodeRepository.findByParentCodeAndUseFlagOrderBySortOrderAsc(parentCode, true);
|
|
||||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CommonCodeDto> getActiveCodesByParentCode(String parentCode) {
|
public List<CommonCodeDto> getActiveCodesByParentCode(String parentCode) {
|
||||||
List<CommonCode> commonCodes = commonCodeRepository.findActiveCodesByParentCodeOrderBySortOrder(parentCode, true);
|
List<CommonCode> commonCodes = commonCodeRepository.findByParentCode(parentCode);
|
||||||
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
return commonCodeMapper.toCommonCodeDtoList(commonCodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -84,7 +84,13 @@ public enum ApiResponseCode {
|
|||||||
// 500 Internal Server Error
|
// 500 Internal Server Error
|
||||||
FILE_UPLOAD_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "파일 업로드에 실패했습니다"),
|
FILE_UPLOAD_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "파일 업로드에 실패했습니다"),
|
||||||
FILE_DOWNLOAD_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 int statusCode;
|
||||||
private final String description;
|
private final String description;
|
||||||
|
Reference in New Issue
Block a user