Skip to content
Snippets Groups Projects
Commit 479b3eff authored by Gwan Ju's avatar Gwan Ju
Browse files

refactor: Create LikeData entity, repository, and update related entities and controllers.

parent d557c618
No related branches found
No related tags found
No related merge requests found
...@@ -58,13 +58,24 @@ public class PostController { ...@@ -58,13 +58,24 @@ public class PostController {
@PostMapping("/post/likes") @PostMapping("/post/likes")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public void likeCrew(@RequestParam Long id){ public void likeCrew(@RequestParam Long id){
try {
postService.likeCrew(id); postService.likeCrew(id);
} }
catch (Exception e){
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "token not found");
}
}
@DeleteMapping ("/post/likes") @DeleteMapping ("/post/likes")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public void dislikeCrew(@RequestParam Long id){ public void dislikeCrew(@RequestParam Long id){
try{
postService.dislikeCrew(id); postService.dislikeCrew(id);
} }
catch (Exception e){
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "token not found");
}
}
@PostMapping("/post/search") @PostMapping("/post/search")
public List<PostResDto> search(@RequestBody PostDto postDto){ public List<PostResDto> search(@RequestBody PostDto postDto){
......
...@@ -35,7 +35,7 @@ public class PostResDto { ...@@ -35,7 +35,7 @@ public class PostResDto {
.author(post.getAuthor()) .author(post.getAuthor())
.body(post.getBody()) .body(post.getBody())
.image(post.getImage()) .image(post.getImage())
.likeCount(post.getLikeCount()) .likeCount(post.getLikes().size())
.createdTime(post.getCreatedTime()) .createdTime(post.getCreatedTime())
.modifiedTime(post.getModifiedTime()) .modifiedTime(post.getModifiedTime())
.comments(resDtos).build(); .comments(resDtos).build();
......
package umc.spring.post.data.entity;
import jakarta.persistence.*;
public class Like {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private Long userId;
@ManyToOne
@JoinColumn(name = "post_id")
private Long postId;
}
package umc.spring.post.data.entity;
import jakarta.persistence.*;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Data
@Getter
@NoArgsConstructor
public class LikeData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "postId",nullable = false)
Post post;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "userId",nullable = false)
User user;
}
...@@ -46,6 +46,10 @@ public class Post{ ...@@ -46,6 +46,10 @@ public class Post{
orphanRemoval = true) orphanRemoval = true)
private List<Comment> comments = new ArrayList<>(); private List<Comment> comments = new ArrayList<>();
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL,fetch = FetchType.EAGER,
orphanRemoval = true)
private List<LikeData> likes = new ArrayList<>();
} }
...@@ -11,13 +11,14 @@ import umc.spring.post.config.security.Role; ...@@ -11,13 +11,14 @@ import umc.spring.post.config.security.Role;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List;
//@Builder //@Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Entity @Entity
@Data @Data
@Table(name="user") @Table(name="User")
public class User implements UserDetails { public class User implements UserDetails {
@Id @Id
...@@ -37,6 +38,10 @@ public class User implements UserDetails { ...@@ -37,6 +38,10 @@ public class User implements UserDetails {
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private Role role = Role.USER; private Role role = Role.USER;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL,fetch = FetchType.EAGER,
orphanRemoval = true)
private List<LikeData> likes = new ArrayList<>();
@Override @Override
public Collection<? extends GrantedAuthority> getAuthorities() { public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> authorities = new ArrayList<>(); Collection<GrantedAuthority> authorities = new ArrayList<>();
......
package umc.spring.post.repository; package umc.spring.post.repository;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import umc.spring.post.data.entity.Like; import umc.spring.post.data.entity.LikeData;
import umc.spring.post.data.entity.Post;
import umc.spring.post.data.entity.User;
public interface LikeRepository extends JpaRepository<Like,Long> { import java.util.List;
import java.util.Optional;
public interface LikeRepository extends JpaRepository<LikeData, Long> {
Optional<LikeData> findByPostAndUser(Post post, User user);
List<LikeData> findLikeByPost(Post post);
} }
...@@ -10,9 +10,11 @@ import umc.spring.post.data.dto.PostDto; ...@@ -10,9 +10,11 @@ import umc.spring.post.data.dto.PostDto;
import umc.spring.post.data.dto.PostResDto; import umc.spring.post.data.dto.PostResDto;
import umc.spring.post.data.dto.UserInfoDto; import umc.spring.post.data.dto.UserInfoDto;
import umc.spring.post.data.entity.Comment; import umc.spring.post.data.entity.Comment;
import umc.spring.post.data.entity.LikeData;
import umc.spring.post.data.entity.Post; import umc.spring.post.data.entity.Post;
import umc.spring.post.data.entity.User; import umc.spring.post.data.entity.User;
import umc.spring.post.repository.CommentRepository; import umc.spring.post.repository.CommentRepository;
import umc.spring.post.repository.LikeRepository;
import umc.spring.post.repository.PostRepository; import umc.spring.post.repository.PostRepository;
import umc.spring.post.repository.UserRepository; import umc.spring.post.repository.UserRepository;
...@@ -31,11 +33,14 @@ public class PostServiceImpl implements PostService{ ...@@ -31,11 +33,14 @@ public class PostServiceImpl implements PostService{
@Autowired @Autowired
private final UserRepository userRepository; private final UserRepository userRepository;
@Autowired
private final LikeRepository likeRepository;
public PostServiceImpl(PostRepository postRepository, CommentRepository commentRepository, UserRepository userRepository) { public PostServiceImpl(PostRepository postRepository, CommentRepository commentRepository, UserRepository userRepository, LikeRepository likeRepository) {
this.postRepository = postRepository; this.postRepository = postRepository;
this.commentRepository = commentRepository; this.commentRepository = commentRepository;
this.userRepository = userRepository; this.userRepository = userRepository;
this.likeRepository = likeRepository;
} }
@Override @Override
...@@ -120,24 +125,45 @@ public class PostServiceImpl implements PostService{ ...@@ -120,24 +125,45 @@ public class PostServiceImpl implements PostService{
@Override @Override
public void likeCrew(Long id) { public void likeCrew(Long id) {
UserInfoDto userInfoDto = getCurrentMemberId(); UserInfoDto userInfoDto = getCurrentMemberId();
// 내가 좋아요를 누른적이 있는지? 있으면 반영안됨
Post post = postRepository.findById(id).orElseThrow(() -> new RuntimeException("id가 존재하지 않습니다.")); Post post = postRepository.findById(id).orElseThrow(() -> new RuntimeException("id가 존재하지 않습니다."));
int likeCount = post.getLikeCount(); User user = userRepository.findByLoginId(userInfoDto.getLoginId()).orElseThrow();
post.setLikeCount(++likeCount); Optional<LikeData> byPostAndUser = likeRepository.findByPostAndUser(post, user);
postRepository.save(post); if(byPostAndUser.isEmpty()){
LikeData likeData = new LikeData();
post.getLikes().add(likeData);
user.getLikes().add(likeData);
likeData.setUser(user);
likeData.setPost(post);
likeRepository.save(likeData);
}
else{
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "이미 좋아요를 눌렀습니다.");
}
} }
@Override @Override
public void dislikeCrew(Long id) { public void dislikeCrew(Long id) {
UserInfoDto userInfoDto = getCurrentMemberId();
Post post = postRepository.findById(id).orElseThrow(() -> new RuntimeException("id가 존재하지 않습니다.")); Post post = postRepository.findById(id).orElseThrow(() -> new RuntimeException("id가 존재하지 않습니다."));
int likeCount = post.getLikeCount(); User user = userRepository.findByLoginId(userInfoDto.getLoginId()).orElseThrow();
if(likeCount!=0){ Optional<LikeData> byPostAndUser = likeRepository.findByPostAndUser(post, user);
post.setLikeCount(--likeCount); if(byPostAndUser.isPresent()){
post.getLikes().removeIf(data ->
data.getPost().equals(post)
);
postRepository.save(post); postRepository.save(post);
user.getLikes().removeIf(data ->
data.getUser().equals(user)
);
userRepository.save(user);
} }
else{
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "좋아요를 누른 적이 없습니다");
} }
}
@Override @Override
public List<PostResDto> search(String title) { public List<PostResDto> search(String title) {
...@@ -206,7 +232,7 @@ public class PostServiceImpl implements PostService{ ...@@ -206,7 +232,7 @@ public class PostServiceImpl implements PostService{
private static void setPost(PostDto postDto, Post post) { private static void setPost(PostDto postDto, Post post) {
post.setTitle(postDto.getTitle()); post.setTitle(postDto.getTitle());
post.setBody(postDto.getBody()); post.setBody(postDto.getBody());
post.setLikeCount(postDto.getLikeCount()); post.setLikeCount(0);
post.setImage(postDto.getImage()); post.setImage(postDto.getImage());
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment