Skip to content

Commit

Permalink
[feat #61] String-> Enum 변환 실패 시 커스텀 예외 반환 (#62)
Browse files Browse the repository at this point in the history
* [refactor] : 에러 코드 메시지 수정

* [feat] : 회원 에러코드에 직군, 직렬 관련 에러 코드 추가

* [feat] : String->enum 값 변환 실패 시 커스텀 예외 던지기

* [refactor] : 클래스 레벨 requestMapping 제거

* [chore] : Swagger 명세 수정

* [feat] : 상호작용 타입 변환 실패 시 커스텀 에러 던지도록 수정
hyun2371 authored Aug 20, 2024
1 parent ff20b83 commit 51e33ea
Showing 8 changed files with 22 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -6,7 +6,6 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.dnd.gongmuin.answer.dto.AnswerDetailResponse;
@@ -24,13 +23,12 @@
@Tag(name = "답변 API")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/question-posts")
public class AnswerController {
private final AnswerService answerService;

@Operation(summary = "답변 등록 API", description = "질문글에 대한 답변을 작성한다.")
@ApiResponse(useReturnTypeSchema = true)
@PostMapping("/{questionPostId}/answers")
@PostMapping("/api/question-posts/{questionPostId}/answers")
public ResponseEntity<AnswerDetailResponse> registerAnswer(
@PathVariable Long questionPostId,
@Valid @RequestBody RegisterAnswerRequest request,
@@ -42,7 +40,7 @@ public ResponseEntity<AnswerDetailResponse> registerAnswer(

@Operation(summary = "답변 조회 API", description = "질문글에 속하는 답변을 모두 조회한다.")
@ApiResponse(useReturnTypeSchema = true)
@GetMapping("/{questionPostId}/answers")
@GetMapping("/api/question-posts/{questionPostId}/answers")
public ResponseEntity<PageResponse<AnswerDetailResponse>> getAnswersByQuestionPostId(
@PathVariable Long questionPostId
) {
@@ -52,7 +50,7 @@ public ResponseEntity<PageResponse<AnswerDetailResponse>> getAnswersByQuestionPo

@Operation(summary = "답변 채택 API", description = "질문자가 답변을 채택한다.")
@ApiResponse(useReturnTypeSchema = true)
@PostMapping("/answers/{answerId}")
@PostMapping("/api/question-posts/answers/{answerId}")
public ResponseEntity<AnswerDetailResponse> getAnswersByQuestionPostId(
@PathVariable Long answerId,
@AuthenticationPrincipal Member member
Original file line number Diff line number Diff line change
@@ -2,6 +2,9 @@

import java.util.Arrays;

import com.dnd.gongmuin.common.exception.runtime.ValidationException;
import com.dnd.gongmuin.member.exception.MemberErrorCode;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@@ -17,7 +20,7 @@ public static JobCategory from(String input) {
return Arrays.stream(values())
.filter(category -> category.isEqual(input))
.findAny()
.orElseThrow(IllegalArgumentException::new);
.orElseThrow(() -> new ValidationException(MemberErrorCode.NOT_FOUND_JOB_CATEGORY));
}

private boolean isEqual(String input) {
5 changes: 4 additions & 1 deletion src/main/java/com/dnd/gongmuin/member/domain/JobGroup.java
Original file line number Diff line number Diff line change
@@ -3,6 +3,9 @@
import java.util.Arrays;
import java.util.List;

import com.dnd.gongmuin.common.exception.runtime.ValidationException;
import com.dnd.gongmuin.member.exception.MemberErrorCode;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@@ -20,7 +23,7 @@ public static JobGroup from(String input) {
return Arrays.stream(values())
.filter(group -> group.isEqual(input))
.findAny()
.orElseThrow(IllegalArgumentException::new);
.orElseThrow(() -> new ValidationException(MemberErrorCode.NOT_FOUND_JOB_GROUP));
}

public static List<JobGroup> from(List<String> labels) {
Original file line number Diff line number Diff line change
@@ -14,7 +14,9 @@ public enum MemberErrorCode implements ErrorCode {
LOGOUT_FAILED("로그아웃을 실패했습니다.", "MEMBER_003"),
NOT_ENOUGH_CREDIT("보유한 크레딧이 부족합니다.", "MEMBER_004"),
UPDATE_PROFILE_FAILED("프로필 수정에 실패했습니다.", "MEMBER_005"),
QUESTION_POSTS_BY_MEMBER_FAILED("마이페이지 게시글 목록을 불러오는데 실패했습니다", "MEMBER_006");
QUESTION_POSTS_BY_MEMBER_FAILED("마이페이지 게시글 목록을 불러오는데 실패했습니다", "MEMBER_006"),
NOT_FOUND_JOB_GROUP("직군을 올바르게 입력해주세요.", "MEMBER_007"),
NOT_FOUND_JOB_CATEGORY("직렬을 올바르게 입력해주세요.", "MEMBER_008");

private final String message;
private final String code;
Original file line number Diff line number Diff line change
@@ -2,6 +2,9 @@

import java.util.Arrays;

import com.dnd.gongmuin.common.exception.runtime.ValidationException;
import com.dnd.gongmuin.post_interaction.exception.InteractionErrorCode;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@@ -18,7 +21,7 @@ public static InteractionType from(String input) {
return Arrays.stream(values())
.filter(type -> type.isEqual(input))
.findAny()
.orElseThrow(IllegalArgumentException::new);
.orElseThrow(() -> new ValidationException(InteractionErrorCode.NOT_FOUND_TYPE));
}

private boolean isEqual(String input) {
Original file line number Diff line number Diff line change
@@ -12,7 +12,8 @@ public enum InteractionErrorCode implements ErrorCode {
NOT_FOUND_POST_INTERACTION("상호작용 이력이 존재하지 않습니다.", "PI_001"),
ALREADY_INTERACTED("이미 해당 작업을 수행했습니다.", "PI_002"),
UNINTERACTION_NOT_ALLOWED("상호작용 수가 0이하가 될 수 없습니다.", "PI_003"),
INTERACTION_NOT_ALLOWED("본인 게시물은 상호작용할 수 없습니다", "PI_004");
INTERACTION_NOT_ALLOWED("본인 게시물은 상호작용할 수 없습니다", "PI_004"),
NOT_FOUND_TYPE("북마크와 추천 중 하나를 입력해주세요", "PI_005");

private final String message;
private final String code;
Original file line number Diff line number Diff line change
@@ -81,7 +81,7 @@ public ResponseEntity<PageResponse<RecQuestionPostResponse>> getRecommendQuestio
return ResponseEntity.ok(response);
}

@Operation(summary = "질문글 업데이트 API", description = "질문자가 질문글을 업데이트 한다.")
@Operation(summary = "질문글 수정 API", description = "질문자가 질문글을 수정한다.")
@ApiResponse(useReturnTypeSchema = true)
@PatchMapping("/api/question-posts/{questionPostId}/edit")
public ResponseEntity<UpdateQuestionPostResponse> updateQuestionPosts(
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
@RequiredArgsConstructor
public enum S3ErrorCode implements ErrorCode {
EMPTY_FILE_NAME("원본 파일명은 필수입니다.", "S3_001"),
INVALID_FILE_EXTENSION("잘못된 되었거나 지원하지 않는 파일 형식입니다.", "S3_002"),
INVALID_FILE_EXTENSION("잘못 되었거나 지원하지 않는 파일 형식입니다.", "S3_002"),

FAILED_TO_UPLOAD("파일을 업로드하는데 실패했습니다.", "S3_003");

0 comments on commit 51e33ea

Please sign in to comment.