From fe87f89382562e315e4bb52d648189816eae6c12 Mon Sep 17 00:00:00 2001 From: koosco Date: Sat, 23 Nov 2024 01:08:30 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20NOT=5FFOUND=5FGOAL=5FCATEGORY=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/groom/orbit/common/exception/ErrorCode.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/groom/orbit/common/exception/ErrorCode.java b/src/main/java/com/groom/orbit/common/exception/ErrorCode.java index 74ca045..f0cabbb 100644 --- a/src/main/java/com/groom/orbit/common/exception/ErrorCode.java +++ b/src/main/java/com/groom/orbit/common/exception/ErrorCode.java @@ -22,6 +22,7 @@ public enum ErrorCode { NOT_FOUND_SCHEDULE(40405, HttpStatus.NOT_FOUND, "해당 일정이 존재하지 않습니다."), NOT_FOUND_S3(40406, HttpStatus.NOT_FOUND, "해당 파일을 찾을 수 없습니다."), NOT_FOUND_QUEST(40407, HttpStatus.NOT_FOUND, "해당 퀘스트가 존재하지 않습니다."), + NOT_FOUND_GOAL_CATEGORY(40408, HttpStatus.NOT_FOUND, "해당 목표 카테고리가 존재하지 않습니다."), // Invalid Argument Error MISSING_REQUEST_PARAMETER(40000, HttpStatus.BAD_REQUEST, "필수 요청 파라미터가 누락되었습니다."), From 2c4459a9195b5c60a653425dd9442255343cc361 Mon Sep 17 00:00:00 2001 From: koosco Date: Sat, 23 Nov 2024 01:13:02 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20goal=20category=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orbit/goal/app/GoalQueryService.java | 19 ++++++++++ .../app/dto/GetGoalCategoryResponseDto.java | 5 +++ .../groom/orbit/goal/app/util/GoalConst.java | 10 ++++++ .../goal/controller/GoalQueryController.java | 24 +++++++++++++ .../com/groom/orbit/goal/dao/entity/Goal.java | 7 ++-- .../orbit/goal/dao/entity/GoalCategory.java | 35 +++++++++++++++++++ 6 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/groom/orbit/goal/app/GoalQueryService.java create mode 100644 src/main/java/com/groom/orbit/goal/app/dto/GetGoalCategoryResponseDto.java create mode 100644 src/main/java/com/groom/orbit/goal/app/util/GoalConst.java create mode 100644 src/main/java/com/groom/orbit/goal/controller/GoalQueryController.java create mode 100644 src/main/java/com/groom/orbit/goal/dao/entity/GoalCategory.java diff --git a/src/main/java/com/groom/orbit/goal/app/GoalQueryService.java b/src/main/java/com/groom/orbit/goal/app/GoalQueryService.java new file mode 100644 index 0000000..e30fda3 --- /dev/null +++ b/src/main/java/com/groom/orbit/goal/app/GoalQueryService.java @@ -0,0 +1,19 @@ +package com.groom.orbit.goal.app; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.groom.orbit.goal.app.dto.GetGoalCategoryResponseDto; +import com.groom.orbit.goal.dao.entity.GoalCategory; + +import lombok.RequiredArgsConstructor; + +@Service +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class GoalQueryService { + + public GetGoalCategoryResponseDto getGoalCategory() { + return new GetGoalCategoryResponseDto(GoalCategory.getAll()); + } +} diff --git a/src/main/java/com/groom/orbit/goal/app/dto/GetGoalCategoryResponseDto.java b/src/main/java/com/groom/orbit/goal/app/dto/GetGoalCategoryResponseDto.java new file mode 100644 index 0000000..a164874 --- /dev/null +++ b/src/main/java/com/groom/orbit/goal/app/dto/GetGoalCategoryResponseDto.java @@ -0,0 +1,5 @@ +package com.groom.orbit.goal.app.dto; + +import java.util.List; + +public record GetGoalCategoryResponseDto(List categories) {} diff --git a/src/main/java/com/groom/orbit/goal/app/util/GoalConst.java b/src/main/java/com/groom/orbit/goal/app/util/GoalConst.java new file mode 100644 index 0000000..d6939d7 --- /dev/null +++ b/src/main/java/com/groom/orbit/goal/app/util/GoalConst.java @@ -0,0 +1,10 @@ +package com.groom.orbit.goal.app.util; + +import java.util.List; + +public class GoalConst { + + private GoalConst() {} + + public static final List GOAL_CATEGORY = List.of("자격·어학·수상", "경험·활동·교육", "경력", "기타"); +} diff --git a/src/main/java/com/groom/orbit/goal/controller/GoalQueryController.java b/src/main/java/com/groom/orbit/goal/controller/GoalQueryController.java new file mode 100644 index 0000000..9fa91be --- /dev/null +++ b/src/main/java/com/groom/orbit/goal/controller/GoalQueryController.java @@ -0,0 +1,24 @@ +package com.groom.orbit.goal.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.groom.orbit.common.dto.ResponseDto; +import com.groom.orbit.goal.app.GoalQueryService; +import com.groom.orbit.goal.app.dto.GetGoalCategoryResponseDto; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/goal") +public class GoalQueryController { + + private final GoalQueryService goalQueryService; + + @GetMapping("/categories") + public ResponseDto getCategories() { + return ResponseDto.ok(goalQueryService.getGoalCategory()); + } +} diff --git a/src/main/java/com/groom/orbit/goal/dao/entity/Goal.java b/src/main/java/com/groom/orbit/goal/dao/entity/Goal.java index c65e367..497f772 100644 --- a/src/main/java/com/groom/orbit/goal/dao/entity/Goal.java +++ b/src/main/java/com/groom/orbit/goal/dao/entity/Goal.java @@ -2,6 +2,8 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @@ -25,7 +27,8 @@ public class Goal { private String title; @Column(nullable = false, length = 10) - private String category; + @Enumerated(EnumType.STRING) + private GoalCategory category; @ColumnDefault("0") @Column(nullable = false) @@ -34,7 +37,7 @@ public class Goal { public static Goal create(String title, String category) { Goal goal = new Goal(); goal.title = title; - goal.category = category; + goal.category = GoalCategory.from(category); return goal; } diff --git a/src/main/java/com/groom/orbit/goal/dao/entity/GoalCategory.java b/src/main/java/com/groom/orbit/goal/dao/entity/GoalCategory.java new file mode 100644 index 0000000..ab68714 --- /dev/null +++ b/src/main/java/com/groom/orbit/goal/dao/entity/GoalCategory.java @@ -0,0 +1,35 @@ +package com.groom.orbit.goal.dao.entity; + +import java.util.Arrays; +import java.util.List; + +import com.groom.orbit.common.exception.CommonException; +import com.groom.orbit.common.exception.ErrorCode; + +public enum GoalCategory { + CERTIFICATION("자격·어학·수상"), + EXPERIENCE("경험·활동·교육"), + CAREER("경력"), + ETC("기타"); + + private String category; + + GoalCategory(String category) { + this.category = category; + } + + public String getCategory() { + return category; + } + + public static GoalCategory from(String category) { + return Arrays.stream(GoalCategory.values()) + .filter(goalCategory -> goalCategory.getCategory().equals(category)) + .findFirst() + .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_GOAL_CATEGORY)); + } + + public static List getAll() { + return Arrays.stream(GoalCategory.values()).map(GoalCategory::getCategory).toList(); + } +}