Skip to content

Commit

Permalink
Merge pull request #102 from D-VIDE/feature/review-like
Browse files Browse the repository at this point in the history
리뷰 좋아요 api 구현
  • Loading branch information
eyi-jin authored Aug 18, 2022
2 parents 0498fd3 + cf4b68b commit 1943d95
Show file tree
Hide file tree
Showing 8 changed files with 158 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/main/java/com/divide/review/Review.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.divide.review;

import com.divide.post.domain.Post;
import com.divide.post.domain.PostImage;
import com.divide.user.User;
import lombok.AccessLevel;
import lombok.Builder;
Expand Down Expand Up @@ -50,6 +51,9 @@ public class Review {
@NotNull
private String content;

@OneToMany(mappedBy = "review", orphanRemoval = true, cascade = CascadeType.REMOVE)
private List<ReviewLike> reviewLikes = new ArrayList();

@OneToMany(mappedBy = "review", orphanRemoval = true, cascade = CascadeType.ALL)
@NotNull
private List<ReviewImage> reviewImages = new ArrayList<>();
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/com/divide/review/ReviewController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.divide.post.dto.response.Result;
import com.divide.review.dto.request.PostReviewRequest;
import com.divide.review.dto.response.DeleteReviewLikeResponse;
import com.divide.review.dto.response.GetReviewsResponse;
import com.divide.review.dto.response.PostReviewResponse;
import lombok.RequiredArgsConstructor;
Expand All @@ -11,6 +12,8 @@
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.http.HttpStatus;
import com.divide.review.dto.response.PostReviewLikeResponse;

import java.util.List;

Expand Down Expand Up @@ -53,4 +56,32 @@ public Result getReviews(@RequestParam("longitude") double longitude, @RequestPa
.collect(toList());
return new Result(collect);
}

/**
* 리뷰 좋아요 생성
* [Post] http://localhost:8080/api/v1/review/3/like?userId=1
* @param reviewId : 유저가 누른 리뷰의 id
* @return
*/
@PostMapping(value = "/review/{reviewId}/like")
public ResponseEntity<PostReviewLikeResponse> reviewLike( @AuthenticationPrincipal UserDetails userDetails, @PathVariable Long reviewId){

Long newReviewLikeId = reviewService.reviewLike(userDetails.getUsername(), reviewId);

return ResponseEntity.status(HttpStatus.CREATED).body( new PostReviewLikeResponse(newReviewLikeId));
}

/**
* 리뷰 좋아요 생성취소
* [Delete] http://localhost:8080/api/v1/review/{reviewId}/like
* @param userDetails : 현재 로그인 된 유저
* @param reviewId : 좋아요 취소를 누른 리뷰의 아이디
* @return
*/
@DeleteMapping("/review/{reviewId}/like")
public ResponseEntity<DeleteReviewLikeResponse> reviewLikeCancel(@AuthenticationPrincipal UserDetails userDetails, @PathVariable Long reviewId){
reviewService.reviewLikeCancel(userDetails.getUsername(), reviewId);

return ResponseEntity.status(HttpStatus.OK).body(new DeleteReviewLikeResponse(reviewId));
}
}
38 changes: 38 additions & 0 deletions src/main/java/com/divide/review/ReviewLike.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.divide.review;

import com.divide.user.User;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

import static javax.persistence.FetchType.LAZY;

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ReviewLike {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long reviewLikeId;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "review_id")
@NotNull
private Review review;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "user_id")
@NotNull
private User user;

@Builder
public ReviewLike(Long reviewLikeId, Review review, User user) {
this.reviewLikeId = reviewLikeId;
this.review = review;
this.user = user;
}
}
25 changes: 25 additions & 0 deletions src/main/java/com/divide/review/ReviewLikeRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.divide.review;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;

@Repository
@RequiredArgsConstructor
public class ReviewLikeRepository {
private final EntityManager em;

public void save(ReviewLike reviewLike) {
em.persist(reviewLike);}

public void delete(ReviewLike reviewLike){
em.remove(reviewLike);
}

public ReviewLike findById(Long reviewLikeId){
ReviewLike reviewLike = em.find(ReviewLike.class, reviewLikeId);
return reviewLike;
}

}
5 changes: 5 additions & 0 deletions src/main/java/com/divide/review/ReviewRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,9 @@ public List<Review> findReviewsAll(Integer first, String pointFormat) {
return reviewLists;
}

public Review findById(Long reviewId){
Review review = em.find(Review.class, reviewId);
return review;
}

}
31 changes: 31 additions & 0 deletions src/main/java/com/divide/review/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
@RequiredArgsConstructor
public class ReviewService {
private final ReviewRepository reviewRepository;
private final ReviewLikeRepository reviewLikeRepository;
private final UserRepository userRepository;
private final PostRepository postRepository;

Expand Down Expand Up @@ -93,4 +94,34 @@ private String getPointFormat(Double longitude, Double latitude, Double distance
return pointFormat;
}

//리뷰 좋아요
@Transactional
public Long reviewLike(String userEmail, Long reviewId){
//엔티티 조회
User currentUser = userRepository.findByEmail(userEmail).orElseThrow(() -> new UsernameNotFoundException(""));
Review review = reviewRepository.findById(reviewId);

//리뷰 좋아요 생성
ReviewLike reviewLike = ReviewLike.builder()
.user(currentUser)
.review(review)
.build();

reviewLikeRepository.save(reviewLike);
return reviewLike.getReviewLikeId();
}

@Transactional
public void reviewLikeCancel(String userEmail, Long reviewId){
//게시글 좋아요 조회
Review review = reviewRepository.findById(reviewId);
List<ReviewLike> reviewLikes = review.getReviewLikes();
// reviewLikes.removeIf(reviewLike -> reviewLike.getUser().getEmail().equals(userEmail));

for(ReviewLike reviewLike: reviewLikes){
if ( reviewLike.getUser().getEmail().equals(userEmail) ){
reviewLikeRepository.delete(reviewLike);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.divide.review.dto.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class DeleteReviewLikeResponse {
private Long ReviewId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.divide.review.dto.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class PostReviewLikeResponse {
private Long reviewLikeId;
}

0 comments on commit 1943d95

Please sign in to comment.