From 0afb2397cf8c3878cf0c05d1690cd94f6d7fd059 Mon Sep 17 00:00:00 2001 From: SlimusMinus Date: Thu, 24 Sep 2026 00:18:13 +0300 Subject: [PATCH] deleted likes --- .../com/krylov/refound/dto/PostResponse.java | 2 - .../repository/FavoriteRepository.java | 9 -- .../refound/service/FavoriteService.java | 5 +- .../krylov/refound/service/PostService.java | 97 ++----------------- 4 files changed, 11 insertions(+), 102 deletions(-) diff --git a/src/main/java/com/krylov/refound/dto/PostResponse.java b/src/main/java/com/krylov/refound/dto/PostResponse.java index 80946e4..d97c2b9 100644 --- a/src/main/java/com/krylov/refound/dto/PostResponse.java +++ b/src/main/java/com/krylov/refound/dto/PostResponse.java @@ -22,9 +22,7 @@ public class PostResponse { private String userEmail; private String phone; private List images; - private boolean isFavorite; private Long userId; - private Long likeCount; private Role userRole; private String rulesAccepted; private Boolean reward; diff --git a/src/main/java/com/krylov/refound/repository/FavoriteRepository.java b/src/main/java/com/krylov/refound/repository/FavoriteRepository.java index c376aad..303b5d1 100644 --- a/src/main/java/com/krylov/refound/repository/FavoriteRepository.java +++ b/src/main/java/com/krylov/refound/repository/FavoriteRepository.java @@ -22,15 +22,6 @@ public interface FavoriteRepository extends JpaRepository { """) List findFavoritePostIds(Long userId, List postIds); - // ADD THIS METHOD: - @Query(""" - SELECT f.post.id, COUNT(f.id)\s - FROM Favorite f\s - WHERE f.post.id IN :postIds\s - GROUP BY f.post.id - \s""") - List countLikesByPostIds(List postIds); - @Query("select f.post.id from Favorite f where f.user.id = :userId") List findPostIdsByUserId(@Param("userId") Long userId); } diff --git a/src/main/java/com/krylov/refound/service/FavoriteService.java b/src/main/java/com/krylov/refound/service/FavoriteService.java index 665dcb9..193c901 100644 --- a/src/main/java/com/krylov/refound/service/FavoriteService.java +++ b/src/main/java/com/krylov/refound/service/FavoriteService.java @@ -10,7 +10,6 @@ import com.krylov.refound.mapper.PostMapper; import com.krylov.refound.repository.FavoriteRepository; import com.krylov.refound.repository.PostRepository; import java.util.List; -import java.util.Map; import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -75,11 +74,9 @@ public class FavoriteService { .map(Post::getId) .toList(); - Map likeCounts = postService.countLikes(postIds); - Set userFavoriteIds = postService.currentUserFavoriteIds(postIds); // тут будет == postIds, но ок для единообразия return posts.stream() - .map(post -> postService.toResponse(post, likeCounts, userFavoriteIds, true)) + .map(post -> postService.toResponse(post, true)) .toList(); } } diff --git a/src/main/java/com/krylov/refound/service/PostService.java b/src/main/java/com/krylov/refound/service/PostService.java index df1bd4d..8b0182b 100644 --- a/src/main/java/com/krylov/refound/service/PostService.java +++ b/src/main/java/com/krylov/refound/service/PostService.java @@ -14,18 +14,14 @@ import com.krylov.refound.enums.PostStatus; import com.krylov.refound.enums.PostType; import com.krylov.refound.exception.ApiException; import com.krylov.refound.mapper.PostMapper; -import com.krylov.refound.repository.FavoriteRepository; import com.krylov.refound.repository.ImageRepository; import com.krylov.refound.repository.PostRepository; import com.krylov.refound.util.PostSpecification; import java.time.LocalDateTime; import java.util.Arrays; import java.util.EnumSet; -import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -50,7 +46,6 @@ public class PostService { private final ImageRepository imageRepository; private final GeocodingService geocodingService; private final UserService userService; - private final FavoriteRepository favoriteRepository; private final FileStorageService fileStorageService; private final StatisticsService statisticsService; private final ObjectMapper objectMapper; @@ -84,21 +79,13 @@ public class PostService { } public Page getFeed(String search, Pageable pageable) { - Specification spec = PostSpecification.hasSearch(search).and((root, query, cb) -> root.get("status").in(FEED_VISIBLE_STATUSES)); + Specification spec = PostSpecification.hasSearch(search) + .and((root, query, cb) -> + root.get("status").in(FEED_VISIBLE_STATUSES)); + Page postsPage = postRepository.findAll(spec, pageable); - List postIds = postsPage.getContent().stream() - .map(Post::getId) - .toList(); - - if (postIds.isEmpty()) { - return Page.empty(pageable); - } - - Map likeCounts = countLikes(postIds); - Set userFavoriteIds = currentUserFavoriteIds(postIds); - - return postsPage.map(post -> toResponse(post, likeCounts, userFavoriteIds, true)); + return postsPage.map(post -> toResponse(post, true)); } /** @@ -115,15 +102,8 @@ public class PostService { return List.of(); } - List postIds = posts.stream() - .map(Post::getId) - .toList(); - - Map likeCounts = countLikes(postIds); - Set userFavoriteIds = currentUserFavoriteIds(postIds); - return posts.stream() - .map(post -> toResponse(post, likeCounts, userFavoriteIds, false)) + .map(post -> toResponse(post, false)) .toList(); } @@ -203,9 +183,6 @@ public class PostService { Post post = postRepository.findById(id) .orElseThrow(() -> new ApiException(ErrorCode.NOT_FOUND, "Post not found", HttpStatus.NOT_FOUND)); - // Сначала избранное — иначе DataIntegrityViolationException (FK) при удалении поста - favoriteRepository.deleteByPostIn(List.of(post)); - // Без этого файлы останутся в MinIO мусором после удаления объявления post.getImages().forEach(img -> deleteFileQuietly(img.getUrl())); @@ -234,13 +211,7 @@ public class PostService { post.setStatus(newStatus); Post updated = postRepository.save(post); log.info("Статус поста id={} изменён: {} -> {}", id, previousStatus, newStatus); - - List postIds = List.of(id); - PostResponse response = mapper.toResponse(updated); - response.setLikeCount(countLikes(postIds).getOrDefault(id, 0L)); - response.setFavorite(currentUserFavoriteIds(postIds).contains(id)); - - return response; + return mapper.toResponse(updated); } public List searchByCity(String city) { @@ -256,15 +227,8 @@ public class PostService { return List.of(); } - List postIds = posts.stream() - .map(Post::getId) - .toList(); - - Map likeCounts = countLikes(postIds); - Set userFavoriteIds = currentUserFavoriteIds(postIds); - return posts.stream() - .map(post -> toResponse(post, likeCounts, userFavoriteIds, true)) + .map(post -> toResponse(post, true)) .toList(); } @@ -328,45 +292,8 @@ public class PostService { } } - public Map countLikes(List postIds) { - if (postIds.isEmpty()) { - return Map.of(); - } - return favoriteRepository.countLikesByPostIds(postIds).stream() - .collect(Collectors.toMap( - row -> (Long) row[0], - row -> (Long) row[1] - )); - } - - /** - * Возвращает id постов, лайкнутых текущим пользователем, либо пустой набор, - * если пользователь не авторизован. - */ - public Set currentUserFavoriteIds(List postIds) { - if (postIds.isEmpty()) { - return Set.of(); - } - try { - User currentUser = userService.getCurrentUser(); - return new HashSet<>(favoriteRepository.findFavoritePostIds(currentUser.getId(), postIds)); - } catch (ApiException e) { - if (e.getErrorCode() == ErrorCode.UNAUTHORIZED) { - // Ожидаемо для анонимных пользователей — не считаем ошибкой - log.debug("Избранное не подгружено: пользователь не авторизован"); - } else { - // Подозрительный случай: в SecurityContext есть аутентификация с логином, - // но пользователя с таким логином нет в БД (например, удалён после выдачи токена) - log.warn("Избранное не подгружено: {}", e.getMessage()); - } - return Set.of(); - } - } - - public PostResponse toResponse(Post post, Map likeCounts, Set userFavoriteIds, boolean includeUserRole) { + public PostResponse toResponse(Post post, boolean includeUserRole) { PostResponse response = mapper.toResponse(post); - response.setLikeCount(likeCounts.getOrDefault(post.getId(), 0L)); - response.setFavorite(userFavoriteIds.contains(post.getId())); response.setReward(post.getIsReward()); if (includeUserRole) { response.setUserRole(post.getUser().getRole()); @@ -389,10 +316,6 @@ public class PostService { Post post = postRepository.findById(postId) .orElseThrow(() -> new ApiException(ErrorCode.NOT_FOUND, "Post not found", HttpStatus.NOT_FOUND)); - List postIds = List.of(postId); - Map likeCounts = countLikes(postIds); - Set userFavoriteIds = currentUserFavoriteIds(postIds); - - return toResponse(post, likeCounts, userFavoriteIds, true); + return toResponse(post, true); } } \ No newline at end of file