Files
nahodka-back/src/main/java/com/krylov/refound/service/FavoriteService.java
2026-03-26 00:21:30 +03:00

80 lines
2.2 KiB
Java

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<Post> 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);
}
}
}