Skip to content

Commit

Permalink
feat: 마이페이지 api 마무리 (#18)
Browse files Browse the repository at this point in the history
feat: 마이페이지 api 마무리
  • Loading branch information
daeunkwak authored Aug 10, 2023
2 parents c7d1df4 + 701bbea commit ce76700
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,17 @@ private List<ChallengeResponseDto> makeChallengeResponseDto(String tokenString,
return challengeResponseDtos;
}

private List<ChallengeResponseDto> makeChallengeResponseDtoV2(Long memberId, List<ChallengeResponseVo> challengeVos){

List<ChallengeResponseDto> 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()){
Expand Down Expand Up @@ -415,6 +426,20 @@ public ResponseEntity<MyChallengeResponseDto> getMyChallenge(@Parameter(hidden =
PassedChallengeListResponseDto.from(passedChallengeResponseDtos), JudgingChallengeListResponseDto.from(judgingChallengeResponseDtos)));
}

@Tag(name = "myPage", description = "마이페이지 API")
@Operation(summary = "관심 챌린지 리스트 조회 api")
@GetMapping("/like")
public ResponseEntity<List<ChallengeResponseDto>> getMyChallengeLike(@Parameter(hidden = true) @RequestMemberId Long memberId) {

List<Challenge> challenges = challengeService.getMyChallengeLike(memberId);
List<ChallengeResponseVo>challengeVos = challenges.stream().map(challenge -> {
return new ChallengeResponseVo(challenge, challenge.getParticipates().size());
}).collect(Collectors.toList());

List<ChallengeResponseDto> challengeResponseDtos = makeChallengeResponseDtoV2(memberId, challengeVos);
return ResponseEntity.ok(challengeResponseDtos);
}

private Integer getSuccessNum(Challenge challenge){

int cnt = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,31 @@
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;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Service
@Transactional
@RequiredArgsConstructor
public class ChallengeService {

private final ChallengeRepository challengeRepository;
private final MemberRepository memberRepository;

// 챌린지 생성
public Challenge create(ChallengeCreateRequestDto req, Long memberId) {
Expand Down Expand Up @@ -179,4 +185,20 @@ public Challenge getChallenge(Long challengeId) {
}
return challenge;
}

// 마이페이지 - 관심 챌린지 조회
public List<Challenge> 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("요청한 멤버는 존재하지 않습니다.");
});

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public ResponseEntity<MyPageResponseDto> getMyPage(@Parameter(hidden = true) @Re
MyActivityInfoResponseDto myActivityInfo = MyActivityInfoResponseDto.from(member);

// TODO : 레벨, 경험치 정보 - 로직 구체화
LevelInfoResponseDto nextLevel = memberService.getLevel(member.getMemberLevel());
LevelInfoResponseDto nextLevel = memberService.getNextLevel(member.getMemberLevel());
MyLevelInfoResponseDto myLevelInfo = MyLevelInfoResponseDto.from(member, LevelInfoResponseDto.from(member.getMemberLevel()), nextLevel);

return ResponseEntity.ok(MyPageResponseDto.from(simpleMember, myActivityInfo, myLevelInfo));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ public class SimpleMemberResponseDto {
private String memberLevelName;

@Schema(description = "n번째 챌린지", example = "3")
private Integer participateNum;
private Integer participateChallengeNum;

public static SimpleMemberResponseDto from(Member member) {

return SimpleMemberResponseDto.builder()
.memberName(member.getMemberName())
.profilePath(member.getProfilePath())
.memberLevelName("LV " + member.getMemberLevel().getMemberLevelId() + " " + member.getMemberLevel().getLevelName())
.participateNum(member.getParticipates().size()) // TODO: 반려된 챌린지 예외처리
.participateChallengeNum(member.getParticipates().size()) // TODO: 반려된 챌린지 예외처리
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public static MyLevelInfoResponseDto from(Member member, LevelInfoResponseDto cu

return new MyLevelInfoResponseDtoBuilder()
.myLevel(member.getMemberLevel().getMemberLevelId())
.levelPercent((int) ((member.getMemberExperience() / (nextLevel.getRequiredExperience() - currentLevel.getRequiredExperience())) * 0.01))
.percentComment(MemberLevel.getPercentComment((int) ((member.getMemberExperience() / (nextLevel.getRequiredExperience() - currentLevel.getRequiredExperience())) * 0.01)))
.levelPercent((int)((double) member.getMemberExperience() / (nextLevel.getRequiredExperience() - currentLevel.getRequiredExperience()) * 100))
.percentComment(MemberLevel.getPercentComment((((int)((double) member.getMemberExperience() / (nextLevel.getRequiredExperience() - currentLevel.getRequiredExperience())) * 100))))
.experienceLeft(nextLevel.getRequiredExperience() - member.getMemberExperience())
.myLevelName(member.getMemberLevel().getLevelName())
.currentLevel(currentLevel)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
@Repository
public interface MemberLevelRepository extends JpaRepository<MemberLevel, Integer> {

@Query("select l from MemberLevel l where l.memberLevelId =:i+1")
@Query("select l from MemberLevel l where l.memberLevelId =:i")
LevelInfoResponseDto getNextLevel(int i);
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ private boolean isValidNickName(String nickname) {
return !memberRepository.existsByMemberName(nickname);
}

public LevelInfoResponseDto getLevel(MemberLevel memberLevel) {
public LevelInfoResponseDto getNextLevel(MemberLevel memberLevel) {

// TODO : 만렙 처리
return memberLevelRepository.getNextLevel(memberLevel.getMemberLevelId() + 1);
Expand Down

0 comments on commit ce76700

Please sign in to comment.