From ef367e4b1a33eb61df63e3bef1615c5a6023069e Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 03:54:33 +0900 Subject: [PATCH 01/14] [feat] create MemberSuccessCode --- .../common/code/success/MemberSuccessCode.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java diff --git a/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java new file mode 100644 index 0000000..69ba739 --- /dev/null +++ b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java @@ -0,0 +1,17 @@ +package com.newsnack.www.newsnackserver.common.code.success; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum MemberSuccessCode implements SuccessCode{ + /** + * 200 OK + **/ + GET_LOGIN_USER_INFO_SUCCESS(HttpStatus.OK, "로그인 유저 정보 조회 성공"); + + private final HttpStatus httpStatus; + private final String message; +} From d4541bfaf513810ae46e627f2ea913fa80d3eb2e Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 03:54:47 +0900 Subject: [PATCH 02/14] [feat] create logic for get memberinfo api --- .../newsnackserver/service/MemberService.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java diff --git a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java new file mode 100644 index 0000000..5faf119 --- /dev/null +++ b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java @@ -0,0 +1,22 @@ +package com.newsnack.www.newsnackserver.service; + +import com.newsnack.www.newsnackserver.common.code.failure.MemberFailureCode; +import com.newsnack.www.newsnackserver.common.exception.MemberException; +import com.newsnack.www.newsnackserver.domain.member.model.Member; +import com.newsnack.www.newsnackserver.domain.member.repository.MemberJpaRepository; +import com.newsnack.www.newsnackserver.dto.response.MemberInfoResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MemberService { + private final MemberJpaRepository memberJpaRepository; + + public MemberInfoResponse getMemberInfo(Long memberId) { + Member member = memberJpaRepository.findById(memberId).orElseThrow(() -> new MemberException(MemberFailureCode.MEMBER_NOT_FOUND)); + return MemberInfoResponse.of(member); + } +} From 9467d871c35d2dd228f7a27f047b62103a317eff Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 03:54:59 +0900 Subject: [PATCH 03/14] [feat] create get member info api --- .../controller/MemberController.java | 25 +++++++++++++++++++ .../dto/response/MemberInfoResponse.java | 9 +++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java create mode 100644 src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberInfoResponse.java diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java new file mode 100644 index 0000000..aa78053 --- /dev/null +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java @@ -0,0 +1,25 @@ +package com.newsnack.www.newsnackserver.controller; + +import com.newsnack.www.newsnackserver.annotation.MemberId; +import com.newsnack.www.newsnackserver.common.code.success.MemberSuccessCode; +import com.newsnack.www.newsnackserver.common.response.NewSnackResponse; +import com.newsnack.www.newsnackserver.dto.response.MemberInfoResponse; +import com.newsnack.www.newsnackserver.service.MemberService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/v1/members") +@RequiredArgsConstructor +public class MemberController { + + private final MemberService memberService; + + @GetMapping("/me") + public NewSnackResponse getLoginUserInfo(@MemberId Long userId){ + return NewSnackResponse.success(MemberSuccessCode.GET_LOGIN_USER_INFO_SUCCESS, memberService.getMemberInfo(userId)); + } + +} diff --git a/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberInfoResponse.java b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberInfoResponse.java new file mode 100644 index 0000000..f27d960 --- /dev/null +++ b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberInfoResponse.java @@ -0,0 +1,9 @@ +package com.newsnack.www.newsnackserver.dto.response; + +import com.newsnack.www.newsnackserver.domain.member.model.Member; + +public record MemberInfoResponse(String name) { + public static MemberInfoResponse of(Member member) { + return new MemberInfoResponse(member.getName()); + } +} From 8889aa81926e555c4404e7336bd884f9976f20ab Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 18:24:49 +0900 Subject: [PATCH 04/14] [feat] add success code in MemberSuccessCode --- .../newsnackserver/common/code/success/MemberSuccessCode.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java index 69ba739..c9585d6 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java +++ b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java @@ -10,7 +10,8 @@ public enum MemberSuccessCode implements SuccessCode{ /** * 200 OK **/ - GET_LOGIN_USER_INFO_SUCCESS(HttpStatus.OK, "로그인 유저 정보 조회 성공"); + GET_LOGIN_USER_INFO_SUCCESS(HttpStatus.OK, "로그인 유저 정보 조회 성공"), + GET_LIKED_ARTICLES_SUCCESS(HttpStatus.OK, "좋아요한 게시글 조회 성공"); private final HttpStatus httpStatus; private final String message; From f73fd200130884791b0616d1a9e774146625fd8d Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 18:25:31 +0900 Subject: [PATCH 05/14] [feat] create logic for get articles liked by member --- .../repository/ArticleHeartJpaRepository.java | 5 +++++ .../www/newsnackserver/service/MemberService.java | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java b/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java index ff17392..9d9fa7d 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java +++ b/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java @@ -4,9 +4,14 @@ import com.newsnack.www.newsnackserver.domain.articleheart.model.ArticleHeart; import com.newsnack.www.newsnackserver.domain.member.model.Member; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import java.util.List; import java.util.Optional; public interface ArticleHeartJpaRepository extends JpaRepository { Optional findByArticleAndMember(Article article, Member member); + + @Query("select ah from ArticleHeart ah join fetch ah.article where ah.member.id = :memberId") + List findAllWithArticleByMemberIdJPQL(Long memberId); } diff --git a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java index 5faf119..ea4e27b 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java +++ b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java @@ -2,21 +2,34 @@ import com.newsnack.www.newsnackserver.common.code.failure.MemberFailureCode; import com.newsnack.www.newsnackserver.common.exception.MemberException; +import com.newsnack.www.newsnackserver.domain.article.model.Article; +import com.newsnack.www.newsnackserver.domain.articleheart.model.ArticleHeart; +import com.newsnack.www.newsnackserver.domain.articleheart.repository.ArticleHeartJpaRepository; import com.newsnack.www.newsnackserver.domain.member.model.Member; import com.newsnack.www.newsnackserver.domain.member.repository.MemberJpaRepository; import com.newsnack.www.newsnackserver.dto.response.MemberInfoResponse; +import com.newsnack.www.newsnackserver.dto.response.MemberLikedArticleResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class MemberService { private final MemberJpaRepository memberJpaRepository; + private final ArticleHeartJpaRepository articleHeartJpaRepository; + public MemberInfoResponse getMemberInfo(Long memberId) { Member member = memberJpaRepository.findById(memberId).orElseThrow(() -> new MemberException(MemberFailureCode.MEMBER_NOT_FOUND)); return MemberInfoResponse.of(member); } +//todo: paging추가 + public List getLikedArticles(Long memberId) { + List
articles = articleHeartJpaRepository.findAllWithArticleByMemberIdJPQL(memberId).stream().map(ArticleHeart::getArticle).toList(); + return articles.stream().map(article -> MemberLikedArticleResponse.of(article)).toList(); + } } From f6093693532c8a23e16c9deae44601694f0bd312 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 18:25:43 +0900 Subject: [PATCH 06/14] [feat] create get articles liked by member api --- .../newsnackserver/controller/MemberController.java | 8 ++++++++ .../dto/response/MemberLikedArticleResponse.java | 10 ++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberLikedArticleResponse.java diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java index aa78053..26dcd72 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java @@ -4,12 +4,15 @@ import com.newsnack.www.newsnackserver.common.code.success.MemberSuccessCode; import com.newsnack.www.newsnackserver.common.response.NewSnackResponse; import com.newsnack.www.newsnackserver.dto.response.MemberInfoResponse; +import com.newsnack.www.newsnackserver.dto.response.MemberLikedArticleResponse; import com.newsnack.www.newsnackserver.service.MemberService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequestMapping("/v1/members") @RequiredArgsConstructor @@ -22,4 +25,9 @@ public NewSnackResponse getLoginUserInfo(@MemberId Long user return NewSnackResponse.success(MemberSuccessCode.GET_LOGIN_USER_INFO_SUCCESS, memberService.getMemberInfo(userId)); } + @GetMapping("/me/liked-articles") + public NewSnackResponse> getLikedArticles(@MemberId Long userId){ + return NewSnackResponse.success(MemberSuccessCode.GET_LIKED_ARTICLES_SUCCESS, memberService.getLikedArticles(userId)); + } + } diff --git a/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberLikedArticleResponse.java b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberLikedArticleResponse.java new file mode 100644 index 0000000..69f2aaf --- /dev/null +++ b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberLikedArticleResponse.java @@ -0,0 +1,10 @@ +package com.newsnack.www.newsnackserver.dto.response; + +import com.newsnack.www.newsnackserver.domain.article.model.Article; +import com.newsnack.www.newsnackserver.domain.article.model.SectionCategory; + +public record MemberLikedArticleResponse(Long id, String title, String imageUrl, String createdAt, SectionCategory sectionCategory) { + public static MemberLikedArticleResponse of(Article article) { +return new MemberLikedArticleResponse(article.getId(), article.getTitle(), article.getImageUrl(), article.getCreatedAt().toString(), article.getSectionCategory()); + } +} From 7bc9ddc64f1a031c8dacf13a125e801d14a65704 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 18:42:52 +0900 Subject: [PATCH 07/14] [refactor] change parameter name userId to memberId --- .../www/newsnackserver/controller/MemberController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java index 26dcd72..0658466 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java @@ -21,13 +21,13 @@ public class MemberController { private final MemberService memberService; @GetMapping("/me") - public NewSnackResponse getLoginUserInfo(@MemberId Long userId){ - return NewSnackResponse.success(MemberSuccessCode.GET_LOGIN_USER_INFO_SUCCESS, memberService.getMemberInfo(userId)); + public NewSnackResponse getLoginUserInfo(@MemberId Long memberId){ + return NewSnackResponse.success(MemberSuccessCode.GET_LOGIN_USER_INFO_SUCCESS, memberService.getMemberInfo(memberId)); } @GetMapping("/me/liked-articles") - public NewSnackResponse> getLikedArticles(@MemberId Long userId){ - return NewSnackResponse.success(MemberSuccessCode.GET_LIKED_ARTICLES_SUCCESS, memberService.getLikedArticles(userId)); + public NewSnackResponse> getLikedArticles(@MemberId Long memberId){ + return NewSnackResponse.success(MemberSuccessCode.GET_LIKED_ARTICLES_SUCCESS, memberService.getLikedArticles(memberId)); } } From 9db6a8ea2bceeb3e6cfc2671a95f213f1244b3f7 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 19:57:58 +0900 Subject: [PATCH 08/14] [feat] add Member success codes --- .../newsnackserver/common/code/success/MemberSuccessCode.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java index c9585d6..d07609c 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java +++ b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/MemberSuccessCode.java @@ -11,7 +11,9 @@ public enum MemberSuccessCode implements SuccessCode{ * 200 OK **/ GET_LOGIN_USER_INFO_SUCCESS(HttpStatus.OK, "로그인 유저 정보 조회 성공"), - GET_LIKED_ARTICLES_SUCCESS(HttpStatus.OK, "좋아요한 게시글 조회 성공"); + GET_LIKED_ARTICLES_SUCCESS(HttpStatus.OK, "좋아요한 게시글 조회 성공"), + GET_PARTICIPATED_DEBATES_SUCCESS(HttpStatus.OK, "참여한 토론들 조회 성공"), + GET_MY_COMMENTS_SUCCESS(HttpStatus.OK, "나의 댓글 목록 조회 성공"); private final HttpStatus httpStatus; private final String message; From 47448a2318ac4438f24699b550440a5f2316fdda Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 19:59:15 +0900 Subject: [PATCH 09/14] [fix] add orderby in query for get my liked articles --- .../articleheart/repository/ArticleHeartJpaRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java b/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java index 9d9fa7d..fcf99b2 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java +++ b/src/main/java/com/newsnack/www/newsnackserver/domain/articleheart/repository/ArticleHeartJpaRepository.java @@ -12,6 +12,6 @@ public interface ArticleHeartJpaRepository extends JpaRepository { Optional findByArticleAndMember(Article article, Member member); - @Query("select ah from ArticleHeart ah join fetch ah.article where ah.member.id = :memberId") + @Query("select ah from ArticleHeart ah join fetch ah.article where ah.member.id = :memberId order by ah.id desc") List findAllWithArticleByMemberIdJPQL(Long memberId); } From 2bc523c820808d0ce01d30cd3112c5b9591b4c3a Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 20:03:02 +0900 Subject: [PATCH 10/14] [feat] create logic for get my participated debates api --- .../repository/DebateParticipationJpaRepository.java | 5 +++++ .../www/newsnackserver/service/MemberService.java | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/domain/debateparticipation/repository/DebateParticipationJpaRepository.java b/src/main/java/com/newsnack/www/newsnackserver/domain/debateparticipation/repository/DebateParticipationJpaRepository.java index 876960f..1a49307 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/domain/debateparticipation/repository/DebateParticipationJpaRepository.java +++ b/src/main/java/com/newsnack/www/newsnackserver/domain/debateparticipation/repository/DebateParticipationJpaRepository.java @@ -10,6 +10,7 @@ import java.util.Optional; public interface DebateParticipationJpaRepository extends JpaRepository { + Optional findByDebateAndMember(Debate debate, Member member); @Query("select dp from DebateParticipation dp join fetch dp.member where dp.debate.id = :debateId order by dp.id desc") @@ -20,6 +21,10 @@ public interface DebateParticipationJpaRepository extends JpaRepository findAllWithMemberAndDebateParticipationHeartByDebateIdOrderByIdDescJPQL(Long debateId); + @Query("select distinct dp from DebateParticipation dp left join fetch dp.debateParticipationHearts join fetch dp.member where dp.debate.id = :debateId order by dp.heartCount desc, dp.id desc") List findAllWithMemberAndDebateParticipationHeartByDebateIdOrderByHeartCountDescJPQL(Long debateId); + + @Query("select dp from DebateParticipation dp join fetch dp.debate where dp.member.id = :memberId order by dp.id desc") + List findAllWithDebateByMemberIdJPQL(Long memberId); } diff --git a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java index ea4e27b..4c0285a 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java +++ b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java @@ -5,10 +5,14 @@ import com.newsnack.www.newsnackserver.domain.article.model.Article; import com.newsnack.www.newsnackserver.domain.articleheart.model.ArticleHeart; import com.newsnack.www.newsnackserver.domain.articleheart.repository.ArticleHeartJpaRepository; +import com.newsnack.www.newsnackserver.domain.debate.model.Debate; +import com.newsnack.www.newsnackserver.domain.debateparticipation.model.DebateParticipation; +import com.newsnack.www.newsnackserver.domain.debateparticipation.repository.DebateParticipationJpaRepository; import com.newsnack.www.newsnackserver.domain.member.model.Member; import com.newsnack.www.newsnackserver.domain.member.repository.MemberJpaRepository; import com.newsnack.www.newsnackserver.dto.response.MemberInfoResponse; import com.newsnack.www.newsnackserver.dto.response.MemberLikedArticleResponse; +import com.newsnack.www.newsnackserver.dto.response.MemberParticipatedDebateResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,7 +25,7 @@ public class MemberService { private final MemberJpaRepository memberJpaRepository; private final ArticleHeartJpaRepository articleHeartJpaRepository; - + private final DebateParticipationJpaRepository debateParticipationJpaRepository; public MemberInfoResponse getMemberInfo(Long memberId) { Member member = memberJpaRepository.findById(memberId).orElseThrow(() -> new MemberException(MemberFailureCode.MEMBER_NOT_FOUND)); @@ -32,4 +36,8 @@ public List getLikedArticles(Long memberId) { List
articles = articleHeartJpaRepository.findAllWithArticleByMemberIdJPQL(memberId).stream().map(ArticleHeart::getArticle).toList(); return articles.stream().map(article -> MemberLikedArticleResponse.of(article)).toList(); } + public List getParticipatedDebates(Long memberId) { + List debates = debateParticipationJpaRepository.findAllWithDebateByMemberIdJPQL(memberId).stream().map(DebateParticipation::getDebate).toList(); + return debates.stream().map(debate -> MemberParticipatedDebateResponse.of(debate)).toList(); + } } From 05b497710a8248110fd59206440e216ca902add7 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 20:03:43 +0900 Subject: [PATCH 11/14] [feat] create get my participated debates api --- .../www/newsnackserver/controller/MemberController.java | 5 +++++ .../dto/response/MemberParticipatedDebateResponse.java | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberParticipatedDebateResponse.java diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java index 0658466..620246e 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java @@ -30,4 +30,9 @@ public NewSnackResponse> getLikedArticles(@Memb return NewSnackResponse.success(MemberSuccessCode.GET_LIKED_ARTICLES_SUCCESS, memberService.getLikedArticles(memberId)); } + @GetMapping("/me/participated-debates") + public NewSnackResponse> getParticipatedDebates(@MemberId Long memberId){ + return NewSnackResponse.success(MemberSuccessCode.GET_PARTICIPATED_DEBATES_SUCCESS, memberService.getParticipatedDebates(memberId)); + } + } diff --git a/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberParticipatedDebateResponse.java b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberParticipatedDebateResponse.java new file mode 100644 index 0000000..ab6c70d --- /dev/null +++ b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MemberParticipatedDebateResponse.java @@ -0,0 +1,9 @@ +package com.newsnack.www.newsnackserver.dto.response; + +import com.newsnack.www.newsnackserver.domain.debate.model.Debate; + +public record MemberParticipatedDebateResponse(Long id, String title) { + public static MemberParticipatedDebateResponse of(Debate debate) { + return new MemberParticipatedDebateResponse(debate.getId(), debate.getTitle()); + } +} From 8413cb2b04bc8b86fc42f27d6af4b1ddc6cf3eea Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 20:04:33 +0900 Subject: [PATCH 12/14] [feat] create logic for get my comments --- .../comment/repository/CommentJpaRepository.java | 10 ++++++++++ .../www/newsnackserver/service/MemberService.java | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/com/newsnack/www/newsnackserver/domain/comment/repository/CommentJpaRepository.java b/src/main/java/com/newsnack/www/newsnackserver/domain/comment/repository/CommentJpaRepository.java index 6497829..f8fb631 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/domain/comment/repository/CommentJpaRepository.java +++ b/src/main/java/com/newsnack/www/newsnackserver/domain/comment/repository/CommentJpaRepository.java @@ -1,18 +1,28 @@ package com.newsnack.www.newsnackserver.domain.comment.repository; import com.newsnack.www.newsnackserver.domain.comment.model.Comment; +import com.newsnack.www.newsnackserver.dto.response.MyPageCommentResponse; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import java.util.List; public interface CommentJpaRepository extends JpaRepository { + @Query("select c from Comment c join fetch c.member where c.article.id = :articleId order by c.id desc") List findAllWithMemberByArticleIdOrderByIdDesc(Long articleId); + @Query("select c from Comment c join fetch c.member where c.article.id = :articleId order by c.heartCount desc, c.id desc") List findAllWithMemberByArticleIdOrderByHeartCountDesc(Long articleId); + @Query("select distinct c from Comment c left join fetch c.commentHearts join fetch c.member where c.article.id = :articleId order by c.id desc") List findAllWithMemberAndCommentHeartByArticleIdOrderByIdDesc(Long articleId); + @Query("select distinct c from Comment c left join fetch c.commentHearts join fetch c.member where c.article.id = :articleId order by c.heartCount desc, c.id desc") List findAllWithMemberAndCommentHeartByArticleIdOrderByHeartCountDesc(Long articleId); + + @Query("select new com.newsnack.www.newsnackserver.dto.response.MyPageCommentResponse(a.id, c.content, a.title) " + + "from Comment c join c.article a " + + "where c.member.id = :memberId order by c.id desc") + List findAllByMemberIdJPQL(Long memberId); } diff --git a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java index 4c0285a..e6a363c 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java +++ b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java @@ -5,6 +5,7 @@ import com.newsnack.www.newsnackserver.domain.article.model.Article; import com.newsnack.www.newsnackserver.domain.articleheart.model.ArticleHeart; import com.newsnack.www.newsnackserver.domain.articleheart.repository.ArticleHeartJpaRepository; +import com.newsnack.www.newsnackserver.domain.comment.repository.CommentJpaRepository; import com.newsnack.www.newsnackserver.domain.debate.model.Debate; import com.newsnack.www.newsnackserver.domain.debateparticipation.model.DebateParticipation; import com.newsnack.www.newsnackserver.domain.debateparticipation.repository.DebateParticipationJpaRepository; @@ -13,6 +14,7 @@ import com.newsnack.www.newsnackserver.dto.response.MemberInfoResponse; import com.newsnack.www.newsnackserver.dto.response.MemberLikedArticleResponse; import com.newsnack.www.newsnackserver.dto.response.MemberParticipatedDebateResponse; +import com.newsnack.www.newsnackserver.dto.response.MyPageCommentResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,6 +28,8 @@ public class MemberService { private final MemberJpaRepository memberJpaRepository; private final ArticleHeartJpaRepository articleHeartJpaRepository; private final DebateParticipationJpaRepository debateParticipationJpaRepository; + private final CommentJpaRepository commentJpaRepository; + public MemberInfoResponse getMemberInfo(Long memberId) { Member member = memberJpaRepository.findById(memberId).orElseThrow(() -> new MemberException(MemberFailureCode.MEMBER_NOT_FOUND)); @@ -40,4 +44,8 @@ public List getParticipatedDebates(Long member List debates = debateParticipationJpaRepository.findAllWithDebateByMemberIdJPQL(memberId).stream().map(DebateParticipation::getDebate).toList(); return debates.stream().map(debate -> MemberParticipatedDebateResponse.of(debate)).toList(); } + + public List getMyComments(Long memberId) { + return commentJpaRepository.findAllByMemberIdJPQL(memberId); + } } From 508de6e0c0e27539b7fb72fbb26e4273f61c40b2 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 20:05:23 +0900 Subject: [PATCH 13/14] [feat] create get my comments api --- .../www/newsnackserver/controller/MemberController.java | 7 +++++++ .../newsnackserver/dto/response/MyPageCommentResponse.java | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 src/main/java/com/newsnack/www/newsnackserver/dto/response/MyPageCommentResponse.java diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java index 620246e..529c47c 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/MemberController.java @@ -5,6 +5,8 @@ import com.newsnack.www.newsnackserver.common.response.NewSnackResponse; import com.newsnack.www.newsnackserver.dto.response.MemberInfoResponse; import com.newsnack.www.newsnackserver.dto.response.MemberLikedArticleResponse; +import com.newsnack.www.newsnackserver.dto.response.MemberParticipatedDebateResponse; +import com.newsnack.www.newsnackserver.dto.response.MyPageCommentResponse; import com.newsnack.www.newsnackserver.service.MemberService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -35,4 +37,9 @@ public NewSnackResponse> getParticipatedD return NewSnackResponse.success(MemberSuccessCode.GET_PARTICIPATED_DEBATES_SUCCESS, memberService.getParticipatedDebates(memberId)); } + @GetMapping("/me/comments") + public NewSnackResponse> getMyComments(@MemberId Long memberId) { + return NewSnackResponse.success(MemberSuccessCode.GET_MY_COMMENTS_SUCCESS, memberService.getMyComments(memberId)); + } + } diff --git a/src/main/java/com/newsnack/www/newsnackserver/dto/response/MyPageCommentResponse.java b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MyPageCommentResponse.java new file mode 100644 index 0000000..6793ee9 --- /dev/null +++ b/src/main/java/com/newsnack/www/newsnackserver/dto/response/MyPageCommentResponse.java @@ -0,0 +1,4 @@ +package com.newsnack.www.newsnackserver.dto.response; + +public record MyPageCommentResponse(Long articleId, String content, String articleTitle) { +} From 49b0595e3c4524b1a523c88d4f033ac54e7119f4 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Thu, 4 Apr 2024 20:06:10 +0900 Subject: [PATCH 14/14] [chore] add todo in memberService --- .../com/newsnack/www/newsnackserver/service/MemberService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java index e6a363c..6094013 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java +++ b/src/main/java/com/newsnack/www/newsnackserver/service/MemberService.java @@ -35,11 +35,12 @@ public MemberInfoResponse getMemberInfo(Long memberId) { Member member = memberJpaRepository.findById(memberId).orElseThrow(() -> new MemberException(MemberFailureCode.MEMBER_NOT_FOUND)); return MemberInfoResponse.of(member); } -//todo: paging추가 +//todo: paging추가, dto로 받기 public List getLikedArticles(Long memberId) { List
articles = articleHeartJpaRepository.findAllWithArticleByMemberIdJPQL(memberId).stream().map(ArticleHeart::getArticle).toList(); return articles.stream().map(article -> MemberLikedArticleResponse.of(article)).toList(); } +//todo: paging추가, dto로 받기 public List getParticipatedDebates(Long memberId) { List debates = debateParticipationJpaRepository.findAllWithDebateByMemberIdJPQL(memberId).stream().map(DebateParticipation::getDebate).toList(); return debates.stream().map(debate -> MemberParticipatedDebateResponse.of(debate)).toList();