Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE/151] Mypage - target 유저 profile 조회 기능 구현 #154

Merged
merged 1 commit into from
Jan 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,9 @@
import lombok.extern.slf4j.Slf4j;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Slice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
Expand Down Expand Up @@ -106,16 +104,33 @@ public ResponseDto<MypageResponse.FollowerListDto> getFollowee(
}

/**
* user profile 조회
* my user profile 조회
*
* @return MypageResponse.UserProfileDto
*/
@GetMapping("/profile")
public ResponseDto<MypageResponse.UserProfileDto> getUserProfile() {
MypageResponse.UserProfileDto result = mypageService.getUserProfile();
@GetMapping("/profile/mine")
public ResponseDto<MypageResponse.MyProfileDto> getUserProfile() {
MypageResponse.MyProfileDto result = mypageService.getMyProfile();
return ResponseDto.onSuccess(result);
}

/**
* user page 조회
*
* @param userId 조회할 user id
* @return MypageResponse.UserProfileDto
*/
@GetMapping("/profile/{userId}/{page}")
public ResponseDto<MypageResponse.UserPageDto> getUserProfile(
@PathVariable Long userId,
@PathVariable int page
) {
Users user = mypageService.getCurrentUser();
MypageResponse.UserProfileDto profile = mypageService.getUserProfile(userId);
Page<Review> reviewPage = mypageService.getUserReviewList(userId, page);
return ResponseDto.onSuccess(mypageResponseConverter.toUserPageDto(user, profile, reviewPage));
}

/**
* user point detail 조회
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.example.betteriter.fo_domain.review.dto.ReviewResponse;
import com.example.betteriter.fo_domain.review.service.ReviewConnector;
import com.example.betteriter.fo_domain.user.domain.Users;
import com.example.betteriter.global.constant.RoleType;

import lombok.RequiredArgsConstructor;

import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -41,10 +43,10 @@ public static MypageResponse.FollowerListDto toFollowerListDto(List<Users> follo
.build();
}

public static MypageResponse.UserProfileDto toUserProfileDto(
public static MypageResponse.MyProfileDto toMyProfileDto(
Users user, Integer followerCount, Integer followingCount
) {
return MypageResponse.UserProfileDto.builder()
return MypageResponse.MyProfileDto.builder()
.profileImage(user.getUsersDetail().getProfileImage())
.nickname(user.getUsersDetail().getNickName())
.job(user.getUsersDetail().getJob())
Expand All @@ -53,6 +55,20 @@ public static MypageResponse.UserProfileDto toUserProfileDto(
.build();
}

public static MypageResponse.UserProfileDto toUserProfileDto(
Users targetUser, Integer followerCount, Integer followeeCount, boolean isFollow
) {
return MypageResponse.UserProfileDto.builder()
.profileImage(targetUser.getUsersDetail().getProfileImage())
.nickname(targetUser.getUsersDetail().getNickName())
.job(targetUser.getUsersDetail().getJob())
.isExpertise(targetUser.getRoleType().equals(RoleType.ROLE_EXPERTISE))
.followerCount(followerCount)
.followingCount(followeeCount)
.isFollow(isFollow)
.build();
}

public static MypageResponse.PointDetailDto toPointDetailDto(
Users user, Integer totalLikeCount, Integer totalScrapCount
) {
Expand Down Expand Up @@ -116,9 +132,9 @@ private static MypageResponse.ReviewDto getReviewDto(Review r) {
.profileImage(r.getWriter().getUsersDetail().getProfileImage())
.likeCount((long)r.getReviewLiked().size())
.scrapCount((long)r.getReviewScraped().size())
.isLike(r.getReviewLiked().stream().anyMatch(rl -> rl.getUsers().getId().equals(r.getWriter().getId())))
.isScrap(r.getReviewScraped()
.stream()
.isLike(r.getReviewLiked().stream()
.anyMatch(rl -> rl.getUsers().getId().equals(r.getWriter().getId())))
.isScrap(r.getReviewScraped().stream()
.anyMatch(rs -> rs.getUsers().getId().equals(r.getWriter().getId())))
.build();
}
Expand All @@ -130,4 +146,45 @@ private boolean checkCurrentUserIsScrapReview(Review review) {
private boolean checkCurrentUserIsLikeReview(Review review) {
return this.reviewConnector.existsReviewLikeByReviewAndUsers(review);
}

public MypageResponse.UserPageDto toUserPageDto(Users user, MypageResponse.UserProfileDto dto, Page<Review> reviewPage) {
MypageResponse.ReviewListDto reviewList = toUserReviewListDto(reviewPage, user);

return MypageResponse.UserPageDto.builder()
.userProfile(dto)
.reviewList(reviewList)
.build();
}

private MypageResponse.ReviewListDto toUserReviewListDto(Page<Review> reviewPage, Users user) {
List<MypageResponse.ReviewDto> reviewList = reviewPage.stream()
.map(r -> getUserReviewDto(r, user))
.collect(Collectors.toList());

MypageResponse.PageDto pageInfo = getReviewPageInfo(reviewPage);

return MypageResponse.ReviewListDto.builder()
.reviewList(reviewList)
.pageInfo(pageInfo)
.build();
}

private static MypageResponse.ReviewDto getUserReviewDto(Review review, Users user) {
return MypageResponse.ReviewDto.builder()
.reviewId(review.getId())
.title(review.getProductName())
.thumbnailImage((!review.getReviewImages().isEmpty()) ?
review.getReviewImages().get(0).getImgUrl() : null)
.writerId(review.getWriter().getId())
.writerJob(review.getWriter().getUsersDetail().getJob())
.writerNickname(review.getWriter().getUsersDetail().getNickName())
.profileImage(review.getWriter().getUsersDetail().getProfileImage())
.likeCount((long)review.getReviewLiked().size())
.scrapCount((long)review.getReviewScraped().size())
.isLike(review.getReviewLiked().stream()
.anyMatch(rl -> rl.getUsers().getId().equals(user.getId())))
.isScrap(review.getReviewScraped().stream()
.anyMatch(rs -> rs.getUsers().getId().equals(user.getId())))
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,34 @@ public static class FollowerListDto {
private List<FollowerDto> followerList;
}

@Getter
@Builder
public static class MyProfileDto {
private String profileImage;
private String nickname;
private Job job;
private Integer followerCount;
private Integer followingCount;
}

@Getter
@Builder
public static class UserProfileDto {
private String profileImage;
private String nickname;
private Job job;
private Boolean isExpertise;

private Integer followerCount;
private Integer followingCount;
private Boolean isFollow;
}

@Getter
@Builder
public static class UserPageDto {
private UserProfileDto userProfile;
private ReviewListDto reviewList;
}

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import lombok.extern.slf4j.Slf4j;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -58,17 +57,29 @@ public List<Users> getFollowingList(int page) {
return followService.getFollowingList(user, page, SIZE);
}

@Transactional(readOnly = true)
public MypageResponse.UserProfileDto getUserProfile() {
public MypageResponse.MyProfileDto getMyProfile() {
Users user = userService.getCurrentUser();
Integer followerCount = followService.getFollowerCount(user);
Integer followeeCount = followService.getFolloweeCount(user);

return MypageResponseConverter.toUserProfileDto(
return MypageResponseConverter.toMyProfileDto(
user, followerCount, followeeCount
);
}

public MypageResponse.UserProfileDto getUserProfile(Long userId) {
Users user = userService.getCurrentUser();
Users targetUser = userService.getUserById(userId);
Integer followerCount = followService.getFollowerCount(user);
Integer followeeCount = followService.getFolloweeCount(user);

boolean isFollow = followService.isFollow(user, targetUser);

return MypageResponseConverter.toUserProfileDto(
targetUser, followerCount, followeeCount, isFollow
);
}

public Integer getFollowerCount() {
Users user = userService.getCurrentUser();
return followService.getFollowerCount(user);
Expand All @@ -90,4 +101,9 @@ public Integer getTotalLikeCount(Users user) {
public Integer getTotalScrapCount(Users user) {
return reviewService.getTotalScrapCount(user);
}

public Page<Review> getUserReviewList(Long userId, int page) {
Users targetUser = userService.getUserById(userId);
return reviewService.getReviewList(targetUser, page, SIZE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.NumberPath;
import com.querydsl.jpa.impl.JPAQueryFactory;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.SliceImpl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
@RequiredArgsConstructor
public enum RoleType {
ROLE_USER("일반 유저"), // 일반 유저
// ROLE_EXPERTISE("전문가 유저"), // 전문가 유저
ROLE_EXPERTISE("전문가 유저"), // 전문가 유저
ROLE_ADMIN("관리자 유저"); // 관리자 유저
private final String roleName;
}
Loading