📌 좋아요 등록

🔍 Controller

/**좋아요 등록*/
@Transactional
@PostMapping("/user/favorite/{id}")
public ResponseEntity<Void> addFavorite(@PathVariable Long id, HttpServletRequest request) {
    productService.increaseFavorite(id);
    boolean check = favoriteService.addFavorite((User) request.getAttribute("user"), id);

    return (check) ?
            ResponseEntity.status(HttpStatus.OK).body(null) :
            ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}

특정 상품의 id와 함께 좋아요 등록 요청이 오면 해당 상품의 좋아요 개수를 1증가 시키고 요청을 보낸 유저의 좋아요 목록에 해당 상품을 추가하는 과정으로 동작

🔍 Service

@Override
public void increaseFavorite(Long id) {
    productRepository.increaseFavorite(id);
}

🔍 Repository

@Transactional
@Modifying(clearAutomatically = true)
@Query("update Product o set o.favorite=o.favorite+1 where o.id=:id")
void increaseFavorite(@Param("id") Long id);

@Query 어노테이션을 사용해 해당 상품의 favorite을 1 증가시키는 update 쿼리 실행

🔍 Service

@Override
    public boolean addFavorite(User user, Long productId) {
        Product product = productRepository.findById(productId).orElse(null);
        if (product == null){
            return false;
        }

        Favorite favorite = Favorite.builder()
                .id(null)
                .user(user)
                .product(product)
                .build();

				// DB에 이미 좋아요 등록이 되어있는지 확인
        if (favoriteRepository.findByUserIdAndProductId(user.getId(), productId) != null) {
            return false;
        }

        Favorite createdFavorite = favoriteRepository.save(favorite);
        return !createdFavorite.getProduct().getName().isEmpty();
    }

좋아요 목록에 해당 상품을 추가하는 함수

상품id를 사용해 Product Entity 조회해오고 Favorite Entity 생성

좋아요는 한번 등록되면 해제되기전까지는 또 등록 할 수 없도록 해야하므로 체크하는 과정 필요

Spring Data Jpa 문법에 맞게 findByUserIdAndProductId 함수 작성 후 사용

생성된 Favorite Entity 영속화하여 DB에 저장

📌 좋아요 해제

🔍 Service

/**좋아요 해제*/
@Transactional
@DeleteMapping("/user/favorite/{id}")
public ResponseEntity<Void> deleteFavorite(@PathVariable Long id, HttpServletRequest request) {
    productService.decreaseFavorite(id);
    boolean check = favoriteService.deleteFavorite((User) request.getAttribute("user"), id);

    return (check) ?
            ResponseEntity.status(HttpStatus.OK).body(null) :
            ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}

좋아요 해제기능의 Controller 부분은 좋아요 등록과 Http 메소드와 Service의 호출하는 함수만 다르고 나머지는 같은 로직