package com.krylov.refound.service; import com.krylov.refound.entity.Favorite; import com.krylov.refound.entity.Post; import com.krylov.refound.entity.User; import com.krylov.refound.enums.ErrorCode; import com.krylov.refound.exception.ApiException; import com.krylov.refound.repository.FavoriteRepository; import com.krylov.refound.repository.PostRepository; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class FavoriteService { private final FavoriteRepository repository; private final PostRepository postRepository; private final UserService userService; public void addToFavorites(Long postId) { User user = userService.getCurrentUser(); Post post = postRepository.findById(postId) .orElseThrow(() -> new ApiException(ErrorCode.NOT_FOUND, "Post not found", HttpStatus.NOT_FOUND)); if (repository.existsByUserAndPost(user, post)) { return; // уже есть } Favorite favorite = new Favorite(); favorite.setUser(user); favorite.setPost(post); repository.save(favorite); } public void removeFromFavorites(Long postId) { User user = userService.getCurrentUser(); Post post = postRepository.findById(postId) .orElseThrow(() -> new ApiException(ErrorCode.NOT_FOUND, "Post not found", HttpStatus.NOT_FOUND)); repository.deleteByUserAndPost(user, post); } public List getFavorites() { User user = userService.getCurrentUser(); return repository.findByUser(user) .stream() .map(Favorite::getPost) .toList(); } public void toggle(Long postId) { User user = userService.getCurrentUser(); Post post = postRepository.findById(postId) .orElseThrow(() -> new ApiException( ErrorCode.NOT_FOUND, "Post not found", HttpStatus.NOT_FOUND )); if (repository.existsByUserAndPost(user, post)) { repository.deleteByUserAndPost(user, post); } else { Favorite f = new Favorite(); f.setUser(user); f.setPost(post); repository.save(f); } } }