enum 공통코드로 추가
This commit is contained in:
@@ -291,7 +291,7 @@ public class CommonCodeApiController {
|
|||||||
return ApiResponseDto.ok(count);
|
return ApiResponseDto.ok(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "코드 조회", description = "enum 코드 조회")
|
@Operation(summary = "코드 조회", description = "코드 리스트 조회")
|
||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
value = {
|
value = {
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
@@ -303,8 +303,25 @@ public class CommonCodeApiController {
|
|||||||
schema = @Schema(implementation = CodeDto.class))),
|
schema = @Schema(implementation = CodeDto.class))),
|
||||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||||
})
|
})
|
||||||
@GetMapping("/enums")
|
@GetMapping("/type/codes")
|
||||||
public ApiResponseDto<Map<String, List<CodeDto>>> getCode() {
|
public ApiResponseDto<Map<String, List<CodeDto>>> getTypeCodes() {
|
||||||
return ApiResponseDto.ok(commonCodeService.getAllCodes());
|
return ApiResponseDto.ok(commonCodeService.getTypeCodes());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "코드 단건 조회", description = "코드 조회")
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
responseCode = "200",
|
||||||
|
description = "코드 조회 성공",
|
||||||
|
content =
|
||||||
|
@Content(
|
||||||
|
mediaType = "application/json",
|
||||||
|
schema = @Schema(implementation = CodeDto.class))),
|
||||||
|
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||||
|
})
|
||||||
|
@GetMapping("/type/{type}")
|
||||||
|
public ApiResponseDto<List<CodeDto>> getTypeCode(@PathVariable String type) {
|
||||||
|
return ApiResponseDto.ok(commonCodeService.getTypeCode(type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,16 @@ public class CommonCodeService {
|
|||||||
return commonCodeCoreService.getCode(parentCodeCd, childCodeCd);
|
return commonCodeCoreService.getCode(parentCodeCd, childCodeCd);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, List<CodeDto>> getAllCodes() {
|
public List<CodeDto> getTypeCode(String type) {
|
||||||
|
return Enums.getCodes(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 공통코드 리스트 조회
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Map<String, List<CodeDto>> getTypeCodes() {
|
||||||
return Enums.getAllCodes();
|
return Enums.getAllCodes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,21 +10,27 @@ import org.reflections.Reflections;
|
|||||||
|
|
||||||
public class Enums {
|
public class Enums {
|
||||||
|
|
||||||
// code로 text
|
private static final String BASE_PACKAGE = "com.kamco.cd.kamcoback";
|
||||||
|
|
||||||
|
/** 노출 가능한 enum만 모아둔 맵 key: enum simpleName (예: RoleType) value: enum Class */
|
||||||
|
private static final Map<String, Class<? extends Enum<?>>> exposedEnumMap = scanExposedEnumMap();
|
||||||
|
|
||||||
|
// code로 enum 찾기
|
||||||
public static <E extends Enum<E> & EnumType> E fromId(Class<E> enumClass, String id) {
|
public static <E extends Enum<E> & EnumType> E fromId(Class<E> enumClass, String id) {
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (E e : enumClass.getEnumConstants()) {
|
for (E e : enumClass.getEnumConstants()) {
|
||||||
if (id.equalsIgnoreCase(e.getId())) {
|
if (id.equalsIgnoreCase(e.getId())) {
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null; // 못 찾으면 null
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// enum -> CodeDto list
|
||||||
public static List<CodeDto> toList(Class<? extends Enum<?>> enumClass) {
|
public static List<CodeDto> toList(Class<? extends Enum<?>> enumClass) {
|
||||||
|
|
||||||
Object[] enums = enumClass.getEnumConstants();
|
Object[] enums = enumClass.getEnumConstants();
|
||||||
|
|
||||||
return Arrays.stream(enums)
|
return Arrays.stream(enums)
|
||||||
@@ -33,17 +39,35 @@ public class Enums {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, List<CodeDto>> getAllCodes() {
|
/** 특정 타입(enum)만 조회 /codes/{type} -> type = RoleType 같은 값 */
|
||||||
|
public static List<CodeDto> getCodes(String type) {
|
||||||
|
Class<? extends Enum<?>> enumClass = exposedEnumMap.get(type);
|
||||||
|
if (enumClass == null) {
|
||||||
|
throw new IllegalArgumentException("지원하지 않는 코드 타입: " + type);
|
||||||
|
}
|
||||||
|
return toList(enumClass);
|
||||||
|
}
|
||||||
|
|
||||||
Reflections reflections = new Reflections("com.kamco.cd.kamcoback");
|
/** 전체 enum 코드 조회 */
|
||||||
|
public static Map<String, List<CodeDto>> getAllCodes() {
|
||||||
|
Map<String, List<CodeDto>> result = new HashMap<>();
|
||||||
|
for (Map.Entry<String, Class<? extends Enum<?>>> e : exposedEnumMap.entrySet()) {
|
||||||
|
result.put(e.getKey(), toList(e.getValue()));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ✅ @CodeExpose + EnumType 인 enum만 스캔해서 Map 구성 */
|
||||||
|
private static Map<String, Class<? extends Enum<?>>> scanExposedEnumMap() {
|
||||||
|
Reflections reflections = new Reflections(BASE_PACKAGE);
|
||||||
|
|
||||||
Set<Class<?>> types = reflections.getTypesAnnotatedWith(CodeExpose.class);
|
Set<Class<?>> types = reflections.getTypesAnnotatedWith(CodeExpose.class);
|
||||||
|
|
||||||
Map<String, List<CodeDto>> result = new HashMap<>();
|
Map<String, Class<? extends Enum<?>>> result = new HashMap<>();
|
||||||
|
|
||||||
for (Class<?> clazz : types) {
|
for (Class<?> clazz : types) {
|
||||||
if (clazz.isEnum() && EnumType.class.isAssignableFrom(clazz)) {
|
if (clazz.isEnum() && EnumType.class.isAssignableFrom(clazz)) {
|
||||||
result.put(clazz.getSimpleName(), Enums.toList((Class<? extends Enum<?>>) clazz));
|
result.put(clazz.getSimpleName(), (Class<? extends Enum<?>>) clazz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user