From f906c54e2848b44a5952224f2eab7b08800a5778 Mon Sep 17 00:00:00 2001 From: sojungpp Date: Sun, 14 Jul 2024 13:55:04 +0900 Subject: [PATCH 1/6] =?UTF-8?q?#329=20fix:=20RestControllerAdvice=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../icebutler_server/global/exception/ExceptionAdvice.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/example/icebutler_server/global/exception/ExceptionAdvice.java b/src/main/java/com/example/icebutler_server/global/exception/ExceptionAdvice.java index 0195836..7fc3880 100644 --- a/src/main/java/com/example/icebutler_server/global/exception/ExceptionAdvice.java +++ b/src/main/java/com/example/icebutler_server/global/exception/ExceptionAdvice.java @@ -10,12 +10,14 @@ import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import java.sql.SQLException; import java.time.format.DateTimeParseException; import java.util.Objects; +@RestControllerAdvice public class ExceptionAdvice { @ExceptionHandler(BaseException.class) protected ResponseEntity handleBaseException(BaseException e) { From fd32abe1896bfe854abef908d7edcdc861ad359b Mon Sep 17 00:00:00 2001 From: sojungpp Date: Sun, 14 Jul 2024 13:55:35 +0900 Subject: [PATCH 2/6] =?UTF-8?q?#329=20fix:=20pathVariable=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=8B=A4=ED=96=89=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/feign/feignClient/RecipeServerClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/icebutler_server/global/feign/feignClient/RecipeServerClient.java b/src/main/java/com/example/icebutler_server/global/feign/feignClient/RecipeServerClient.java index cacd0e7..b6be6f0 100644 --- a/src/main/java/com/example/icebutler_server/global/feign/feignClient/RecipeServerClient.java +++ b/src/main/java/com/example/icebutler_server/global/feign/feignClient/RecipeServerClient.java @@ -26,7 +26,7 @@ public interface RecipeServerClient { ResponseCustom addAdmin(@RequestBody AdminReq adminReq); @DeleteMapping("/admin/users/{userId}") - ResponseCustom withdrawUser(@PathVariable Long userId, @RequestHeader Map requestHeader); + ResponseCustom withdrawUser(@PathVariable(value = "userId") Long userId, @RequestHeader Map requestHeader); @DeleteMapping("/foods") void deleteFood(@RequestBody FoodReq foodReq); From 6e0f451ea06f3d1ca85b90774b20d31e1c783f9c Mon Sep 17 00:00:00 2001 From: sojungpp Date: Sun, 14 Jul 2024 17:36:03 +0900 Subject: [PATCH 3/6] =?UTF-8?q?#329=20feat:=20LoginResolver=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/ReturnCode.java | 1 + .../global/resolver/LoginResolver.java | 41 +++++++++---------- .../global/util/TokenUtils.java | 13 ++++++ .../util/redis/RedisTemplateService.java | 1 + .../util/redis/RedisTemplateServiceImpl.java | 5 +++ .../user/repository/UserRepository.java | 2 + .../user/service/UserServiceImpl.java | 4 ++ 7 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/example/icebutler_server/global/exception/ReturnCode.java b/src/main/java/com/example/icebutler_server/global/exception/ReturnCode.java index 5e42052..d492176 100644 --- a/src/main/java/com/example/icebutler_server/global/exception/ReturnCode.java +++ b/src/main/java/com/example/icebutler_server/global/exception/ReturnCode.java @@ -18,6 +18,7 @@ public enum ReturnCode { // Auth EXPIRED_TOKEN("A0000", HttpStatus.UNAUTHORIZED, "만료된 토큰입니다. 다시 발급해주세요."), + NULL_TOKEN("A0001", HttpStatus.BAD_REQUEST, "토큰을 입력해주세요."), // Cart NOT_FOUND_CART("C0000", HttpStatus.NOT_FOUND, "존재하지 않는 장바구니입니다."), diff --git a/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java b/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java index 5e0a702..c453377 100644 --- a/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java +++ b/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java @@ -2,20 +2,21 @@ import com.example.icebutler_server.global.exception.BaseException; import com.example.icebutler_server.global.util.TokenUtils; -import com.sun.istack.NotNull; +import com.example.icebutler_server.user.service.UserServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.core.MethodParameter; import org.springframework.core.env.Environment; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; -import java.util.Objects; +import javax.validation.constraints.NotNull; -import static com.example.icebutler_server.global.exception.ReturnCode.INTERNAL_SERVER_ERROR; +import static com.example.icebutler_server.global.exception.ReturnCode.*; @RequiredArgsConstructor @@ -24,37 +25,33 @@ public class LoginResolver implements HandlerMethodArgumentResolver{ private final TokenUtils tokenUtils; private final Environment env; + private final UserServiceImpl userService; @Override - public boolean supportsParameter(MethodParameter parameter) - { - return parameter.hasParameterAnnotation(IsLogin.class) - && - LoginStatus.class.equals(parameter.getParameterType()); + public boolean supportsParameter(MethodParameter parameter) { + return parameter.hasParameterAnnotation(IsLogin.class) && Long.class.equals(parameter.getParameterType()); } @Nullable @Override public Object resolveArgument(@NotNull MethodParameter parameter, - ModelAndViewContainer mavContainer, + ModelAndViewContainer modelAndViewContainer, @NotNull NativeWebRequest webRequest, - WebDataBinderFactory binderFactory) throws Exception - { - Auth auth = parameter.getMethodAnnotation(Auth.class); + WebDataBinderFactory binderFactory) { - if (auth == null) - throw new BaseException(INTERNAL_SERVER_ERROR); + Auth auth = parameter.getMethodAnnotation(Auth.class); + if(auth == null) throw new BaseException(INTERNAL_SERVER_ERROR); - String accessToken = webRequest.getHeader(Objects.requireNonNull(env.getProperty("jwt.auth-header"))); - if(accessToken == null || !tokenUtils.isValidToken(tokenUtils.parseJustTokenFromFullToken(accessToken))) - return LoginStatus.getNotLoginStatus(); + String header = webRequest.getHeader("Authorization"); + if(!StringUtils.hasText(header)) throw new BaseException(NULL_TOKEN); - Long userId = Long.valueOf(tokenUtils.getUserIdFromFullToken(accessToken)); + String accessToken = tokenUtils.separateAuthType(header); + tokenUtils.isValidToken(accessToken); - if (!auth.optional() && userId == null) { - return LoginStatus.getNotLoginStatus(); - } + Long userId = Long.valueOf(tokenUtils.getJwtContents(accessToken)); + if(!tokenUtils.isTokenExists(accessToken)) throw new BaseException(EXPIRED_TOKEN); + userService.validateUser(userId); - return LoginStatus.builder().isLogin(true).userId(userId).build(); + return userId; } } diff --git a/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java b/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java index e7807e8..f69fad8 100644 --- a/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java +++ b/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java @@ -23,6 +23,7 @@ public class TokenUtils { public static final String USER_ID = "userId"; public static final String NICKNAME = "nickname"; + public static final String AUTH_TYPE = "Bearer "; public static final String EMAIL = "email"; public static final String ONE_BLOCK = " "; @@ -249,4 +250,16 @@ public String accessExpiration(Long userId) { return createAccessToken(userId, refreshNickname); } + public String separateAuthType(String header) { + return header.substring(AUTH_TYPE.length()); + } + + public String getJwtContents(String accessToken) { + return String.valueOf(getJwtBodyFromJustToken(accessToken).get(USER_ID)); + } + + public boolean isTokenExists(String key) { + return redisTemplateService.hasKey(key); + } + } diff --git a/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateService.java b/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateService.java index 8f83f8f..fd8fcb7 100644 --- a/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateService.java +++ b/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateService.java @@ -6,4 +6,5 @@ public interface RedisTemplateService { public void deleteUserRefreshToken(@NotNull String userId); public String getUserRefreshToken(@NotNull String userId); public void setUserRefreshToken(@NotNull String userId, String refreshToken) ; + boolean hasKey(String key); } \ No newline at end of file diff --git a/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateServiceImpl.java b/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateServiceImpl.java index 8529c68..7e1f8b2 100644 --- a/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateServiceImpl.java +++ b/src/main/java/com/example/icebutler_server/global/util/redis/RedisTemplateServiceImpl.java @@ -26,4 +26,9 @@ public String getUserRefreshToken(@NotNull String userId) { public void setUserRefreshToken(@NotNull String userId, String refreshToken) { redisTemplate.opsForValue().set(userId, refreshToken); } + + @Override + public boolean hasKey(String key) { + return redisTemplate.hasKey(key) != null; + } } diff --git a/src/main/java/com/example/icebutler_server/user/repository/UserRepository.java b/src/main/java/com/example/icebutler_server/user/repository/UserRepository.java index 826e928..957aca6 100644 --- a/src/main/java/com/example/icebutler_server/user/repository/UserRepository.java +++ b/src/main/java/com/example/icebutler_server/user/repository/UserRepository.java @@ -14,4 +14,6 @@ public interface UserRepository extends JpaRepository { User findByEmailAndProvider(String email, Provider provider); Boolean existsByNickname(String nickName); List findByNicknameContains(String nickname); + boolean existsByIdAndIsEnable(Long userId, boolean isEnable); + boolean existsByIdAndIsDenied(Long userId, boolean isDenied); } diff --git a/src/main/java/com/example/icebutler_server/user/service/UserServiceImpl.java b/src/main/java/com/example/icebutler_server/user/service/UserServiceImpl.java index c7195ab..703dd60 100644 --- a/src/main/java/com/example/icebutler_server/user/service/UserServiceImpl.java +++ b/src/main/java/com/example/icebutler_server/user/service/UserServiceImpl.java @@ -178,4 +178,8 @@ public Page getUserNotification(Long userId, Pageable pageabl return MyNotificationRes.toUserNotificationList(this.pushNotificationRepository.findByUserOrderByCreatedAtDesc(user, pageable)); } + public void validateUser(Long userId) { + if(!userRepository.existsByIdAndIsEnable(userId, true)) throw new BaseException(NOT_FOUND_USER); + if(!userRepository.existsByIdAndIsDenied(userId, false)) throw new BaseException(BLOCKED_USER); + } } From 59c0ce641c62b2ee74fed41d1dfc8aa5f9423449 Mon Sep 17 00:00:00 2001 From: sojungpp Date: Sun, 14 Jul 2024 17:54:06 +0900 Subject: [PATCH 4/6] =?UTF-8?q?#329=20refactor:=20LoginResolver=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/resolver/LoginResolver.java | 37 ++++++++++++++----- .../global/util/TokenUtils.java | 1 + 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java b/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java index c453377..99393de 100644 --- a/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java +++ b/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java @@ -5,7 +5,6 @@ import com.example.icebutler_server.user.service.UserServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.core.MethodParameter; -import org.springframework.core.env.Environment; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -21,10 +20,11 @@ @RequiredArgsConstructor @Component -public class LoginResolver implements HandlerMethodArgumentResolver{ +public class LoginResolver implements HandlerMethodArgumentResolver { + public static final String AUTH_HEADER_NAME = "Authorization"; + ; private final TokenUtils tokenUtils; - private final Environment env; private final UserServiceImpl userService; @Override @@ -38,20 +38,39 @@ public Object resolveArgument(@NotNull MethodParameter parameter, ModelAndViewContainer modelAndViewContainer, @NotNull NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { + checkMethodValidation(parameter); + String header = getHeader(webRequest); + String accessToken = getAccessToken(header); + Long userId = getUserId(accessToken); + return userId; + } - Auth auth = parameter.getMethodAnnotation(Auth.class); - if(auth == null) throw new BaseException(INTERNAL_SERVER_ERROR); + private void checkMethodValidation(MethodParameter parameter) { + if (parameter.getMethodAnnotation(Auth.class) == null) { + throw new BaseException(INTERNAL_SERVER_ERROR); + } + } - String header = webRequest.getHeader("Authorization"); - if(!StringUtils.hasText(header)) throw new BaseException(NULL_TOKEN); + private static String getHeader(NativeWebRequest webRequest) { + String header = webRequest.getHeader(AUTH_HEADER_NAME); + if (!StringUtils.hasText(header)) { + throw new BaseException(NULL_TOKEN); + } + return header; + } + private String getAccessToken(String header) { String accessToken = tokenUtils.separateAuthType(header); tokenUtils.isValidToken(accessToken); + if (!tokenUtils.isTokenExists(accessToken)) { + throw new BaseException(EXPIRED_TOKEN); + } + return accessToken; + } + private Long getUserId(String accessToken) { Long userId = Long.valueOf(tokenUtils.getJwtContents(accessToken)); - if(!tokenUtils.isTokenExists(accessToken)) throw new BaseException(EXPIRED_TOKEN); userService.validateUser(userId); - return userId; } } diff --git a/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java b/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java index f69fad8..a7bc6c7 100644 --- a/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java +++ b/src/main/java/com/example/icebutler_server/global/util/TokenUtils.java @@ -163,6 +163,7 @@ public String createRefreshTokenEmail(Long userId, String email) { return tokenType + ONE_BLOCK + refreshToken; } + // TODO isTokenExists 까지 함께 검증하기 public boolean isValidToken(String justToken) { if (justToken != null && justToken.split(ONE_BLOCK).length == 2) justToken = justToken.split(ONE_BLOCK)[1]; From 078fa5ba223706be150c5c6b4bad5dfb4e92f54c Mon Sep 17 00:00:00 2001 From: sojungpp Date: Sun, 14 Jul 2024 17:55:09 +0900 Subject: [PATCH 5/6] =?UTF-8?q?#329=20style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/icebutler_server/global/resolver/LoginResolver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java b/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java index 99393de..ec461fc 100644 --- a/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java +++ b/src/main/java/com/example/icebutler_server/global/resolver/LoginResolver.java @@ -23,7 +23,7 @@ public class LoginResolver implements HandlerMethodArgumentResolver { public static final String AUTH_HEADER_NAME = "Authorization"; - ; + private final TokenUtils tokenUtils; private final UserServiceImpl userService; From d9589b3481f5c9bd992045c6d94489248935dc15 Mon Sep 17 00:00:00 2001 From: sojungpp Date: Sun, 14 Jul 2024 21:37:50 +0900 Subject: [PATCH 6/6] =?UTF-8?q?#329=20refactor:=20LoginStatus=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cart/controller/CartController.java | 13 ++--- .../fridge/controller/FridgeController.java | 57 +++++++++---------- .../global/resolver/LoginStatus.java | 18 ------ .../user/controller/UserAuthController.java | 25 ++++---- 4 files changed, 46 insertions(+), 67 deletions(-) delete mode 100644 src/main/java/com/example/icebutler_server/global/resolver/LoginStatus.java diff --git a/src/main/java/com/example/icebutler_server/cart/controller/CartController.java b/src/main/java/com/example/icebutler_server/cart/controller/CartController.java index f313626..ee57143 100644 --- a/src/main/java/com/example/icebutler_server/cart/controller/CartController.java +++ b/src/main/java/com/example/icebutler_server/cart/controller/CartController.java @@ -8,7 +8,6 @@ import com.example.icebutler_server.global.dto.response.SwaggerApiSuccess; import com.example.icebutler_server.global.resolver.Auth; import com.example.icebutler_server.global.resolver.IsLogin; -import com.example.icebutler_server.global.resolver.LoginStatus; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -44,8 +43,8 @@ public class CartController { @Auth @GetMapping("/{fridgeId}/foods") public ResponseCustom> getCartFoods(@Parameter(name = "냉장고 ID") @PathVariable Long fridgeId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(cartService.getCartFoods(fridgeId, loginStatus.getUserId())); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(cartService.getCartFoods(fridgeId, userId)); } @Operation(summary = "장바구니 식품 추가", description = "장바구니에 식품을 추가한다.") @@ -64,8 +63,8 @@ public ResponseCustom> getCartFoods(@Parameter(name = "냉장 @PostMapping("/{fridgeId}/foods") public ResponseCustom addCartFoods(@Parameter(name = "냉장고 ID") @PathVariable Long fridgeId, @RequestBody AddFoodToCartRequest request, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - cartService.addCartFoods(fridgeId, request, loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + cartService.addCartFoods(fridgeId, request, userId); return ResponseCustom.success(); } @@ -85,8 +84,8 @@ public ResponseCustom addCartFoods(@Parameter(name = "냉장고 ID") @PathVar @DeleteMapping("/{fridgeId}/foods") public ResponseCustom deleteCartFoods(@Parameter(name = "냉장고 ID") @PathVariable Long fridgeId, @RequestBody RemoveFoodFromCartRequest request, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - cartService.deleteCartFoods(fridgeId, request, loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + cartService.deleteCartFoods(fridgeId, request, userId); return ResponseCustom.success(); } } diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java index 754ee9e..168b284 100644 --- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java +++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java @@ -7,7 +7,6 @@ import com.example.icebutler_server.global.dto.response.SwaggerApiSuccess; import com.example.icebutler_server.global.resolver.Auth; import com.example.icebutler_server.global.resolver.IsLogin; -import com.example.icebutler_server.global.resolver.LoginStatus; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -46,8 +45,8 @@ public ResponseCustom healthCheck() { @Auth @PostMapping("/register") public ResponseCustom registerFridge(@RequestBody FridgeRegisterReq fridgeRegisterReq, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.registerFridge(fridgeRegisterReq, loginStatus.getUserId())); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.registerFridge(fridgeRegisterReq, userId)); } @Operation(summary = "냉장고 정보 수정", description = "냉장고 정보를 수정한다.") @@ -66,8 +65,8 @@ public ResponseCustom registerFridge(@RequestBody FridgeRegisterReq fridge @PatchMapping("/{fridgeId}") public ResponseCustom modifyFridge(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, @RequestBody FridgeModifyReq fridgeModifyReq, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - fridgeService.modifyFridge(fridgeId, fridgeModifyReq, loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + fridgeService.modifyFridge(fridgeId, fridgeModifyReq, userId); return ResponseCustom.success(); } @@ -87,8 +86,8 @@ public ResponseCustom modifyFridge(@Parameter(description = "냉장고 ID") @ @Auth @PatchMapping("/{fridgeId}/remove") public ResponseCustom removeFridge(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.removeFridge(fridgeId, loginStatus.getUserId())); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.removeFridge(fridgeId, userId)); } @Operation(summary = "냉장고 사용자 삭제", description = "냉장고 사용자를 삭제한다.") @@ -104,8 +103,8 @@ public ResponseCustom removeFridge(@Parameter(description = "냉장고 ID" @Auth @PatchMapping("/{fridgeId}/remove/each") public ResponseCustom removeFridgeUser(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.removeFridgeUser(fridgeId, loginStatus.getUserId())); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.removeFridgeUser(fridgeId, userId)); } @Operation(summary = "냉장고 식품 전체 조회(카테고리별)", description = "냉장고 내 식품을 카테고리 별로 전체조회한다.") @@ -121,8 +120,8 @@ public ResponseCustom removeFridgeUser(@Parameter(description = "냉장고 @GetMapping("/{fridgeId}/foods") public ResponseCustom getFoods(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, @Parameter(description = "식품 카테고리") @RequestParam(required = false) String category, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.getFoods(fridgeId, loginStatus.getUserId(), category)); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.getFoods(fridgeId, userId, category)); } @@ -136,8 +135,8 @@ public ResponseCustom getFoods(@Parameter(description = "냉장 @GetMapping("/{fridgeId}/search") public ResponseCustom> searchFridgeFood(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, @Parameter(description = "식품명") @RequestParam String keyword, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.searchFridgeFood(fridgeId, loginStatus.getUserId(), keyword)); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.searchFridgeFood(fridgeId, userId, keyword)); } @Operation(summary = "냉장고 식품 상세 조회", description = "냉장고 내 식품을 상세 조회한다.") @@ -154,8 +153,8 @@ public ResponseCustom> searchFridgeFood(@Parameter(descript @GetMapping("/{fridgeId}/foods/{fridgeFoodId}") public ResponseCustom getFridgeFood(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, @Parameter(description = "냉장고 내 식품 ID") @PathVariable Long fridgeFoodId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.getFridgeFood(fridgeId, fridgeFoodId, loginStatus.getUserId())); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.getFridgeFood(fridgeId, fridgeFoodId, userId)); } @Operation(summary = "냉장고 식품 추가", description = "냉장고 내 식품을 추가한다.") @@ -174,8 +173,8 @@ public ResponseCustom getFridgeFood(@Parameter(description = "냉 @PostMapping("/{fridgeId}/food") public ResponseCustom addFridgeFood(@RequestBody FridgeFoodsReq fridgeFoodsReq, @Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - fridgeService.addFridgeFood(fridgeFoodsReq, fridgeId, loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + fridgeService.addFridgeFood(fridgeFoodsReq, fridgeId, userId); return ResponseCustom.success(); } @@ -197,8 +196,8 @@ public ResponseCustom addFridgeFood(@RequestBody FridgeFoodsReq fridgeFoodsRe public ResponseCustom modifyFridgeFood(@RequestBody FridgeFoodReq fridgeFoodReq, @Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, @Parameter(description = "냉장고 내 식품 ID") @PathVariable Long fridgeFoodId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - fridgeService.modifyFridgeFood(fridgeId, fridgeFoodId, fridgeFoodReq, loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + fridgeService.modifyFridgeFood(fridgeId, fridgeFoodId, fridgeFoodReq, userId); return ResponseCustom.success(); } @@ -219,8 +218,8 @@ public ResponseCustom modifyFridgeFood(@RequestBody FridgeFoodReq fridgeFoodR public ResponseCustom deleteFridgeFood(@RequestBody DeleteFridgeFoodsReq deleteFridgeFoodsReq, @Parameter(description = "삭제 타입(폐기/섭취)") @RequestParam String type, @Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - fridgeService.deleteFridgeFood(deleteFridgeFoodsReq, type, fridgeId, loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + fridgeService.deleteFridgeFood(deleteFridgeFoodsReq, type, fridgeId, userId); return ResponseCustom.success(); } @@ -234,8 +233,8 @@ public ResponseCustom deleteFridgeFood(@RequestBody DeleteFridgeFoodsReq dele @GetMapping("{fridgeId}/members") public ResponseCustom getMembers( @Parameter(description = "냉장고 ID") @PathVariable Long fridgeId, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.searchMembers(fridgeId, loginStatus.getUserId())); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.searchMembers(fridgeId, userId)); } @Operation(summary = "냉장고 선택목록 조회", description = "냉장고 선택목록을 조회한다.") @@ -247,9 +246,9 @@ public ResponseCustom getMembers( @Auth @GetMapping("/select") public ResponseCustom selectFridges( - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus + @Parameter(hidden = true) @IsLogin Long userId ) { - return ResponseCustom.success(fridgeService.selectFridges(loginStatus.getUserId())); + return ResponseCustom.success(fridgeService.selectFridges(userId)); } @Operation(summary = "냉장고 목록 조회", description = "냉장고 목록을 조회한다.") @@ -261,8 +260,8 @@ public ResponseCustom selectFridges( }) @Auth @GetMapping("") - public ResponseCustom myFridge(@Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(fridgeService.myFridge(loginStatus.getUserId())); + public ResponseCustom myFridge(@Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.myFridge(userId)); } /** @@ -286,8 +285,8 @@ public ResponseCustom getFridgeFoodStatistics( @Parameter(description = "통계 타입(낭비/소비)") @RequestParam String deleteCategory, @Parameter(description = "연도") @RequestParam Integer year, @Parameter(description = "월") @RequestParam Integer month, - @Parameter(hidden = true) @IsLogin LoginStatus status) { - return ResponseCustom.success(fridgeService.getFridgeFoodStatistics(fridgeId, deleteCategory, status.getUserId(), year, month)); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(fridgeService.getFridgeFoodStatistics(fridgeId, deleteCategory, userId, year, month)); } diff --git a/src/main/java/com/example/icebutler_server/global/resolver/LoginStatus.java b/src/main/java/com/example/icebutler_server/global/resolver/LoginStatus.java deleted file mode 100644 index 5b08086..0000000 --- a/src/main/java/com/example/icebutler_server/global/resolver/LoginStatus.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.icebutler_server.global.resolver; - -import lombok.Builder; -import lombok.Data; - -@Data -public class LoginStatus { - private Boolean isLogin; - private Long userId; - @Builder - public LoginStatus(Boolean isLogin, Long userId) { - this.isLogin = isLogin; - this.userId = userId; - } - public static LoginStatus getNotLoginStatus() { - return new LoginStatus(false, null); - } -} diff --git a/src/main/java/com/example/icebutler_server/user/controller/UserAuthController.java b/src/main/java/com/example/icebutler_server/user/controller/UserAuthController.java index 1f3cd83..aad3aa0 100644 --- a/src/main/java/com/example/icebutler_server/user/controller/UserAuthController.java +++ b/src/main/java/com/example/icebutler_server/user/controller/UserAuthController.java @@ -4,7 +4,6 @@ import com.example.icebutler_server.global.dto.response.SwaggerApiSuccess; import com.example.icebutler_server.global.resolver.Auth; import com.example.icebutler_server.global.resolver.IsLogin; -import com.example.icebutler_server.global.resolver.LoginStatus; import com.example.icebutler_server.global.util.TokenUtils; import com.example.icebutler_server.user.dto.request.PatchProfileReq; import com.example.icebutler_server.user.dto.response.MyNotificationRes; @@ -42,8 +41,8 @@ public class UserAuthController { }) @Auth @GetMapping("/renew") - public ResponseCustom accessToken(@Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(tokenUtils.accessExpiration(loginStatus.getUserId())); + public ResponseCustom accessToken(@Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(tokenUtils.accessExpiration(userId)); } @Operation(summary = "유저 프로필 수정", description = "유저 프로필을 수정한다.") @@ -56,8 +55,8 @@ public ResponseCustom accessToken(@Parameter(hidden = true) @IsLogin Log @ResponseBody @PatchMapping("/profile") public ResponseCustom modifyProfile(@RequestBody PatchProfileReq patchProfileReq, - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - userService.modifyProfile(loginStatus.getUserId(), patchProfileReq); + @Parameter(hidden = true) @IsLogin Long userId) { + userService.modifyProfile(userId, patchProfileReq); return ResponseCustom.success(); } @@ -72,8 +71,8 @@ public ResponseCustom modifyProfile(@RequestBody PatchProfileReq patchProfile @Auth @DeleteMapping("/delete") public ResponseCustom deleteUser( - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - userService.deleteUser(loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + userService.deleteUser(userId); return ResponseCustom.success(); } @@ -86,8 +85,8 @@ public ResponseCustom deleteUser( @Auth @PostMapping("/logout") public ResponseCustom logout( - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - userService.logout(loginStatus.getUserId()); + @Parameter(hidden = true) @IsLogin Long userId) { + userService.logout(userId); return ResponseCustom.success(); } @@ -100,8 +99,8 @@ public ResponseCustom logout( @Auth @GetMapping("") public ResponseCustom profile( - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus) { - return ResponseCustom.success(userService.checkProfile(loginStatus.getUserId())); + @Parameter(hidden = true) @IsLogin Long userId) { + return ResponseCustom.success(userService.checkProfile(userId)); } @Operation(summary = "유저 알림 목록", description = "유저 알림 목록을 조회한다.") @@ -113,9 +112,9 @@ public ResponseCustom profile( @Auth @GetMapping("/notification") public ResponseCustom> getUserNotification( - @Parameter(hidden = true) @IsLogin LoginStatus loginStatus, + @Parameter(hidden = true) @IsLogin Long userId, @PageableDefault(size = 10) Pageable pageable) { - return ResponseCustom.success(userService.getUserNotification(loginStatus.getUserId(), pageable)); + return ResponseCustom.success(userService.getUserNotification(userId, pageable)); } }