From 52fbceb53c733675ef1db81097f0a057cb1ca90f Mon Sep 17 00:00:00 2001 From: teddy Date: Thu, 18 Dec 2025 14:18:34 +0900 Subject: [PATCH] =?UTF-8?q?enum=20=EA=B3=B5=ED=86=B5=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../code/CommonCodeApiController.java | 25 ++++++++++-- .../code/service/CommonCodeService.java | 11 +++++- .../kamcoback/common/utils/enums/Enums.java | 38 +++++++++++++++---- 3 files changed, 62 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java b/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java index e8b47c06..085d64f8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java @@ -291,7 +291,7 @@ public class CommonCodeApiController { return ApiResponseDto.ok(count); } - @Operation(summary = "코드 조회", description = "enum 코드 조회") + @Operation(summary = "코드 조회", description = "코드 리스트 조회") @ApiResponses( value = { @ApiResponse( @@ -303,8 +303,25 @@ public class CommonCodeApiController { schema = @Schema(implementation = CodeDto.class))), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) - @GetMapping("/enums") - public ApiResponseDto>> getCode() { - return ApiResponseDto.ok(commonCodeService.getAllCodes()); + @GetMapping("/type/codes") + public ApiResponseDto>> getTypeCodes() { + 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> getTypeCode(@PathVariable String type) { + return ApiResponseDto.ok(commonCodeService.getTypeCode(type)); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java b/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java index c4c48c1d..bcc96a69 100644 --- a/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java +++ b/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java @@ -122,7 +122,16 @@ public class CommonCodeService { return commonCodeCoreService.getCode(parentCodeCd, childCodeCd); } - public Map> getAllCodes() { + public List getTypeCode(String type) { + return Enums.getCodes(type); + } + + /** + * 공통코드 리스트 조회 + * + * @return + */ + public Map> getTypeCodes() { return Enums.getAllCodes(); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java b/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java index 17e413e3..21d61599 100644 --- a/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java +++ b/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java @@ -10,21 +10,27 @@ import org.reflections.Reflections; 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>> exposedEnumMap = scanExposedEnumMap(); + + // code로 enum 찾기 public static & EnumType> E fromId(Class enumClass, String id) { if (id == null) { return null; } + for (E e : enumClass.getEnumConstants()) { if (id.equalsIgnoreCase(e.getId())) { return e; } } - return null; // 못 찾으면 null + return null; } + // enum -> CodeDto list public static List toList(Class> enumClass) { - Object[] enums = enumClass.getEnumConstants(); return Arrays.stream(enums) @@ -33,17 +39,35 @@ public class Enums { .toList(); } - public static Map> getAllCodes() { + /** 특정 타입(enum)만 조회 /codes/{type} -> type = RoleType 같은 값 */ + public static List getCodes(String type) { + Class> 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> getAllCodes() { + Map> result = new HashMap<>(); + for (Map.Entry>> e : exposedEnumMap.entrySet()) { + result.put(e.getKey(), toList(e.getValue())); + } + return result; + } + + /** ✅ @CodeExpose + EnumType 인 enum만 스캔해서 Map 구성 */ + private static Map>> scanExposedEnumMap() { + Reflections reflections = new Reflections(BASE_PACKAGE); Set> types = reflections.getTypesAnnotatedWith(CodeExpose.class); - Map> result = new HashMap<>(); + Map>> result = new HashMap<>(); for (Class clazz : types) { if (clazz.isEnum() && EnumType.class.isAssignableFrom(clazz)) { - result.put(clazz.getSimpleName(), Enums.toList((Class>) clazz)); + result.put(clazz.getSimpleName(), (Class>) clazz); } } return result;