From bcb610462642f0ad04221fbd09e24a878b1f40cc Mon Sep 17 00:00:00 2001 From: jeong724 Date: Tue, 7 Jan 2025 01:18:46 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat=20:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC=ED=98=84=20#50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommunityController.java | 27 ++++++++++++++++++- .../repository/CommunityRepository.java | 5 ++++ .../community/service/CommunityService.java | 10 +++++++ .../repository/RetrospectRepository.java | 4 +++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/main/java/itstime/reflog/community/controller/CommunityController.java b/src/main/java/itstime/reflog/community/controller/CommunityController.java index 004c52a..35b3f45 100644 --- a/src/main/java/itstime/reflog/community/controller/CommunityController.java +++ b/src/main/java/itstime/reflog/community/controller/CommunityController.java @@ -186,7 +186,7 @@ public ResponseEntity> togglePostLike( return ResponseEntity.ok(CommonApiResponse.onSuccess(null)); } + @Operation( + summary = "커뮤니티 게시물 전체 조회 API", + description = "커뮤니티 게시물들을 조회합니다. 최신순으로 정렬되어있습니다.", + responses = { + @ApiResponse( + responseCode = "200", + description = "커뮤니티 게시글 조회 성공" + ), + @ApiResponse( + responseCode = "404", + description = "해당 회원을 찾을 수 없음" + ), + @ApiResponse( + responseCode = "500", + description = "서버 에러" + ) + } + ) + @GetMapping + public ResponseEntity>> getAllCommunity( + @RequestParam Long memberId + ){ + List responses = communityService.getAllCommunity(memberId); + return ResponseEntity.ok(CommonApiResponse.onSuccess(responses)); + } } diff --git a/src/main/java/itstime/reflog/community/repository/CommunityRepository.java b/src/main/java/itstime/reflog/community/repository/CommunityRepository.java index e442a50..c910bf8 100644 --- a/src/main/java/itstime/reflog/community/repository/CommunityRepository.java +++ b/src/main/java/itstime/reflog/community/repository/CommunityRepository.java @@ -24,4 +24,9 @@ List findByLearningTypesAndPostTypes( //제목에 키워드를 포함하고 있는 게시물 찾기 @Query("SELECT c FROM Community c WHERE c.title LIKE %:title%") List searchCommunitiesByTitleContaining(@Param("title") String title); + + //만약 업데이트 필드가 널이 아니라면 업데이트 필드 기준 정렬 사용,, 업데이트 필드가 널이라면 생성 날짜 기준 정렬 + @Query("SELECT c FROM Community c ORDER BY CASE WHEN c.updatedAt IS NOT NULL THEN c.updatedAt ELSE " + + "c.createdAt END DESC") + List getCommunitiesInorder(); } diff --git a/src/main/java/itstime/reflog/community/service/CommunityService.java b/src/main/java/itstime/reflog/community/service/CommunityService.java index bdb9247..0856d7c 100644 --- a/src/main/java/itstime/reflog/community/service/CommunityService.java +++ b/src/main/java/itstime/reflog/community/service/CommunityService.java @@ -284,5 +284,15 @@ public List getSearchedCommunity(Long mem return responses; } + @Transactional + public List getAllCommunity(Long memberId){ + Member member = memberRepository.findById(memberId) + .orElseThrow(() -> new GeneralException(ErrorStatus._MEMBER_NOT_FOUND)); + + List communities = communityRepository.getCommunitiesInorder(); + List retrospects = retrospectRepository.getRetrospectInorder(); + + + } } diff --git a/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java b/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java index d878bdc..462f05f 100644 --- a/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java +++ b/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java @@ -35,4 +35,8 @@ public interface RetrospectRepository extends JpaRepository { //제목에 키워드를 포함하고 공개로 설정된 회고일지 찾기 @Query("SELECT r FROM Retrospect r WHERE r.visibility = true AND r.title LIKE %:title%") List findByTitleContainingAndVisibilityIsTrue(@Param("title") String title); + + //생성날짜 기준 정렬 + @Query("SELECT r FROM Retrospect r ORDER BY r.createdDate DESC") + List getRetrospectInorder(); } From 22f0dad4fa93d83ddab0dd97edd3d0a9ede47b79 Mon Sep 17 00:00:00 2001 From: jeong724 Date: Tue, 7 Jan 2025 14:45:51 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat=20:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=B5=9C=EC=8B=A0=20?= =?UTF-8?q?=EC=88=9C=20=EC=A0=95=EB=A0=AC=20=ED=9B=84=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=20#50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/CommunityRepository.java | 6 +-- .../community/service/CommunityService.java | 44 +++++++++++++++++-- .../repository/RetrospectRepository.java | 3 +- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/main/java/itstime/reflog/community/repository/CommunityRepository.java b/src/main/java/itstime/reflog/community/repository/CommunityRepository.java index c910bf8..54b0039 100644 --- a/src/main/java/itstime/reflog/community/repository/CommunityRepository.java +++ b/src/main/java/itstime/reflog/community/repository/CommunityRepository.java @@ -25,8 +25,6 @@ List findByLearningTypesAndPostTypes( @Query("SELECT c FROM Community c WHERE c.title LIKE %:title%") List searchCommunitiesByTitleContaining(@Param("title") String title); - //만약 업데이트 필드가 널이 아니라면 업데이트 필드 기준 정렬 사용,, 업데이트 필드가 널이라면 생성 날짜 기준 정렬 - @Query("SELECT c FROM Community c ORDER BY CASE WHEN c.updatedAt IS NOT NULL THEN c.updatedAt ELSE " + - "c.createdAt END DESC") - List getCommunitiesInorder(); + //최신 순 정렬 + List findAllByOrderByCreatedAtDesc(); } diff --git a/src/main/java/itstime/reflog/community/service/CommunityService.java b/src/main/java/itstime/reflog/community/service/CommunityService.java index 0856d7c..14e8716 100644 --- a/src/main/java/itstime/reflog/community/service/CommunityService.java +++ b/src/main/java/itstime/reflog/community/service/CommunityService.java @@ -2,6 +2,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -285,14 +286,51 @@ public List getSearchedCommunity(Long mem } @Transactional - public List getAllCommunity(Long memberId){ + public List getAllCommunity(Long memberId) { Member member = memberRepository.findById(memberId) .orElseThrow(() -> new GeneralException(ErrorStatus._MEMBER_NOT_FOUND)); - List communities = communityRepository.getCommunitiesInorder(); - List retrospects = retrospectRepository.getRetrospectInorder(); + List communities = communityRepository.findAllByOrderByCreatedAtDesc(); + List retrospects = retrospectRepository.findAllByOrderByCreatedDateDesc(); + //회고일지, 커뮤니티 리스트를 합쳐 하나의 리스트로 + List responses = retrospects.stream().map( + retrospect -> { + String nickname = myPageRepository.findByMember(retrospect.getMember()) + .map(MyPage::getNickname) + .orElse("닉네임 없음"); + //좋아요 있는지 없는지 플래그 + Boolean isLike = postLikeRepository.findByMemberAndRetrospect(member, retrospect).isPresent(); + //게시물마다 좋아요 총 갯수 반환 + int totalLike = postLikeService.getSumRetrospectPostLike(retrospect); + + return CommunityDto.CombinedCategoryResponse.fromRetrospect(retrospect, nickname, isLike, totalLike); + }) + .collect(Collectors.toList()); + + List communityResponses = communities.stream() + .map(community -> { + String nickname = myPageRepository.findByMember(community.getMember()) + .map(MyPage::getNickname) + .orElse("닉네임 없음"); + + //좋아요 있는지 없는지 플래그 + Boolean isLike = postLikeRepository.findByMemberAndCommunity(member, community).isPresent(); + + //게시물마다 좋아요 총 갯수 반환 + int totalLike = postLikeService.getSumCommunityPostLike(community); + + return CommunityDto.CombinedCategoryResponse.fromCommunity(community, nickname, isLike, totalLike); + }) + .collect(Collectors.toList()); + + responses.addAll(communityResponses); + + //최신 순으로 정렬해주기 + responses.sort(Comparator.comparing(CommunityDto.CombinedCategoryResponse::getCreatedDate).reversed()); + + return responses; } } diff --git a/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java b/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java index 462f05f..b3eccc7 100644 --- a/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java +++ b/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java @@ -37,6 +37,5 @@ public interface RetrospectRepository extends JpaRepository { List findByTitleContainingAndVisibilityIsTrue(@Param("title") String title); //생성날짜 기준 정렬 - @Query("SELECT r FROM Retrospect r ORDER BY r.createdDate DESC") - List getRetrospectInorder(); + List findAllByOrderByCreatedDateDesc(); } From 67ab1a7f046c2a73579340a25f1fe44faf4e1d80 Mon Sep 17 00:00:00 2001 From: jeong724 Date: Tue, 7 Jan 2025 14:53:58 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat=20:=20=ED=9A=8C=EA=B3=A0=EC=9D=BC?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=EA=B3=B5=EA=B0=9C=EB=A1=9C=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=ED=95=9C=20=EA=B2=83=EB=A7=8C=20=EB=B0=98=ED=99=98=20?= =?UTF-8?q?#50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itstime/reflog/community/service/CommunityService.java | 4 ++-- .../reflog/retrospect/repository/RetrospectRepository.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/itstime/reflog/community/service/CommunityService.java b/src/main/java/itstime/reflog/community/service/CommunityService.java index 14e8716..5677eed 100644 --- a/src/main/java/itstime/reflog/community/service/CommunityService.java +++ b/src/main/java/itstime/reflog/community/service/CommunityService.java @@ -291,7 +291,7 @@ public List getAllCommunity(Long memberId .orElseThrow(() -> new GeneralException(ErrorStatus._MEMBER_NOT_FOUND)); List communities = communityRepository.findAllByOrderByCreatedAtDesc(); - List retrospects = retrospectRepository.findAllByOrderByCreatedDateDesc(); + List retrospects = retrospectRepository.findAllByVisibilityTrueOrderByCreatedDateDesc(); //회고일지, 커뮤니티 리스트를 합쳐 하나의 리스트로 List responses = retrospects.stream().map( @@ -327,7 +327,7 @@ public List getAllCommunity(Long memberId responses.addAll(communityResponses); - //최신 순으로 정렬해주기 + //최신 순으로 정렬해주기 : reversed() ! responses.sort(Comparator.comparing(CommunityDto.CombinedCategoryResponse::getCreatedDate).reversed()); return responses; diff --git a/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java b/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java index b3eccc7..504ce2f 100644 --- a/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java +++ b/src/main/java/itstime/reflog/retrospect/repository/RetrospectRepository.java @@ -36,6 +36,6 @@ public interface RetrospectRepository extends JpaRepository { @Query("SELECT r FROM Retrospect r WHERE r.visibility = true AND r.title LIKE %:title%") List findByTitleContainingAndVisibilityIsTrue(@Param("title") String title); - //생성날짜 기준 정렬 - List findAllByOrderByCreatedDateDesc(); + //공개로 설정한 모든 회고일지 생성날짜 기준 정렬 + List findAllByVisibilityTrueOrderByCreatedDateDesc(); }