Skip to content

Commit

Permalink
Refactor: 좋아요 추가/삭제 기능 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
seokjun01 committed Nov 5, 2024
1 parent 17dc641 commit 511479b
Showing 1 changed file with 23 additions and 26 deletions.
49 changes: 23 additions & 26 deletions src/main/java/com/leets/X/domain/post/service/PostService.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,48 +35,44 @@ public class PostService {
private final LikeRepository likeRepository;

// 게시물 ID로 조회
public ResponseDto<PostResponseDto> getPostResponse(Long id) {
public PostResponseDto getPostResponse(Long id) {
Post post = findPost(id);
// 삭제되지 않은 게시물만 조회 가능하게끔 수정
if (post.getIsDeleted() != IsDeleted.ACTIVE) {
throw new PostNotFoundException();
}
PostResponseDto postResponseDto = PostResponseDto.from(post);
return ResponseDto.response(ResponseMessage.GET_POST_SUCCESS.getCode(), ResponseMessage.GET_POST_SUCCESS.getMessage(), postResponseDto);
return PostResponseDto.from(post);
}

// 좋아요 수로 정렬한 게시물 조회 (직접 구현)
public ResponseDto<List<PostResponseDto>> getPostsSortedByLikes() {

public List<PostResponseDto> getPostsSortedByLikes() {
List<Post> posts = postRepository.findAll(); // 모든 게시물 조회

List<PostResponseDto> sortedPosts = posts.stream()
return posts.stream()
.filter(post -> post.getIsDeleted() == IsDeleted.ACTIVE) // ACTIVE 상태만 필터링
.sorted(Comparator.comparing(Post::getLikesCount).reversed()) // 좋아요 수 기준으로 내림차순 정렬
.map(PostResponseDto::from) // DTO로 변환
.collect(Collectors.toList());

return ResponseDto.response(ResponseMessage.GET_SORTED_BY_LIKES_SUCCESS.getCode(), ResponseMessage.GET_SORTED_BY_LIKES_SUCCESS.getMessage(), sortedPosts);
}

// 최신 게시물 조회
public ResponseDto<List<PostResponseDto>> getLatestPosts() {
public List<PostResponseDto> getLatestPosts() {
List<Post> posts = postRepository.findTop10ByOrderByCreatedAtDesc(); // 최신 10개 게시물 조회
// 현재 시각 가져오기
LocalDateTime now = LocalDateTime.now();

// 게시물을 PostResponseDto로 변환하고 정렬
List<PostResponseDto> postResponseDtos = posts.stream()
return posts.stream()
.map(PostResponseDto::from) // Post 객체를 PostResponseDto로 변환
.sorted(Comparator.comparingLong(postResponseDto ->
Math.abs(postResponseDto.getCreatedAt().until(now, java.time.temporal.ChronoUnit.SECONDS)))) // 현재 시각과의 차이를 기준으로 정렬
.collect(Collectors.toList());

return ResponseDto.response(ResponseMessage.GET_LATEST_POST_SUCCESS.getCode(), ResponseMessage.GET_LATEST_POST_SUCCESS.getMessage(), postResponseDtos);
}

// 글 생성 (Refactoring)
@Transactional
public ResponseDto<PostResponseDto> createPost(PostRequestDTO postRequestDTO, String email) {
public PostResponseDto createPost(PostRequestDTO postRequestDTO, String email) {
// 이메일로 사용자 조회
User user = userService.find(email); // JWT에서 추출한 이메일 사용
if (user == null) {
Expand All @@ -87,13 +83,12 @@ public ResponseDto<PostResponseDto> createPost(PostRequestDTO postRequestDTO, St
Post savedPost = postRepository.save(post);

// 저장된 게시글을 ResponseDto에 담아 반환
PostResponseDto postResponseDTO = PostResponseDto.from(savedPost);
return ResponseDto.response(ResponseMessage.POST_SUCCESS.getCode(), ResponseMessage.POST_SUCCESS.getMessage(), postResponseDTO);
return PostResponseDto.from(savedPost);
}

//좋아요 추가
@Transactional
public ResponseDto<String> addLike(Long postId, String email) {
public String addLike(Long postId, String email) {
Post post = findPost(postId);
User user = userService.find(email);

Expand All @@ -106,15 +101,16 @@ public ResponseDto<String> addLike(Long postId, String email) {
Like newLike = new Like(post, user);
likeRepository.save(newLike);

// 현재 좋아요 개수 반환
long likeCount = likeRepository.countByPost(post);
return ResponseDto.response(ResponseMessage.ADD_LIKE_SUCCESS.getCode(),
"좋아요가 추가되었습니다. 현재 좋아요 수: " + likeCount);
// 좋아요 수 증가
post.incrementLikeCount();
postRepository.save(post);

return "좋아요가 추가되었습니다. 현재 좋아요 수: " + post.getLikesCount();
}

// 게시물 삭제
@Transactional
public ResponseDto<String> deletePost(Long postId, String email) {
public String deletePost(Long postId, String email) {
Post post = findPost(postId);
User user = userService.find(email);

Expand All @@ -127,11 +123,11 @@ public ResponseDto<String> deletePost(Long postId, String email) {
post.delete(); // delete 메서드 호출로 상태를 변경
postRepository.save(post); // 상태 업데이트

return ResponseDto.response(ResponseMessage.POST_DELETED_SUCCESS.getCode(), ResponseMessage.POST_DELETED_SUCCESS.getMessage());
return "게시물이 삭제되었습니다.";
}

@Transactional
public ResponseDto<String> cancelLike(Long postId, String email) {
public String cancelLike(Long postId, String email) {
Post post = findPost(postId);
User user = userService.find(email);

Expand All @@ -143,10 +139,11 @@ public ResponseDto<String> cancelLike(Long postId, String email) {
// Like 객체 삭제
likeRepository.deleteByPostAndUser(post, user);

// 현재 좋아요 개수 반환
long likeCount = likeRepository.countByPost(post);
return ResponseDto.response(ResponseMessage.LIKE_CANCEL_SUCCESS.getCode(),
"좋아요가 삭제되었습니다. 현재 좋아요 수: " + likeCount);
// 좋아요 수 증가
post.decrementLikeCount();
postRepository.save(post); // likeCount를 데이터베이스에 업데이트

return "좋아요가 삭제되었습니다. 현재 좋아요 수: " + post.getLikesCount();
}

// 자주 중복되는 코드 메서드로 뽑기
Expand Down

0 comments on commit 511479b

Please sign in to comment.