From 1601fd405548c816116f6aaf99697dd08b052dca Mon Sep 17 00:00:00 2001 From: Dev Uni Date: Mon, 4 Dec 2023 04:37:27 +0900 Subject: [PATCH 1/5] =?UTF-8?q?chore:=20config=20hotfix=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/config b/src/main/resources/config index 5f96fbef..6c56ec63 160000 --- a/src/main/resources/config +++ b/src/main/resources/config @@ -1 +1 @@ -Subproject commit 5f96fbef563e071fa0ef89925e27086f8a25b1fb +Subproject commit 6c56ec639c26b593ae2ea4ba98c4db1f4c0cf83c From 06a36ad97ad95c163b240d7095c6b27948d10069 Mon Sep 17 00:00:00 2001 From: parksey Date: Mon, 4 Dec 2023 17:25:15 +0900 Subject: [PATCH 2/5] =?UTF-8?q?hotfix:=20=EB=9E=AD=ED=82=B9=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/moabam/api/application/ranking/RankingMapper.java | 2 +- .../com/moabam/api/application/ranking/RankingService.java | 6 +++--- src/main/resources/config | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/moabam/api/application/ranking/RankingMapper.java b/src/main/java/com/moabam/api/application/ranking/RankingMapper.java index 817ccdc8..5d17e5d1 100644 --- a/src/main/java/com/moabam/api/application/ranking/RankingMapper.java +++ b/src/main/java/com/moabam/api/application/ranking/RankingMapper.java @@ -25,7 +25,7 @@ public static TopRankingInfo topRankingResponse(int rank, long score, RankingInf public static TopRankingInfo topRankingResponse(int rank, UpdateRanking updateRanking) { return TopRankingInfo.builder() - .rank(rank + 1) + .rank(rank) .score(updateRanking.score()) .nickname(updateRanking.rankingInfo().nickname()) .image(updateRanking.rankingInfo().image()) diff --git a/src/main/java/com/moabam/api/application/ranking/RankingService.java b/src/main/java/com/moabam/api/application/ranking/RankingService.java index 651093f4..4b7b1e9e 100644 --- a/src/main/java/com/moabam/api/application/ranking/RankingService.java +++ b/src/main/java/com/moabam/api/application/ranking/RankingService.java @@ -51,17 +51,17 @@ public void removeRanking(RankingInfo rankingInfo) { public TopRankingResponse getMemberRanking(UpdateRanking myRankingInfo) { List topRankings = getTopRankings(); - Long myRanking = zSetRedisRepository.reverseRank(RANKING, myRankingInfo.rankingInfo()); + long myRanking = zSetRedisRepository.reverseRank(RANKING, myRankingInfo.rankingInfo()) + 1; Optional myTopRanking = topRankings.stream() .filter(topRankingInfo -> Objects.equals(topRankingInfo.memberId(), myRankingInfo.rankingInfo().memberId())) .findFirst(); if (myTopRanking.isPresent()) { - myRanking = (long)myTopRanking.get().rank(); + myRanking = myTopRanking.get().rank(); } - TopRankingInfo myRankingInfoResponse = RankingMapper.topRankingResponse(myRanking.intValue(), myRankingInfo); + TopRankingInfo myRankingInfoResponse = RankingMapper.topRankingResponse((int)myRanking, myRankingInfo); return RankingMapper.topRankingResponses(myRankingInfoResponse, topRankings); } diff --git a/src/main/resources/config b/src/main/resources/config index 6c56ec63..05316d99 160000 --- a/src/main/resources/config +++ b/src/main/resources/config @@ -1 +1 @@ -Subproject commit 6c56ec639c26b593ae2ea4ba98c4db1f4c0cf83c +Subproject commit 05316d99c521b3a26772206d4063cc069e08c848 From 2232a93ed94b4683031dbdf14f04b93a349fbb99 Mon Sep 17 00:00:00 2001 From: kmebin Date: Tue, 5 Dec 2023 14:07:29 +0900 Subject: [PATCH 3/5] =?UTF-8?q?hotfix:=20RestControllerAdvice=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/moabam/global/error/handler/GlobalExceptionHandler.java | 2 ++ .../com/moabam/global/error/handler/SlackExceptionHandler.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java b/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java index 766a7e01..84570ec4 100644 --- a/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java +++ b/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Optional; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; @@ -26,6 +27,7 @@ import com.moabam.global.error.exception.UnauthorizedException; import com.moabam.global.error.model.ErrorResponse; +@Order(1) @RestControllerAdvice public class GlobalExceptionHandler { diff --git a/src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java b/src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java index b144c62b..d4f80ba6 100644 --- a/src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java +++ b/src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java @@ -1,6 +1,7 @@ package com.moabam.global.error.handler; import org.springframework.context.annotation.Profile; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; @@ -12,6 +13,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; +@Order(2) @RestControllerAdvice @Profile({"dev", "prod"}) @RequiredArgsConstructor From 29ef19514bc013f2cad19c405c31424a805e277d Mon Sep 17 00:00:00 2001 From: kmebin Date: Tue, 5 Dec 2023 16:02:42 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20SlackNotification=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EA=B8=B0=EB=B0=98?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/annotation/SlackNotification.java | 12 +++++++ .../common/util/SlackNotificationAspect.java | 29 +++++++++++++++++ .../error/handler/GlobalExceptionHandler.java | 12 +++++-- .../error/handler/SlackExceptionHandler.java | 31 ------------------- 4 files changed, 51 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/moabam/global/common/annotation/SlackNotification.java create mode 100644 src/main/java/com/moabam/global/common/util/SlackNotificationAspect.java delete mode 100644 src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java diff --git a/src/main/java/com/moabam/global/common/annotation/SlackNotification.java b/src/main/java/com/moabam/global/common/annotation/SlackNotification.java new file mode 100644 index 00000000..17863400 --- /dev/null +++ b/src/main/java/com/moabam/global/common/annotation/SlackNotification.java @@ -0,0 +1,12 @@ +package com.moabam.global.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface SlackNotification { + +} diff --git a/src/main/java/com/moabam/global/common/util/SlackNotificationAspect.java b/src/main/java/com/moabam/global/common/util/SlackNotificationAspect.java new file mode 100644 index 00000000..e50f41c7 --- /dev/null +++ b/src/main/java/com/moabam/global/common/util/SlackNotificationAspect.java @@ -0,0 +1,29 @@ +package com.moabam.global.common.util; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.moabam.api.infrastructure.slack.SlackService; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; + +@Aspect +@Component +@Profile({"dev", "prod"}) +@RequiredArgsConstructor +public class SlackNotificationAspect { + + private final SlackService slackService; + + @Around("@annotation(com.moabam.global.common.annotation.SlackNotification) && args(request, exception)") + public Object sendSlack(ProceedingJoinPoint joinPoint, HttpServletRequest request, Exception exception) + throws Throwable { + slackService.send(request, exception); + + return joinPoint.proceed(); + } +} diff --git a/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java b/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java index 84570ec4..b753e30c 100644 --- a/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java +++ b/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java @@ -7,7 +7,6 @@ import java.util.Map; import java.util.Optional; -import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; @@ -17,6 +16,7 @@ import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import org.springframework.web.multipart.MaxUploadSizeExceededException; +import com.moabam.global.common.annotation.SlackNotification; import com.moabam.global.error.exception.BadRequestException; import com.moabam.global.error.exception.ConflictException; import com.moabam.global.error.exception.FcmException; @@ -27,10 +27,18 @@ import com.moabam.global.error.exception.UnauthorizedException; import com.moabam.global.error.model.ErrorResponse; -@Order(1) +import jakarta.servlet.http.HttpServletRequest; + @RestControllerAdvice public class GlobalExceptionHandler { + @SlackNotification + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler(Exception.class) + protected ErrorResponse handleException(HttpServletRequest request, Exception exception) { + return new ErrorResponse(exception.getMessage(), null); + } + @ResponseStatus(HttpStatus.NOT_FOUND) @ExceptionHandler(NotFoundException.class) protected ErrorResponse handleNotFoundException(MoabamException exception) { diff --git a/src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java b/src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java deleted file mode 100644 index d4f80ba6..00000000 --- a/src/main/java/com/moabam/global/error/handler/SlackExceptionHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.moabam.global.error.handler; - -import org.springframework.context.annotation.Profile; -import org.springframework.core.annotation.Order; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -import com.moabam.api.infrastructure.slack.SlackService; -import com.moabam.global.error.model.ErrorResponse; - -import jakarta.servlet.http.HttpServletRequest; -import lombok.RequiredArgsConstructor; - -@Order(2) -@RestControllerAdvice -@Profile({"dev", "prod"}) -@RequiredArgsConstructor -public class SlackExceptionHandler { - - private final SlackService slackService; - - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - @ExceptionHandler(Exception.class) - protected ErrorResponse handleException(HttpServletRequest request, Exception exception) throws Exception { - slackService.send(request, exception); - - return new ErrorResponse(exception.getMessage(), null); - } -} From 132ee3c2e98936c0d8871bfd9fc5f67e20fe9277 Mon Sep 17 00:00:00 2001 From: kmebin Date: Tue, 5 Dec 2023 16:45:01 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=EB=B9=8C=EB=93=9C=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/error/handler/GlobalExceptionHandler.java | 7 +++++++ .../api/presentation/MemberAuthorizeControllerTest.java | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java b/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java index b753e30c..8fa4d5a3 100644 --- a/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java +++ b/src/main/java/com/moabam/global/error/handler/GlobalExceptionHandler.java @@ -10,6 +10,7 @@ import org.springframework.http.HttpStatus; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingRequestValueException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -114,6 +115,12 @@ protected ErrorResponse handleMethodArgumentTypeMismatchException(MethodArgument return new ErrorResponse(message, null); } + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(MissingRequestValueException.class) + protected ErrorResponse handleMethodArgumentTypeMismatchException(MissingRequestValueException exception) { + return new ErrorResponse(exception.getMessage(), null); + } + @ExceptionHandler(MaxUploadSizeExceededException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) protected ErrorResponse handleMaxSizeException(MaxUploadSizeExceededException exception) { diff --git a/src/test/java/com/moabam/api/presentation/MemberAuthorizeControllerTest.java b/src/test/java/com/moabam/api/presentation/MemberAuthorizeControllerTest.java index be66cc08..3e3083ec 100644 --- a/src/test/java/com/moabam/api/presentation/MemberAuthorizeControllerTest.java +++ b/src/test/java/com/moabam/api/presentation/MemberAuthorizeControllerTest.java @@ -213,7 +213,8 @@ void token_info_response_fail(int code) throws Exception { .andRespond(withStatus(HttpStatusCode.valueOf(code))); mockMvc.perform(post("/members/login/kakao/oauth") - .flashAttr("authorizationCodeResponse", authorizationCodeResponse)) + .content(objectMapper.writeValueAsString(authorizationCodeResponse)) + .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isBadRequest()); } }