package org.fastcampus.post.application.Interfaces;
import org.fastcampus.post.domain.Post;
import org.fastcampus.user.domain.User;
publicinterfaceLikeRepository{
booleancheckLike(Post post, User user);
voidlike(Post post, User user);
voidunlike(Post post, User user);
}
PostService.java
package org.fastcampus.post.application;
import org.fastcampus.post.application.Interfaces.*;
import org.fastcampus.post.application.dto.*;
import org.fastcampus.post.domain.*;
import org.fastcampus.user.application.UserService;
import org.fastcampus.user.domain.User;
publicclassPostService{
privatefinal UserService userService;
privatefinal PostRepository postRepository;
privatefinal LikeRepository likeRepository;
publicPostService(UserService userService, PostRepository postRepository, LikeRepository likeRepository){
this.userService = userService;
this.postRepository = postRepository;
this.likeRepository = likeRepository;
}
public Post getPost(Long id){
return postRepository.findById(id).orElseThrow(() -> new IllegalArgumentException());
}
public Post createPost(CreatePostRequestDto dto){
User author = userService.getUser(dto.userId());
Post post = Post.createPost(null, author, dto.content(), dto.state());
return postRepository.save(post);
}
public Post updatePost(UpdatePostRequestDto dto){
Post post = getPost(dto.postId());
User user = userService.getUser(dto.userId());
post.updatePost(user, dto.content(), dto.state());
return postRepository.save(post);
}
publicvoidlikePost(LikePostRequestDto dto){
Post post = getPost(dto.postId());
User user = userService.getUser(dto.userId());
if (likeRepository.checkLike(post, user)) {
return;
}
post.like(user);
likeRepository.like(post, user);
}
publicvoidunlikePost(LikePostRequestDto dto){
Post post = getPost(dto.postId());
User user = userService.getUser(dto.userId());
if (likeRepository.checkLike(post, user)) {
post.unlike();
likeRepository.unlike(post, user);
}
}
}