From f35e172ee4d58b011dd96c46432c0a0649431080 Mon Sep 17 00:00:00 2001 From: changha Date: Mon, 6 May 2024 02:07:01 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=A0=91=EB=91=90=EC=82=AC=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20GetPostDistriction=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sanEseo/like/adapter/LikeController.java | 5 +- .../like/application/service/LikeService.java | 50 ++++++++++++++++++- .../adapter/in/web/MemberController.java | 3 +- .../sanEseo/post/adapter/PostController.java | 3 +- .../service/PostDistrictService.java | 27 +++++----- 5 files changed, 68 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/seoultech/sanEseo/like/adapter/LikeController.java b/src/main/java/com/seoultech/sanEseo/like/adapter/LikeController.java index b897220..335e827 100644 --- a/src/main/java/com/seoultech/sanEseo/like/adapter/LikeController.java +++ b/src/main/java/com/seoultech/sanEseo/like/adapter/LikeController.java @@ -7,18 +7,17 @@ import com.seoultech.sanEseo.like.application.service.AddLikeRequest; import com.seoultech.sanEseo.like.application.service.GetLikeResponse; import com.seoultech.sanEseo.like.application.service.LikeService; +import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api") +@RequiredArgsConstructor public class LikeController { private final LikeService likeService; - public LikeController(LikeService likeService) { - this.likeService = likeService; - } @PostMapping("/posts/{postId}/likes") public ResponseEntity addLike(@LoginMember AuthMember member, @PathVariable Long postId) { diff --git a/src/main/java/com/seoultech/sanEseo/like/application/service/LikeService.java b/src/main/java/com/seoultech/sanEseo/like/application/service/LikeService.java index 0beeb76..8b73e8f 100644 --- a/src/main/java/com/seoultech/sanEseo/like/application/service/LikeService.java +++ b/src/main/java/com/seoultech/sanEseo/like/application/service/LikeService.java @@ -1,6 +1,9 @@ package com.seoultech.sanEseo.like.application.service; +import com.seoultech.sanEseo.image.GetImageResponse; +import com.seoultech.sanEseo.image.ImageService; +import com.seoultech.sanEseo.image.PostImage; import com.seoultech.sanEseo.like.application.port.LikePort; import com.seoultech.sanEseo.like.domain.Likes; import com.seoultech.sanEseo.like.exception.DuplicateLikesException; @@ -9,7 +12,12 @@ import com.seoultech.sanEseo.member.domain.Member; import com.seoultech.sanEseo.post.application.port.PostPort; import com.seoultech.sanEseo.post.domain.Post; +import com.seoultech.sanEseo.post_district.application.service.GetPostDistrictResponse; +import com.seoultech.sanEseo.post_district.application.service.PostDistrictService; import lombok.AllArgsConstructor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -18,12 +26,19 @@ @Service @AllArgsConstructor - public class LikeService { private final LikePort likePort; private final MemberPort memberPort; private final PostPort postPort; + private final ImageService imageService; + private @Lazy PostDistrictService postDistrictService; + + @Autowired + public void setPostDistrictService(@Lazy PostDistrictService postDistrictService) { + this.postDistrictService = postDistrictService; + } + public void addLike(Long memberId, Long postId) { @@ -75,9 +90,40 @@ public List findLikedPostsByMember(Long memberId) { .collect(Collectors.toList()); } - public List filterPostsByCategory(List posts, int category) { + public List filterPostsByCategory(List posts, int category) { return posts.stream() .filter(post -> post.getCategory().getValue() == category) + .map(post -> { + Member author = post.getMember(); + List images = imageService.getPostImages(post.getId()); + List imageResponses = images.stream() + .map(image -> new GetImageResponse(image.getImageUrl())) + .collect(Collectors.toList()); + int likes = getLikeCount(post.getId()); + + // Assuming a method that retrieves a string of district names for the post + String districts = postDistrictService.getDistrictsForPost(post.getId()); + + + + return new GetPostDistrictResponse( + post.getId(), + author.getId(), + author.getName(), + author.getProfile(), + imageResponses, + post.getTitle(), + post.getSubTitle(), + post.getTime(), + likes, + post.getDistance(), + post.getLevel(), + districts, + 0.0, + 0.0 + ); + }) .collect(Collectors.toList()); } + } diff --git a/src/main/java/com/seoultech/sanEseo/member/adapter/in/web/MemberController.java b/src/main/java/com/seoultech/sanEseo/member/adapter/in/web/MemberController.java index d167a9c..9c98729 100644 --- a/src/main/java/com/seoultech/sanEseo/member/adapter/in/web/MemberController.java +++ b/src/main/java/com/seoultech/sanEseo/member/adapter/in/web/MemberController.java @@ -12,6 +12,7 @@ import com.seoultech.sanEseo.member.application.service.AuthService; import com.seoultech.sanEseo.member.application.service.MemberService; import com.seoultech.sanEseo.post.domain.Post; +import com.seoultech.sanEseo.post_district.application.service.GetPostDistrictResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -55,7 +56,7 @@ public ResponseEntity checkDuplicateName(@RequestParam String username) { @GetMapping("/liked-posts/{category}") public ResponseEntity getLikedPosts(@LoginMember AuthMember authMember, @PathVariable int category) { List posts = likesService.findLikedPostsByMember(authMember.getId()); - List posts1 = likesService.filterPostsByCategory(posts, category); + List posts1 = likesService.filterPostsByCategory(posts, category); return ApiResponse.ok("좋아요한 게시글 조회 성공", posts1); } } diff --git a/src/main/java/com/seoultech/sanEseo/post/adapter/PostController.java b/src/main/java/com/seoultech/sanEseo/post/adapter/PostController.java index 9923170..37b8d44 100644 --- a/src/main/java/com/seoultech/sanEseo/post/adapter/PostController.java +++ b/src/main/java/com/seoultech/sanEseo/post/adapter/PostController.java @@ -10,6 +10,7 @@ import com.seoultech.sanEseo.post.application.service.PostService; import com.seoultech.sanEseo.post.application.service.UpdatePostRequest; import com.seoultech.sanEseo.post.domain.Post; +import com.seoultech.sanEseo.post_district.application.service.GetPostDistrictResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -53,7 +54,7 @@ public ResponseEntity deletePost(@LoginMember AuthMember authMember, @PathVar @GetMapping("/by-district-prefix") public ResponseEntity getPostsByDistrictPrefix(@RequestParam String districtName) { List posts = postService.findPostsByDistrictNameStart(districtName); - List filterPostsByCategory = likeService.filterPostsByCategory(posts, 1); + List filterPostsByCategory = likeService.filterPostsByCategory(posts, 1); return ApiResponse.ok("입력된 자치구를 포함하는 게시글 반환 완료", filterPostsByCategory); } diff --git a/src/main/java/com/seoultech/sanEseo/post_district/application/service/PostDistrictService.java b/src/main/java/com/seoultech/sanEseo/post_district/application/service/PostDistrictService.java index 63d2f77..38cb250 100644 --- a/src/main/java/com/seoultech/sanEseo/post_district/application/service/PostDistrictService.java +++ b/src/main/java/com/seoultech/sanEseo/post_district/application/service/PostDistrictService.java @@ -15,6 +15,9 @@ import com.seoultech.sanEseo.post_district.domain.PostDistrict; import com.seoultech.sanEseo.public_api.application.service.CoordinateService; import com.seoultech.sanEseo.public_api.application.service.dto.GetCoordinateResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; @@ -23,26 +26,20 @@ import java.util.stream.Collectors; @Service +@RequiredArgsConstructor public class PostDistrictService { - private final DistrictPort districtPort; private final PostDistrictPort postDistrictPort; private final ImageService imageService; - private final LikeService likeService; + private @Lazy LikeService likeService; private final CoordinateService coordinateService; - private final MemberService memberService; - private final PostPort postPort; - public PostDistrictService(DistrictPort districtPort, PostDistrictPort postDistrictPort, ImageService imageService, LikeService likeService, CoordinateService coordinateService, MemberService memberService, PostPort postPort) { - this.districtPort = districtPort; - this.postDistrictPort = postDistrictPort; - this.imageService = imageService; + @Autowired + public void setLikeService(@Lazy LikeService likeService) { this.likeService = likeService; - this.coordinateService = coordinateService; - this.memberService = memberService; - this.postPort = postPort; } + public List getPostDistrict(Long districtId) { List postDistricts = postDistrictPort.findByDistrictId(districtId); // 해당 post의 image를 가져오기 위해 imageService를 사용 @@ -111,6 +108,10 @@ private List getPostDistrictResponses(List postDistricts = postDistrictPort.findByPostId(id); + return postDistricts.stream() + .map(postDistrict -> postDistrict.getDistrict().getName()) + .collect(Collectors.joining(", ")); + } }