diff --git a/src/main/java/co/kr/jurumarble/config/WebConfig.java b/src/main/java/co/kr/jurumarble/config/WebConfig.java index c9cecbfb..144454c5 100644 --- a/src/main/java/co/kr/jurumarble/config/WebConfig.java +++ b/src/main/java/co/kr/jurumarble/config/WebConfig.java @@ -22,6 +22,9 @@ public void addInterceptors(InterceptorRegistry registry) { .addPathPatterns("/api/users") .addPathPatterns("/api/votes/normal") .addPathPatterns("/api/votes/drink") + .addPathPatterns("/api/votes/participated") + .addPathPatterns("/api/votes/my-vote") + .addPathPatterns("/api/votes/bookmarked") .addPathPatterns("/api/votes/{voteId}/") .addPathPatterns("/api/votes/{voteId}/normal") .addPathPatterns("/api/votes/{voteId}/drink") diff --git a/src/main/java/co/kr/jurumarble/vote/controller/VoteController.java b/src/main/java/co/kr/jurumarble/vote/controller/VoteController.java index af703896..45e138d5 100644 --- a/src/main/java/co/kr/jurumarble/vote/controller/VoteController.java +++ b/src/main/java/co/kr/jurumarble/vote/controller/VoteController.java @@ -46,9 +46,30 @@ public ResponseEntity createDrinkVote(@Valid @RequestBody CreateDrinkVoteRequest @Operation(summary = "일반/전통주 투표 리스트 검색, 조회", description = "파라미터에 keyeword, sortBy, page, size, category 보내주시면 됩니다. 검색이 아니면 keyword = 에 값 없이 ") @GetMapping("") - public ResponseEntity getVotes(@RequestParam(required = false) String keyword, @RequestParam SortByType sortBy, @RequestParam int page, @RequestParam int size) { - Slice voteListData = voteService.sortFindVotes(keyword, sortBy, page, size); - return new ResponseEntity(new GetVoteListResponse(voteListData), HttpStatus.OK); + public ResponseEntity> getVotes(@RequestParam(required = false) String keyword, @RequestParam SortByType sortBy, @RequestParam int page, @RequestParam int size) { + return ResponseEntity.status(HttpStatus.OK) + .body(voteService.sortFindVotes(keyword, sortBy, page, size)); + } + + @Operation(summary = "마이페이지- 내가 참여한 투표 리스트 조회", description = "파라미터에 keyeword, sortBy, page, size, category 보내주시면 됩니다. 검색이 아니면 keyword = 에 값 없이 ") + @GetMapping("/participated") + public ResponseEntity> getParticipatedVotes(@RequestAttribute Long userId,@RequestParam int page, @RequestParam int size) { + return ResponseEntity.status(HttpStatus.OK) + .body(voteService.getParticipatedVotes(userId, page, size)); + } + + @Operation(summary = "마이페이지- 내가 작성한 투표 리스트 조회", description = "파라미터에 keyeword, sortBy, page, size, category 보내주시면 됩니다. 검색이 아니면 keyword = 에 값 없이 ") + @GetMapping("/my-vote") + public ResponseEntity> getMyVotes(@RequestAttribute Long userId,@RequestParam int page, @RequestParam int size) { + return ResponseEntity.status(HttpStatus.OK) + .body(voteService.getMyVote(userId, page, size)); + } + + @Operation(summary = "마이페이지- 내가 북마크한 투표 리스트 조회", description = "파라미터에 keyeword, sortBy, page, size, category 보내주시면 됩니다. 검색이 아니면 keyword = 에 값 없이 ") + @GetMapping("/bookmarked") + public ResponseEntity> getBookmarkedVotes(@RequestAttribute Long userId,@RequestParam int page, @RequestParam int size) { + return ResponseEntity.status(HttpStatus.OK) + .body(voteService.getBookmarkedVotes(userId, page, size)); } @Operation(summary = "전통주 투표 리스트 검색, 조회", description = "파라미터에 keyeword, sortBy, page, size, category 보내주시면 됩니다. 검색이 아니면 keyword = 에 값 없이 ") @@ -114,5 +135,4 @@ public ResponseEntity getHotDrinkVote() { HotDrinkVoteData hotDrinkVote = voteService.getHotDrinkVote(); return ResponseEntity.ok().body(hotDrinkVote); } - } \ No newline at end of file diff --git a/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepository.java b/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepository.java index 5fce7cfd..303ed9a5 100644 --- a/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepository.java +++ b/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepository.java @@ -40,4 +40,10 @@ public interface VoteEntityRepository { Optional getHotDrinkVote(LocalDateTime nowTime); HotDrinkVoteData findOneDrinkVoteByPopular(); + + List findVoteCommonDataByParticipate(Long userId, int pageNum, int pageSize); + + List findVoteCommonDataByPostedUserId(Long userId, int pageNum, int pageSize); + + List findCommonVoteDataBybookmark(Long userId, int pageNum, int pageSize); } diff --git a/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepositoryImpl.java b/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepositoryImpl.java index a3148398..8c654dd7 100644 --- a/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepositoryImpl.java +++ b/src/main/java/co/kr/jurumarble/vote/repository/VoteEntityRepositoryImpl.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Optional; +import static co.kr.jurumarble.bookmark.domain.QBookmark.bookmark; import static co.kr.jurumarble.user.domain.QUser.user; import static co.kr.jurumarble.vote.domain.QVote.vote; import static co.kr.jurumarble.vote.domain.QVoteContent.voteContent; @@ -297,6 +298,73 @@ public HotDrinkVoteData findOneDrinkVoteByPopular() { .fetchOne(); } + @Override + public List findVoteCommonDataByParticipate(Long userId, int pageNum, int pageSize) { + return jpaQueryFactory.select( + Projections.bean(VoteCommonData.class, + vote.id.as("voteId"), + vote.postedUserId, + vote.title, + vote.detail, + vote.filteredGender, + vote.filteredAge, + vote.filteredMbti, + vote.voteType + )) + .from(vote) + .innerJoin(voteResult) + .on(voteResult.voteId.eq(vote.id)) + .where(voteResult.votedUserId.eq(userId)) + .orderBy(vote.createdDate.desc()) + .offset(pageNum * pageSize) + .limit(pageSize) + .fetch(); + } + + @Override + public List findVoteCommonDataByPostedUserId(Long userId, int pageNum, int pageSize) { + return jpaQueryFactory.select( + Projections.bean(VoteCommonData.class, + vote.id.as("voteId"), + vote.postedUserId, + vote.title, + vote.detail, + vote.filteredGender, + vote.filteredAge, + vote.filteredMbti, + vote.voteType + )) + .from(vote) + .where(vote.postedUserId.eq(userId)) + .orderBy(vote.createdDate.desc()) + .offset(pageNum * pageSize) + .limit(pageSize) + .fetch(); + } + + @Override + public List findCommonVoteDataBybookmark(Long userId, int pageNum, int pageSize) { + return jpaQueryFactory.select( + Projections.bean(VoteCommonData.class, + vote.id.as("voteId"), + vote.postedUserId, + vote.title, + vote.detail, + vote.filteredGender, + vote.filteredAge, + vote.filteredMbti, + vote.voteType + )) + .from(vote) + .innerJoin(bookmark) + .on(bookmark.voteId.eq(vote.id)) + .where(bookmark.userId.eq(userId)) + .orderBy(vote.createdDate.desc()) + .offset(pageNum * pageSize) + .limit(pageSize) + .fetch(); + } + @Override public Optional findVoteCommonDataByVoteId(Long voteId) { VoteCommonData voteCommonData = jpaQueryFactory diff --git a/src/main/java/co/kr/jurumarble/vote/service/VoteService.java b/src/main/java/co/kr/jurumarble/vote/service/VoteService.java index ebc6ec5b..dd4325d5 100644 --- a/src/main/java/co/kr/jurumarble/vote/service/VoteService.java +++ b/src/main/java/co/kr/jurumarble/vote/service/VoteService.java @@ -24,6 +24,7 @@ import co.kr.jurumarble.vote.service.request.CreateNormalVoteServiceRequest; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; @@ -194,4 +195,22 @@ public Slice findDrinkVotes(String keyword, String region, SortByType throw new VoteSortByNotFountException(); } + + public Slice getParticipatedVotes(Long userId, int page, int size) { + List voteCommonDataByParticipate = voteRepository.findVoteCommonDataByParticipate(userId, page, size); + PageRequest pageRequest = PageRequest.of(page, size); + return voteFinder.getVoteData(pageRequest, voteCommonDataByParticipate); + } + + public Slice getMyVote(Long userId, int page, int size) { + List voteCommonDataByParticipate = voteRepository.findVoteCommonDataByPostedUserId(userId, page, size); + PageRequest pageRequest = PageRequest.of(page, size); + return voteFinder.getVoteData(pageRequest, voteCommonDataByParticipate); + } + + public Slice getBookmarkedVotes(Long userId, int page, int size) { + List commonVoteDataBybookmark = voteRepository.findCommonVoteDataBybookmark(userId, page, size); + PageRequest pageRequest = PageRequest.of(page, size); + return voteFinder.getVoteData(pageRequest, commonVoteDataBybookmark); + } } \ No newline at end of file