diff --git a/application/src/main/java/org/depromeet/spot/application/member/controller/MemberController.java b/application/src/main/java/org/depromeet/spot/application/member/controller/MemberController.java index 4f266b46..f4f06595 100644 --- a/application/src/main/java/org/depromeet/spot/application/member/controller/MemberController.java +++ b/application/src/main/java/org/depromeet/spot/application/member/controller/MemberController.java @@ -101,10 +101,10 @@ public Boolean deleteMember( } @CurrentMember - @GetMapping("/memberInfo") + @GetMapping("/homeFeed") @ResponseStatus(HttpStatus.OK) - @Operation(summary = "로그인 유저 정보 조회 API") - public MyHomeResponse findMemberInfo(@Parameter(hidden = true) Long memberId) { + @Operation(summary = "홈 피드 화면 조회 API") + public MyHomeResponse findMemberHomeFeed(@Parameter(hidden = true) Long memberId) { MemberInfo memberInfo = memberUsecase.findMemberInfo(memberId); return MyHomeResponse.from(memberInfo); diff --git a/application/src/main/java/org/depromeet/spot/application/member/dto/response/MyHomeResponse.java b/application/src/main/java/org/depromeet/spot/application/member/dto/response/MyHomeResponse.java index b8198d0b..9b3767b9 100644 --- a/application/src/main/java/org/depromeet/spot/application/member/dto/response/MyHomeResponse.java +++ b/application/src/main/java/org/depromeet/spot/application/member/dto/response/MyHomeResponse.java @@ -6,21 +6,21 @@ @Builder public record MyHomeResponse( - String profileImageUrl, - String nickname, Integer level, + String teamName, + Long teamId, String levelTitle, - String teamImageUrl, - Long teamId) { + Long reviewCntToLevelUp, + String mascotImageUrl) { public static MyHomeResponse from(MemberInfo memberInfo) { return MyHomeResponse.builder() - .profileImageUrl(memberInfo.getProfileImageUrl()) - .nickname(memberInfo.getNickname()) .level(memberInfo.getLevel()) - .levelTitle(memberInfo.getLevelTitle()) - .teamImageUrl(memberInfo.getTeamImageUrl()) + .teamName(memberInfo.getTeamName()) .teamId(memberInfo.getTeamId()) + .levelTitle(memberInfo.getLevelTitle()) + .reviewCntToLevelUp(memberInfo.getReviewCntToLevelUp()) + .mascotImageUrl(memberInfo.getMascotImageUrl()) .build(); } } diff --git a/domain/src/main/java/org/depromeet/spot/domain/member/Level.java b/domain/src/main/java/org/depromeet/spot/domain/member/Level.java index ed74f1a2..77f87467 100644 --- a/domain/src/main/java/org/depromeet/spot/domain/member/Level.java +++ b/domain/src/main/java/org/depromeet/spot/domain/member/Level.java @@ -38,4 +38,22 @@ public static int calculateLevel(final long reviewCnt) { } return 6; } + + public static long calculateReviewCntToLevelUp(long reviewCnt) { + int nextLevelMinimumReview; + if (reviewCnt == 0) { + nextLevelMinimumReview = 1; + } else if (reviewCnt <= 2) { + nextLevelMinimumReview = 3; + } else if (2 < reviewCnt && reviewCnt <= 4) { + nextLevelMinimumReview = 5; + } else if (4 < reviewCnt && reviewCnt <= 7) { + nextLevelMinimumReview = 8; + } else if (7 < reviewCnt && reviewCnt <= 13) { + nextLevelMinimumReview = 14; + } else if (13 < reviewCnt && reviewCnt <= 20) { + nextLevelMinimumReview = 21; + } else return 0; + return nextLevelMinimumReview - reviewCnt; + } } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/member/MemberUsecase.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/member/MemberUsecase.java index bc851b3b..2807c002 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/member/MemberUsecase.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/member/MemberUsecase.java @@ -31,8 +31,11 @@ class MemberInfo { private final String profileImageUrl; private final int level; private final String levelTitle; + private final String mascotImageUrl; private String teamImageUrl; private final Long teamId; + private final String teamName; + private final Long reviewCntToLevelUp; public static MemberInfo from(Member member) { return MemberInfo.builder() @@ -45,14 +48,18 @@ public static MemberInfo from(Member member) { .build(); } - public static MemberInfo of(Member member, BaseballTeam baseballTeam) { + public static MemberInfo of( + Member member, BaseballTeam baseballTeam, Long reviewCntToLevelUp) { return MemberInfo.builder() .nickname(member.getNickname()) .profileImageUrl(member.getProfileImage()) .level(member.getLevel().getValue()) .levelTitle(member.getLevel().getTitle()) + .mascotImageUrl(member.getLevel().getMascotImageUrl()) .teamImageUrl(baseballTeam.getLogo()) .teamId(baseballTeam.getId()) + .teamName(baseballTeam.getName()) + .reviewCntToLevelUp(reviewCntToLevelUp) .build(); } } diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/review/ReadReviewUsecase.java b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/review/ReadReviewUsecase.java index 9d57c623..61f87455 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/port/in/review/ReadReviewUsecase.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/port/in/review/ReadReviewUsecase.java @@ -29,6 +29,8 @@ MyReviewListResult findMyReviewsByUserId( ReadReviewResult findReviewById(Long reviewId); + long countByIdByMemberId(Long memberId); + @Builder record BlockReviewListResult( LocationInfo location, diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/member/MemberService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/member/MemberService.java index 1438a8c0..44c8baf0 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/service/member/MemberService.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/member/MemberService.java @@ -10,6 +10,7 @@ import org.depromeet.spot.usecase.port.in.member.MemberUsecase; import org.depromeet.spot.usecase.port.in.member.ReadLevelUsecase; import org.depromeet.spot.usecase.port.in.member.ReadMemberUsecase; +import org.depromeet.spot.usecase.port.in.review.ReadReviewUsecase; import org.depromeet.spot.usecase.port.in.team.ReadBaseballTeamUsecase; import org.depromeet.spot.usecase.port.out.member.MemberRepository; import org.depromeet.spot.usecase.port.out.oauth.OauthRepository; @@ -29,6 +30,8 @@ public class MemberService implements MemberUsecase { private final ReadLevelUsecase readLevelUsecase; private final ReadBaseballTeamUsecase readBaseballTeamUsecase; + private final ReadReviewUsecase readReviewUsecase; + @Override public Member create(String accessToken, Member member) { if (memberRepository.existsByNickname(member.getNickname())) { @@ -82,7 +85,11 @@ public MemberInfo findMemberInfo(Long memberId) { return MemberInfo.from(member); } BaseballTeam baseballTeam = readBaseballTeamUsecase.findById(member.getTeamId()); - return MemberInfo.of(member, baseballTeam); + + long reviewCount = readReviewUsecase.countByIdByMemberId(memberId); + long reviewCntToLevelUp = Level.calculateReviewCntToLevelUp(reviewCount); + + return MemberInfo.of(member, baseballTeam, reviewCntToLevelUp); } @Override diff --git a/usecase/src/main/java/org/depromeet/spot/usecase/service/review/ReadReviewService.java b/usecase/src/main/java/org/depromeet/spot/usecase/service/review/ReadReviewService.java index 639cbbe3..169a02d9 100644 --- a/usecase/src/main/java/org/depromeet/spot/usecase/service/review/ReadReviewService.java +++ b/usecase/src/main/java/org/depromeet/spot/usecase/service/review/ReadReviewService.java @@ -128,6 +128,11 @@ public ReadReviewResult findReviewById(Long reviewId) { return ReadReviewResult.builder().review(reviewWithKeywords).build(); } + @Override + public long countByIdByMemberId(Long memberId) { + return reviewRepository.countByIdByMemberId(memberId); + } + @Override public MyRecentReviewResult findLastReviewByMemberId(Long memberId) { Review review = reviewRepository.findLastReviewByMemberId(memberId);