From bd30e2e17e03dc5a4db7f14696291a186ee7dbbc Mon Sep 17 00:00:00 2001 From: daeunkwak Date: Thu, 10 Aug 2023 23:56:55 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20-=20=EA=B4=80=EC=8B=AC=20=EC=B1=8C=EB=A6=B0?= =?UTF-8?q?=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ChallengeController.java | 25 +++++++++++++++++++ .../challenge/service/ChallengeService.java | 22 ++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/cider-api/src/main/java/com/cmc/domains/challenge/controller/ChallengeController.java b/cider-api/src/main/java/com/cmc/domains/challenge/controller/ChallengeController.java index 0d517a0..52ae8ca 100644 --- a/cider-api/src/main/java/com/cmc/domains/challenge/controller/ChallengeController.java +++ b/cider-api/src/main/java/com/cmc/domains/challenge/controller/ChallengeController.java @@ -361,6 +361,17 @@ private List makeChallengeResponseDto(String tokenString, return challengeResponseDtos; } + private List makeChallengeResponseDtoV2(Long memberId, List challengeVos){ + + List challengeResponseDtos = new ArrayList<>(); + challengeResponseDtos = challengeVos.stream().map(vo -> { + return ChallengeResponseDto.from(vo.getChallenge(), vo.getParticipateNum(), + findIsLike(vo.getChallenge(), memberId), ChronoUnit.DAYS.between(LocalDate.now(), vo.getChallenge().getChallengeStartDate())); + }).toList(); + + return challengeResponseDtos; + } + private Boolean findIsLike(Challenge challenge, Long memberId){ for(ChallengeLike challengeLike : challenge.getChallengeLikes()){ @@ -415,6 +426,20 @@ public ResponseEntity getMyChallenge(@Parameter(hidden = PassedChallengeListResponseDto.from(passedChallengeResponseDtos), JudgingChallengeListResponseDto.from(judgingChallengeResponseDtos))); } + @Tag(name = "myPage", description = "마이페이지 API") + @Operation(summary = "관심 챌린지 리스트 조회 api") + @GetMapping("/like") + public ResponseEntity> getMyChallengeLike(@Parameter(hidden = true) @RequestMemberId Long memberId) { + + List challenges = challengeService.getMyChallengeLike(memberId); + ListchallengeVos = challenges.stream().map(challenge -> { + return new ChallengeResponseVo(challenge, challenge.getParticipates().size()); + }).collect(Collectors.toList()); + + List challengeResponseDtos = makeChallengeResponseDtoV2(memberId, challengeVos); + return ResponseEntity.ok(challengeResponseDtos); + } + private Integer getSuccessNum(Challenge challenge){ int cnt = 0; diff --git a/cider-api/src/main/java/com/cmc/domains/challenge/service/ChallengeService.java b/cider-api/src/main/java/com/cmc/domains/challenge/service/ChallengeService.java index bb7f6f9..b6294c3 100644 --- a/cider-api/src/main/java/com/cmc/domains/challenge/service/ChallengeService.java +++ b/cider-api/src/main/java/com/cmc/domains/challenge/service/ChallengeService.java @@ -3,11 +3,15 @@ import com.cmc.challenge.Challenge; import com.cmc.challenge.constant.JudgeStatus; import com.cmc.challenge.constant.ChallengeStatus; +import com.cmc.challengeLike.ChallengeLike; +import com.cmc.common.exception.BadRequestException; import com.cmc.common.exception.CiderException; import com.cmc.common.exception.NoSuchIdException; import com.cmc.domains.challenge.dto.request.ChallengeCreateRequestDto; import com.cmc.domains.challenge.repository.ChallengeRepository; import com.cmc.domains.challenge.vo.ChallengeResponseVo; +import com.cmc.domains.member.repository.MemberRepository; +import com.cmc.member.Member; import com.cmc.participate.Participate; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -15,6 +19,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; @Service @Transactional @@ -22,6 +27,7 @@ public class ChallengeService { private final ChallengeRepository challengeRepository; + private final MemberRepository memberRepository; // 챌린지 생성 public Challenge create(ChallengeCreateRequestDto req, Long memberId) { @@ -179,4 +185,20 @@ public Challenge getChallenge(Long challengeId) { } return challenge; } + + // 마이페이지 - 관심 챌린지 조회 + public List getMyChallengeLike(Long memberId) { + + Member member = findMemberOrThrow(memberId); + return member.getChallengeLikes().stream() + .map(ChallengeLike::getChallenge) + .collect(Collectors.toList()); + } + + private Member findMemberOrThrow(Long memberId) { + return memberRepository.findById(memberId).orElseThrow(() -> { + throw new BadRequestException("요청한 멤버는 존재하지 않습니다."); + }); + + } }