diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..176db38 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,14 @@ +## ๐Ÿ”ฅ Summary + +- line1 +- line2 + + + +## โœ๏ธ Describe your changes + + + + +## ๐Ÿ“– Review Point + \ No newline at end of file diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index 759513a..00de830 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -3,8 +3,6 @@ name: Java CI with Gradle on: push: branches: [ "main" ] - pull_request: - branches: [ "main" ] permissions: contents: read diff --git a/src/main/java/porori/backend/community/controller/BookmarkController.java b/src/main/java/porori/backend/community/controller/BookmarkController.java index 37b52f6..557b234 100644 --- a/src/main/java/porori/backend/community/controller/BookmarkController.java +++ b/src/main/java/porori/backend/community/controller/BookmarkController.java @@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import porori.backend.community.config.BaseResponse; -import porori.backend.community.dto.PostResDto; +import porori.backend.community.dto.PostResDto.*; import porori.backend.community.service.BookmarkService; @RequiredArgsConstructor @@ -18,7 +18,7 @@ public class BookmarkController { //๋ถ๋งˆํฌ ์ƒ์„ฑํ•˜๊ธฐ @Operation(summary = "๋ถ๋งˆํฌ ์ƒ์„ฑ", description = "ํ•ด๋‹น postId์— ๋ถ๋งˆํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.") @PostMapping("/bookmark/{postId}") - public BaseResponse createBookmark(@RequestHeader("Authorization") String token, @PathVariable("postId") Long postId){ + public BaseResponse createBookmark(@RequestHeader("Authorization") String token, @PathVariable("postId") Long postId){ return new BaseResponse<>(bookmarkService.createBookmark(token, postId)); } } diff --git a/src/main/java/porori/backend/community/controller/CommentController.java b/src/main/java/porori/backend/community/controller/CommentController.java new file mode 100644 index 0000000..0e0e5cb --- /dev/null +++ b/src/main/java/porori/backend/community/controller/CommentController.java @@ -0,0 +1,34 @@ +package porori.backend.community.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import porori.backend.community.config.BaseResponse; +import porori.backend.community.dto.CommentReqDto.*; +import porori.backend.community.dto.CommentResDto.*; +import porori.backend.community.service.CommentService; + +import java.util.List; + +@RequiredArgsConstructor +@RequestMapping("/api/communities") +@RestController +@Tag(name = "Comment API", description = "๋Œ“๊ธ€ API") +public class CommentController { + private final CommentService commentService; + + @Operation(summary = "๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€ ์ž‘์„ฑ", description = "postId๋กœ ๊ฒŒ์‹œ๊ธ€์˜ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.") + @PostMapping("/comments/{postId}") + public BaseResponse createComments(@RequestHeader("Authorization") String token, @PathVariable Long postId, + @RequestBody CommentContentReq comment){ + commentService.createComment(token, postId, comment.getContent()); + return new BaseResponse<>("postId๊ฐ€ "+postId+"์ธ ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."); + } + + @Operation(summary = "๊ฒŒ์‹œ๊ธ€์˜ ๋Œ“๊ธ€ ์กฐํšŒ", description = "postId๋กœ ๊ฒŒ์‹œ๊ธ€์˜ ๋Œ“๊ธ€์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.") + @GetMapping("/comments/{postId}") + public BaseResponse> getComments(@RequestHeader("Authorization") String token, @PathVariable Long postId){ + return new BaseResponse<>(commentService.getComments(token, postId)); + } +} diff --git a/src/main/java/porori/backend/community/controller/PostController.java b/src/main/java/porori/backend/community/controller/PostController.java index 30a6bed..49d6b41 100644 --- a/src/main/java/porori/backend/community/controller/PostController.java +++ b/src/main/java/porori/backend/community/controller/PostController.java @@ -45,4 +45,10 @@ public BaseResponse> getPostsOnSwipe(@RequestHeade return new BaseResponse<>(postService.getPostsOnSwipe(token, postIdList.getPostIdList())); } + @Operation(summary = "๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ๋ณด๊ธฐ", description = "postId๋กœ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.") + @GetMapping("/post/{postId}") + public BaseResponse getPostDetail(@RequestHeader("Authorization") String token, @PathVariable Long postId){ + return new BaseResponse<>(postService.getPostDetail(token, postId)); + } + } diff --git a/src/main/java/porori/backend/community/domain/Comment.java b/src/main/java/porori/backend/community/domain/Comment.java new file mode 100644 index 0000000..643d7e8 --- /dev/null +++ b/src/main/java/porori/backend/community/domain/Comment.java @@ -0,0 +1,37 @@ +package porori.backend.community.domain; + +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import porori.backend.community.domain.core.BaseTimeEntity; + +import javax.persistence.*; + +@Entity +@Getter +@Setter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "comment") +@DynamicInsert +public class Comment extends BaseTimeEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "comment_id") + private Long commentId; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "post_id") + private Post postId; + + @Column(nullable = false, name = "user_id") + private Long userId; + + @Column(nullable = false, columnDefinition = "TEXT") + private String content; + + @Builder + public Comment(Post postId, Long userId, String content) { + this.postId = postId; + this.userId = userId; + this.content = content; + } +} diff --git a/src/main/java/porori/backend/community/dto/CommentReqDto.java b/src/main/java/porori/backend/community/dto/CommentReqDto.java new file mode 100644 index 0000000..e475da9 --- /dev/null +++ b/src/main/java/porori/backend/community/dto/CommentReqDto.java @@ -0,0 +1,12 @@ +package porori.backend.community.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class CommentReqDto { + @Getter + public static class CommentContentReq{ + String content; + } +} diff --git a/src/main/java/porori/backend/community/dto/CommentResDto.java b/src/main/java/porori/backend/community/dto/CommentResDto.java new file mode 100644 index 0000000..7eeefad --- /dev/null +++ b/src/main/java/porori/backend/community/dto/CommentResDto.java @@ -0,0 +1,33 @@ +package porori.backend.community.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import porori.backend.community.domain.Comment; + +import java.time.LocalDateTime; + +@NoArgsConstructor +public class CommentResDto { + + @Getter + @AllArgsConstructor + @NoArgsConstructor + public static class CommentDetailRes{ + private String content; + private LocalDateTime createdAt; + private String nickname; + private String image; + private String backgroundColor; + + @Builder + public CommentDetailRes(Comment comment, UserResDto.CommunityUserInfo userInfo){ + this.content = comment.getContent(); + this.createdAt = comment.getCreatedAt(); + this.nickname = userInfo.getNickname(); + this.image = userInfo.getImage(); + this.backgroundColor = userInfo.getBackgroundColor(); + } + } +} diff --git a/src/main/java/porori/backend/community/dto/PostResDto.java b/src/main/java/porori/backend/community/dto/PostResDto.java index ea6dc43..826deb2 100644 --- a/src/main/java/porori/backend/community/dto/PostResDto.java +++ b/src/main/java/porori/backend/community/dto/PostResDto.java @@ -76,4 +76,33 @@ public PostSwipeRes(Post post, CommunityUserInfo user) { } } + @Getter + public static class PostDetailRes { + private String title; + private String content; + private Double latitude; + private Double longitude; + private List tagList; + private List imageList; + private LocalDateTime createdAt; + private String nickName; + private String imageUrl; + private String backgroundColor; + + + @Builder + public PostDetailRes(Post post, CommunityUserInfo user) { + this.title = post.getTitle(); + this.content = post.getContent(); + this.latitude = post.getLatitude(); + this.longitude = post.getLongitude(); + this.tagList = post.getTagList().stream().map((postTag) -> postTag.getTagId().getName()).collect(Collectors.toList()); + this.imageList = post.getImageList().stream().map(PostAttach::getImageName).collect(Collectors.toList()); + this.createdAt = post.getCreatedAt(); + this.nickName = user.getNickname(); + this.imageUrl = user.getImage(); + this.backgroundColor = user.getBackgroundColor(); + } + } + } diff --git a/src/main/java/porori/backend/community/dto/UserReqDto.java b/src/main/java/porori/backend/community/dto/UserReqDto.java deleted file mode 100644 index 4b397ed..0000000 --- a/src/main/java/porori/backend/community/dto/UserReqDto.java +++ /dev/null @@ -1,23 +0,0 @@ -package porori.backend.community.dto; - -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -import java.util.List; - -@NoArgsConstructor -public class UserReqDto { - @Getter - @Builder - public static class AccessTokenReq{ - private String accessToken; - - } - - @Getter - @Builder - public static class UserIdListReq{ - private List userIdList; - } -} diff --git a/src/main/java/porori/backend/community/repository/CommentRepository.java b/src/main/java/porori/backend/community/repository/CommentRepository.java new file mode 100644 index 0000000..cc22c1c --- /dev/null +++ b/src/main/java/porori/backend/community/repository/CommentRepository.java @@ -0,0 +1,11 @@ +package porori.backend.community.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import porori.backend.community.domain.Comment; +import porori.backend.community.domain.Post; + +import java.util.List; + +public interface CommentRepository extends JpaRepository { + List findAllByPostIdOrderByCreatedAt(Post post); +} diff --git a/src/main/java/porori/backend/community/service/BookmarkService.java b/src/main/java/porori/backend/community/service/BookmarkService.java index e9b229e..88665da 100644 --- a/src/main/java/porori/backend/community/service/BookmarkService.java +++ b/src/main/java/porori/backend/community/service/BookmarkService.java @@ -8,7 +8,7 @@ import porori.backend.community.config.exception.post.NotFoundPostIdException; import porori.backend.community.domain.Bookmark; import porori.backend.community.domain.Post; -import porori.backend.community.dto.PostResDto; +import porori.backend.community.dto.PostResDto.*; import porori.backend.community.repository.BookmarkRepository; import porori.backend.community.repository.PostRepository; @@ -26,7 +26,7 @@ public class BookmarkService { private final UserService userService; - public PostResDto.PostContentRes createBookmark(String token, Long postId){ + public PostContentRes createBookmark(String token, Long postId){ //ํ† ํฐ ์œ ํšจ ํ™•์ธ userService.sendTestJwtRequest(token); @@ -48,7 +48,7 @@ public PostResDto.PostContentRes createBookmark(String token, Long postId){ .postId(post) .build()); - return new PostResDto.PostContentRes(post); + return new PostContentRes(post); } } diff --git a/src/main/java/porori/backend/community/service/CommentService.java b/src/main/java/porori/backend/community/service/CommentService.java new file mode 100644 index 0000000..302539d --- /dev/null +++ b/src/main/java/porori/backend/community/service/CommentService.java @@ -0,0 +1,58 @@ +package porori.backend.community.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import porori.backend.community.config.exception.post.NotFoundPostIdException; +import porori.backend.community.domain.Comment; +import porori.backend.community.domain.Post; +import porori.backend.community.dto.CommentResDto; +import porori.backend.community.dto.CommentResDto.*; +import porori.backend.community.dto.UserResDto; +import porori.backend.community.repository.CommentRepository; +import porori.backend.community.repository.PostRepository; + +import javax.transaction.Transactional; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +@Transactional +public class CommentService { + private final PostRepository postRepository; + private final CommentRepository commentRepository; + + private final UserService userService; + + //๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ + public void createComment(String token, Long postId, String content) { + Long userId = userService.getUserId(token); + + Post post = postRepository.findByPostIdAndStatus(postId, "ACTIVE").orElseThrow(NotFoundPostIdException::new); + + Comment comment = Comment.builder().userId(userId).postId(post).content(content).build(); + + commentRepository.save(comment); + } + + //๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ ์กฐํšŒ (๋ถ„๋ฆฌ) + public List getComments(String token, Long postId) { + Post post = postRepository.findByPostIdAndStatus(postId, "ACTIVE").orElseThrow(NotFoundPostIdException::new); + + List commentList = commentRepository.findAllByPostIdOrderByCreatedAt(post); + List userIdList = commentList.stream().map(Comment::getUserId).collect(Collectors.toList()); + + List commentUserInfoBlocks = userService.sendCommunitiesInfoRequest(token, userIdList); + + HashMap commentUserInfoHashMap = new HashMap<>(); + commentUserInfoBlocks.forEach(communityUserInfo -> { + commentUserInfoHashMap.put(communityUserInfo.getUserId(), communityUserInfo); + }); + + return commentList.stream().map(comment -> CommentResDto.CommentDetailRes.builder() + .comment(comment) + .userInfo(commentUserInfoHashMap.get(comment.getUserId())).build()).collect(Collectors.toList()); + } + +} diff --git a/src/main/java/porori/backend/community/service/PostService.java b/src/main/java/porori/backend/community/service/PostService.java index 44496bb..73a568e 100644 --- a/src/main/java/porori/backend/community/service/PostService.java +++ b/src/main/java/porori/backend/community/service/PostService.java @@ -3,14 +3,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import porori.backend.community.domain.Post; -import porori.backend.community.domain.PostAttach; -import porori.backend.community.domain.PostTag; -import porori.backend.community.domain.Tag; -import porori.backend.community.dto.PostReqDto; -import porori.backend.community.dto.PostResDto; -import porori.backend.community.dto.UserReqDto; -import porori.backend.community.dto.UserResDto.CommunityUserInfo; +import porori.backend.community.domain.*; +import porori.backend.community.dto.PostReqDto.*; +import porori.backend.community.dto.PostResDto.*; +import porori.backend.community.dto.UserResDto.*; import porori.backend.community.repository.*; import porori.backend.community.config.exception.post.NotFoundPostIdException; @@ -37,7 +33,7 @@ public class PostService { private final UserService userService; - public PostResDto.PostContentRes createPost(String token, PostReqDto.PostContentReq postContent) { + public PostContentRes createPost(String token, PostContentReq postContent) { //ํ† ํฐ ์œ ํšจ ํ™•์ธ userService.sendTestJwtRequest(token); @@ -66,36 +62,36 @@ public PostResDto.PostContentRes createPost(String token, PostReqDto.PostContent //Post ์ €์žฅ Post post = postRepository.save(postEntity); - return new PostResDto.PostContentRes(post); + return new PostContentRes(post); } //๊ฒŒ์‹œ๊ธ€ ์ง€๋„์—์„œ ๋ณด๊ธฐ - public List getPostsOnMap(String token, PostReqDto.CurrentLocationReq currentLocation) { + public List getPostsOnMap(String token, CurrentLocationReq currentLocation) { //ํ† ํฐ ์œ ํšจ ํ™•์ธ userService.sendTestJwtRequest(token); LocalDateTime yesterday = LocalDateTime.now().minusDays(1); //์ฃผ๋ณ€ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ - List nearByPosts = postRepository.findNearByPosts(currentLocation.getLatitude(), currentLocation.getLongitude(), yesterday); + List nearByPosts = postRepository.findNearByPosts( + currentLocation.getLatitude(), currentLocation.getLongitude(), yesterday); //์ฃผ๋ณ€ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์—์„œ userId ์ถ”์ถœ List userIdList = nearByPosts.stream().map(Post::getUserId).collect(Collectors.toList()); //userId๋กœ communityUser ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ - List userInfoBlocks = userService.sendCommunitiesInfoRequest(token, UserReqDto.UserIdListReq.builder().userIdList(userIdList).build()); + List userInfoBlocks = userService.sendCommunitiesInfoRequest(token, userIdList); HashMap communityUserInfoHashMap = new HashMap<>(); userInfoBlocks.forEach(communityUserInfo -> { communityUserInfoHashMap.put(communityUserInfo.getUserId(), communityUserInfo); }); - List postOnMapList = new ArrayList<>(); + List postOnMapList = new ArrayList<>(); for (Post post : nearByPosts) { - PostResDto.PostOnMapRes postOnMap = PostResDto.PostOnMapRes.builder() + PostOnMapRes postOnMap = PostOnMapRes.builder() .post(post) - .user(communityUserInfoHashMap.get(post.getUserId())) - .build(); + .user(communityUserInfoHashMap.get(post.getUserId())).build(); postOnMapList.add(postOnMap); } @@ -103,33 +99,41 @@ public List getPostsOnMap(String token, PostReqDto.Curr } //๊ฒŒ์‹œ๊ธ€ ์Šค์™€์ดํ”„ ๋ณด๊ธฐ - public List getPostsOnSwipe(String token, List postIdList) { + public List getPostsOnSwipe(String token, List postIdList) { //ํ† ํฐ ์œ ํšจ ํ™•์ธ userService.sendTestJwtRequest(token); //postId๋กœ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ List postsOnSwipe = new ArrayList<>(); - postIdList.forEach(postId->{ - postsOnSwipe.add(postRepository.findByPostIdAndStatusWithImageList(postId).orElseThrow(NotFoundPostIdException::new)); + postIdList.forEach(postId -> { + postsOnSwipe.add( + postRepository.findByPostIdAndStatusWithImageList(postId).orElseThrow(NotFoundPostIdException::new)); }); //๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์—์„œ userId ์ถ”์ถœ List userIdList = postsOnSwipe.stream().map(Post::getUserId).collect(Collectors.toList()); //userId๋กœ communityUser ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ - List userInfoBlocks = userService.sendCommunitiesInfoRequest(token, UserReqDto.UserIdListReq.builder().userIdList(userIdList).build()); + List userInfoBlocks = userService.sendCommunitiesInfoRequest(token, userIdList); HashMap communityUserInfoHashMap = new HashMap<>(); userInfoBlocks.forEach(communityUserInfo -> { communityUserInfoHashMap.put(communityUserInfo.getUserId(), communityUserInfo); }); - return postsOnSwipe.stream() - .map(post -> PostResDto.PostSwipeRes.builder() - .post(post) - .user(communityUserInfoHashMap.get(post.getUserId())) - .build()) - .collect(Collectors.toList()); + return postsOnSwipe.stream().map(post -> PostSwipeRes.builder() + .post(post). + user(communityUserInfoHashMap.get(post.getUserId())).build()).collect(Collectors.toList()); + } + + //๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ๋ณด๊ธฐ + public PostDetailRes getPostDetail(String token, Long postId) { + Post post = postRepository.findByPostIdAndStatus(postId, "ACTIVE").orElseThrow(NotFoundPostIdException::new); + + List userInfoBlock = userService.sendCommunitiesInfoRequest( + token, Collections.singletonList(post.getUserId())); + + return PostDetailRes.builder().post(post).user(userInfoBlock.get(0)).build(); } } diff --git a/src/main/java/porori/backend/community/service/UserService.java b/src/main/java/porori/backend/community/service/UserService.java index b0d136a..59f95f5 100644 --- a/src/main/java/porori/backend/community/service/UserService.java +++ b/src/main/java/porori/backend/community/service/UserService.java @@ -3,18 +3,19 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; import porori.backend.community.config.BaseResponse; import porori.backend.community.config.exception.user.TokenException; import porori.backend.community.config.exception.user.UserBadGateWayException; -import porori.backend.community.dto.UserReqDto.UserIdListReq; import porori.backend.community.dto.UserResDto.UserInfo; import porori.backend.community.dto.UserResDto.CommunityUserInfo; -import porori.backend.community.dto.UserReqDto.AccessTokenReq; +import reactor.core.publisher.Mono; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Slf4j @Service @@ -24,31 +25,20 @@ public class UserService { private static final String LOG_FORMAT = "Method : {}"; public Long getUserId(String token) { - String[] splitToken = token.split(" "); - - AccessTokenReq accessTokenReq = AccessTokenReq.builder() - .accessToken(splitToken[1]) - .build(); - - return sendTokenMeRequest(token, accessTokenReq).getUserId(); + return sendTokenMeRequest(token).getUserId(); } - private UserInfo sendTokenMeRequest(String token, AccessTokenReq accessTokenReq) { - return webClient.post() - .uri("/token/me") - .header("Authorization", token) - .bodyValue(accessTokenReq) - .retrieve() - .bodyToMono((new ParameterizedTypeReference>() { - })) - .map(response->{ - if (response.getStatusCode() == 200) { - return response.getData(); - } else { - throw new UserBadGateWayException(); - } - }) - .block(); + private UserInfo sendTokenMeRequest(String token) { + return webClient.get() + .uri("/token/me") + .header("Authorization", token) + .retrieve() + .onStatus(HttpStatus::is4xxClientError, clientResponse -> Mono.error(new TokenException())) + .onStatus(HttpStatus::is5xxServerError, clientResponse -> Mono.error(new UserBadGateWayException())) + .bodyToMono((new ParameterizedTypeReference>() { + })) + .map(BaseResponse::getData) + .block(); } //(ํ…Œ์ŠคํŠธ) ํ† ํฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ @@ -60,28 +50,27 @@ public void sendTestJwtRequest(String token) { .retrieve() .toBodilessEntity() .block(); - } catch (Exception e){ + } catch (Exception e) { log.warn(LOG_FORMAT, "sendTestJwtRequest"); throw new TokenException(); } } - public List sendCommunitiesInfoRequest(String token, UserIdListReq userIdList) { - return webClient.post() - .uri("/communities/info") + public List sendCommunitiesInfoRequest(String token, List userIdList) { + String param = userIdList.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + log.warn(LOG_FORMAT, param); + + return webClient.get() + .uri(uriBuilder -> uriBuilder.path("/communities/info").queryParam("userIdList", param).build()) .header("Authorization", token) - .bodyValue(userIdList) .retrieve() + .onStatus(HttpStatus::is4xxClientError, clientResponse -> Mono.error(new TokenException())) + .onStatus(HttpStatus::is5xxServerError, clientResponse -> Mono.error(new UserBadGateWayException())) .bodyToMono((new ParameterizedTypeReference>>>() { })) - .map(response->{ - if (response.getStatusCode() == 200) { - log.warn("communityUserInfoBlocks : {}", "์™„"); - return response.getData().get("communityUserInfoBlocks"); - } else { - throw new UserBadGateWayException(); - } - }) + .map(response -> response.getData().get("communityUserInfoBlocks")) .block(); }