Skip to content

Commit

Permalink
Merge pull request #361 from kkkapuq/main
Browse files Browse the repository at this point in the history
stage merge into main
  • Loading branch information
kkkapuq authored Mar 8, 2024
2 parents 8cf5f4c + 0ad0684 commit 0b04bee
Show file tree
Hide file tree
Showing 33 changed files with 305 additions and 271 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import lombok.extern.slf4j.Slf4j;
import org.orury.common.error.code.PostErrorCode;
import org.orury.common.error.exception.BusinessException;
import org.orury.domain.global.image.ImageReader;
import org.orury.domain.global.image.ImageStore;
import org.orury.domain.post.domain.PostReader;
import org.orury.domain.post.domain.PostStore;
Expand All @@ -24,7 +23,6 @@
public class PostServiceImpl implements PostService {
private final PostReader postReader;
private final PostStore postStore;
private final ImageReader imageReader;
private final ImageStore imageStore;

@Override
Expand All @@ -50,9 +48,7 @@ public void deletePost(PostDto post) {
}

private PostDto postImageConverter(Post post) {
var links = imageReader.getImageLinks(POST, post.getImages());
var profileLink = imageReader.getUserImageLink(post.getUser().getProfileImage());
var isLike = postReader.isPostLiked(post.getUser().getId(), post.getId());
return PostDto.from(post, links, profileLink, isLike);
return PostDto.from(post, isLike);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@
import lombok.extern.slf4j.Slf4j;
import org.orury.common.error.code.UserErrorCode;
import org.orury.common.error.exception.BusinessException;
import org.orury.domain.global.image.ImageReader;
import org.orury.domain.user.domain.UserReader;
import org.orury.domain.user.domain.UserStore;
import org.orury.domain.user.domain.dto.UserDto;
import org.orury.domain.user.domain.dto.UserStatus;
import org.orury.domain.user.domain.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -22,7 +20,6 @@
public class UserServiceImpl implements UserService {
private final UserReader userReader;
private final UserStore userStore;
private final ImageReader imageReader;

/**
* 유저 id로 유저 조회
Expand All @@ -31,7 +28,7 @@ public class UserServiceImpl implements UserService {
public UserDto getUser(Long userId) {
var user = userReader.findUserById(userId)
.orElseThrow(() -> new BusinessException(UserErrorCode.NOT_FOUND));
return transferUserDto(user);
return UserDto.from(user);
}

/**
Expand All @@ -40,7 +37,7 @@ public UserDto getUser(Long userId) {
@Override
public List<UserDto> getUsers() {
return userReader.findAll().stream()
.map(this::transferUserDto)
.map(UserDto::from)
.toList();
}

Expand All @@ -52,12 +49,4 @@ public void banUser(UserDto userDto) {
var user = userDto.toEntity(UserStatus.BAN);
userStore.save(user);
}

/**
* 유저 프로필을 링크로 변환하여 DTO 반환
*/
private UserDto transferUserDto(User user) {
var profile = imageReader.getUserImageLink(user.getProfileImage());
return UserDto.from(user, profile);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.orury.domain.comment.domain.dto.CommentLikeDto;
import org.orury.domain.comment.domain.entity.Comment;
import org.orury.domain.global.constants.NumberConstants;
import org.orury.domain.global.image.ImageReader;
import org.orury.domain.post.domain.dto.PostDto;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
Expand All @@ -25,7 +24,6 @@
public class CommentServiceImpl implements CommentService {
private final CommentReader commentReader;
private final CommentStore commentStore;
private final ImageReader imageReader;

@Override
@Transactional
Expand Down Expand Up @@ -115,11 +113,6 @@ private void validateParentComment(Long parentCommentId) {
}

private List<CommentDto> convertCommentsToCommentDtos(List<Comment> comments) {
return comments.stream()
.map(comment -> {
var commentUserImage = imageReader.getUserImageLink(comment.getUser().getProfileImage());
return CommentDto.from(comment, commentUserImage);
})
.toList();
return comments.stream().map(CommentDto::from).toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.orury.common.error.code.GymErrorCode;
import org.orury.common.error.exception.BusinessException;
import org.orury.common.util.BusinessHoursConverter;
import org.orury.domain.global.image.ImageReader;
import org.orury.domain.gym.domain.GymReader;
import org.orury.domain.gym.domain.GymStore;
import org.orury.domain.gym.domain.dto.GymDto;
Expand All @@ -21,23 +20,19 @@
import java.util.Comparator;
import java.util.List;

import static org.orury.common.util.S3Folder.GYM;

@Slf4j
@RequiredArgsConstructor
@Service
public class GymServiceImpl implements GymService {
private final GymReader gymReader;
private final GymStore gymStore;
private final ImageReader imageReader;

@Override
@Transactional(readOnly = true)
public GymDto getGymDtoById(Long id) {
Gym gym = gymReader.findGymById(id)
.orElseThrow(() -> new BusinessException(GymErrorCode.NOT_FOUND));
var urls = imageReader.getImageLinks(GYM, gym.getImages());
return GymDto.from(gym, urls);
return GymDto.from(gym);
}

@Override
Expand Down Expand Up @@ -94,7 +89,7 @@ public boolean checkDoingBusiness(GymDto gymDto) {

private List<GymDto> sortGymsByDistanceAsc(List<Gym> gyms, float latitude, float longitude) {
return gyms.stream()
.map(it -> GymDto.from(it, imageReader.getImageLinks(GYM, it.getImages())))
.map(GymDto::from)
.sorted(Comparator.comparingDouble(
o -> getDistance(latitude, longitude, o.latitude(), o.longitude())
))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@
import lombok.extern.slf4j.Slf4j;
import org.orury.common.error.code.PostErrorCode;
import org.orury.common.error.exception.BusinessException;
import org.orury.common.util.ImageUtil;
import org.orury.domain.global.constants.NumberConstants;
import org.orury.domain.global.image.ImageReader;
import org.orury.domain.global.image.ImageStore;
import org.orury.domain.post.domain.PostReader;
import org.orury.domain.post.domain.PostStore;
Expand All @@ -31,30 +29,29 @@
public class PostServiceImpl implements PostService {
private final PostReader postReader;
private final PostStore postStore;
private final ImageReader imageReader;
private final ImageStore imageStore;

@Override
@Transactional(readOnly = true)
public List<PostDto> getPostDtosByCategory(int category, Long cursor, Pageable pageable) {
return postReader.findByCategoryOrderByIdDesc(category, cursor, pageable).stream()
.map(this::postImageConverter)
.map(this::postDtoConverter)
.toList();
}

@Override
@Transactional(readOnly = true)
public List<PostDto> getPostDtosBySearchWord(String searchWord, Long cursor, Pageable pageable) {
return postReader.findByTitleContainingOrContentContainingOrderByIdDesc(searchWord, cursor, pageable).stream()
.map(this::postImageConverter)
.map(this::postDtoConverter)
.toList();
}

@Override
@Transactional(readOnly = true)
public List<PostDto> getPostDtosByUserId(Long userId, Long cursor, Pageable pageable) {
return postReader.findByUserIdOrderByIdDesc(userId, cursor, pageable).stream()
.map(this::postImageConverter)
.map(this::postDtoConverter)
.toList();
}

Expand All @@ -65,15 +62,15 @@ public Page<PostDto> getHotPostDtos(Pageable pageable) {
NumberConstants.HOT_POSTS_BOUNDARY,
LocalDateTime.now().minusMonths(1L),
pageable
).map(this::postImageConverter);
).map(this::postDtoConverter);
}

@Override
@Transactional(readOnly = true)
public PostDto getPostDtoById(Long id) {
var post = postReader.findById(id)
.orElseThrow(() -> new BusinessException(PostErrorCode.NOT_FOUND));
return postImageConverter(post);
return postDtoConverter(post);
}

@Override
Expand All @@ -84,24 +81,19 @@ public PostDto getPostDtoById(Long userId, Long postId) {
var postUser = post.getUser().getId();
if (!postUser.equals(userId))
throw new BusinessException(PostErrorCode.FORBIDDEN);
return postImageConverter(post);
return postDtoConverter(post);
}

@Override
public void createPost(PostDto postDto, List<MultipartFile> files) {
// id == null -> 생성, id != null -> 수정
if (postDto.id() != null) {
var oldImages = postDto.images();
if (!ImageUtil.imagesValidation(oldImages)) imageStore.delete(POST, oldImages);
}
var newImages = imageStore.upload(POST, files);
imageStore.delete(POST, postDto.images());
postStore.save(postDto.toEntity(newImages));
}

@Override
public void deletePost(PostDto postDto) {
var oldImages = postDto.images();
if (!ImageUtil.imagesValidation(oldImages)) imageStore.delete(POST, oldImages);
imageStore.delete(POST, postDto.images());
postStore.delete(postDto.toEntity());
}

Expand All @@ -127,10 +119,8 @@ public void updateViewCount(Long id) {
postStore.updateViewCount(id);
}

private PostDto postImageConverter(Post post) {
var links = imageReader.getImageLinks(POST, post.getImages());
var profileLink = imageReader.getUserImageLink(post.getUser().getProfileImage());
private PostDto postDtoConverter(Post post) {
var isLike = postReader.isPostLiked(post.getUser().getId(), post.getId());
return PostDto.from(post, links, profileLink, isLike);
return PostDto.from(post, isLike);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import org.orury.common.error.code.ReviewErrorCode;
import org.orury.common.error.code.ReviewReactionErrorCode;
import org.orury.common.error.exception.BusinessException;
import org.orury.common.util.S3Folder;
import org.orury.domain.global.constants.NumberConstants;
import org.orury.domain.global.image.ImageReader;
import org.orury.domain.global.image.ImageStore;
import org.orury.domain.gym.domain.GymStore;
import org.orury.domain.gym.domain.dto.GymDto;
Expand All @@ -28,50 +26,54 @@
import java.util.Objects;
import java.util.Optional;

import static org.orury.common.util.S3Folder.REVIEW;

@Slf4j
@RequiredArgsConstructor
@Service
public class ReviewServiceImpl implements ReviewService {
private final ReviewReader reviewReader;
private final ReviewStore reviewStore;
private final GymStore gymStore;
private final ImageReader imageReader;
private final ImageStore imageStore;

private static final int minReactionType = 1;
private static final int maxReactionType = 5;

@Transactional
@Override
public void createReview(ReviewDto reviewDto, List<MultipartFile> images) {
public void createReview(ReviewDto reviewDto, List<MultipartFile> files) {
isExist(reviewDto.userDto(), reviewDto.gymDto());
var images = imageStore.upload(REVIEW, files);
reviewStore.save(reviewDto.toEntity(images));
gymStore.increaseReviewCountAndTotalScore(reviewDto.gymDto().id(), reviewDto.score());
imageUploadAndSave(reviewDto, images);
}

@Transactional
@Override
public void updateReview(ReviewDto beforeReviewDto, ReviewDto updateReviewDto, List<MultipartFile> images) {
gymStore.updateTotalScore(beforeReviewDto.id(), beforeReviewDto.score(), updateReviewDto.score());
imageUploadAndSave(updateReviewDto, images);
imageStore.oldS3ImagesDelete(S3Folder.REVIEW.getName(), beforeReviewDto.images());
}

@Override
public ReviewDto getReviewDtoById(Long reviewId, Long userId) {
Review review = reviewReader.findById(reviewId)
.orElseThrow(() -> new BusinessException(ReviewErrorCode.NOT_FOUND));
validateReviewCreator(review.getUser().getId(), userId);
var urls = imageReader.getImageLinks(S3Folder.REVIEW, review.getImages());
return ReviewDto.from(review, urls, review.getUser().getProfileImage());
if (!Objects.equals(review.getUser().getId(), userId))
throw new BusinessException(ReviewErrorCode.FORBIDDEN);

return ReviewDto.from(review);
}

@Transactional
@Override
public void updateReview(ReviewDto beforeReviewDto, ReviewDto updateReviewDto, List<MultipartFile> files) {
gymStore.updateTotalScore(beforeReviewDto.id(), beforeReviewDto.score(), updateReviewDto.score());
var images = imageStore.upload(REVIEW, files);
reviewStore.save(updateReviewDto.toEntity(images));
imageStore.delete(REVIEW, beforeReviewDto.images());
}

@Transactional
@Override
public void deleteReview(ReviewDto reviewDto) {
gymStore.decreaseReviewCountAndTotalScore(reviewDto.gymDto().id(), reviewDto.score());
reviewStore.delete(reviewDto.toEntity());
imageStore.oldS3ImagesDelete(S3Folder.REVIEW.getName(), reviewDto.images());
imageStore.delete(REVIEW, reviewDto.images());
}

@Override
Expand Down Expand Up @@ -128,23 +130,8 @@ public void processReviewReaction(ReviewReactionDto reviewReactionDto) {
}
}

private void imageUploadAndSave(ReviewDto reviewDto, List<MultipartFile> files) {
if (files == null || files.isEmpty()) {
reviewStore.save(reviewDto.toEntity(List.of()));
} else {
List<String> images = imageStore.upload(S3Folder.REVIEW, files);
reviewStore.save(reviewDto.toEntity(images));
}
}

private List<ReviewDto> convertReviewsToReviewDtos(List<Review> reviews) {
return reviews.stream()
.map(it -> {
var urls = imageReader.getImageLinks(S3Folder.REVIEW, it.getImages());
var profileImgUrl = imageReader.getUserImageLink(it.getUser().getProfileImage());
return ReviewDto.from(it, urls, profileImgUrl);
})
.toList();
return reviews.stream().map(ReviewDto::from).toList();
}

private void validateReviewCreator(Long reviewCreatorId, Long userId) {
Expand Down
Loading

0 comments on commit 0b04bee

Please sign in to comment.