diff --git a/src/main/java/in/koreatech/koin/domain/community/article/repository/ArticleRepository.java b/src/main/java/in/koreatech/koin/domain/community/article/repository/ArticleRepository.java index daabf61dc3..f0e6f40551 100644 --- a/src/main/java/in/koreatech/koin/domain/community/article/repository/ArticleRepository.java +++ b/src/main/java/in/koreatech/koin/domain/community/article/repository/ArticleRepository.java @@ -4,6 +4,7 @@ import static in.koreatech.koin.domain.community.article.service.ArticleService.NOTICE_BOARD_ID; import java.time.LocalDate; +import java.util.Collection; import java.util.List; import java.util.Optional; @@ -28,7 +29,7 @@ public interface ArticleRepository extends Repository { Optional
findById(Integer articleId); - List
findAllByIdIn(List articleIds); + List
findAllByIdIn(Collection articleIds); Page
findAll(Pageable pageable); diff --git a/src/main/java/in/koreatech/koin/domain/community/keyword/dto/KeywordNotificationRequest.java b/src/main/java/in/koreatech/koin/domain/community/keyword/dto/KeywordNotificationRequest.java index 627c9c0026..f140a9ccc4 100644 --- a/src/main/java/in/koreatech/koin/domain/community/keyword/dto/KeywordNotificationRequest.java +++ b/src/main/java/in/koreatech/koin/domain/community/keyword/dto/KeywordNotificationRequest.java @@ -1,6 +1,6 @@ package in.koreatech.koin.domain.community.keyword.dto; -import java.util.List; +import java.util.Set; import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; @@ -9,10 +9,10 @@ import jakarta.validation.constraints.NotNull; @JsonNaming(SnakeCaseStrategy.class) -public record KeywordNotificationRequest ( +public record KeywordNotificationRequest( @Schema(description = "업데이트 된 공지사항 목록", example = "[1, 2, 3]") @NotNull - List updateNotification + Set updateNotification ) { } diff --git a/src/main/java/in/koreatech/koin/domain/community/keyword/service/KeywordService.java b/src/main/java/in/koreatech/koin/domain/community/keyword/service/KeywordService.java index b8e79e4759..5443125746 100644 --- a/src/main/java/in/koreatech/koin/domain/community/keyword/service/KeywordService.java +++ b/src/main/java/in/koreatech/koin/domain/community/keyword/service/KeywordService.java @@ -11,7 +11,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import in.koreatech.koin.domain.community.article.exception.ArticleNotFoundException; +import in.koreatech.koin.common.event.ArticleKeywordEvent; import in.koreatech.koin.domain.community.article.dto.ArticleKeywordResult; import in.koreatech.koin.domain.community.article.model.Article; import in.koreatech.koin.domain.community.article.repository.ArticleRepository; @@ -23,7 +23,6 @@ import in.koreatech.koin.domain.community.keyword.exception.KeywordDuplicationException; import in.koreatech.koin.domain.community.keyword.exception.KeywordLimitExceededException; import in.koreatech.koin.domain.community.keyword.model.ArticleKeyword; -import in.koreatech.koin.common.event.ArticleKeywordEvent; import in.koreatech.koin.domain.community.keyword.model.ArticleKeywordSuggestCache; import in.koreatech.koin.domain.community.keyword.model.ArticleKeywordUserMap; import in.koreatech.koin.domain.community.keyword.repository.ArticleKeywordRepository; @@ -147,27 +146,11 @@ public ArticleKeywordsSuggestionResponse suggestKeywords() { } public void sendKeywordNotification(KeywordNotificationRequest request) { - List updateNotificationIds = request.updateNotification().stream() - .distinct() - .toList(); - - if (updateNotificationIds.isEmpty()) { + if (request.updateNotification().isEmpty()) { return; } - List
fetchedArticles = articleRepository.findAllByIdIn(updateNotificationIds); - var articleById = fetchedArticles.stream() - .collect(Collectors.toMap(Article::getId, article -> article)); - List
articles = updateNotificationIds.stream() - .map(articleId -> { - Article article = articleById.get(articleId); - if (article == null) { - throw ArticleNotFoundException.withDetail("articleId: " + articleId); - } - return article; - }) - .toList(); - + List
articles = articleRepository.findAllByIdIn(request.updateNotification()); List keywordEvents = keywordExtractor.matchKeyword(articles, null); for (ArticleKeywordEvent event : keywordEvents) { eventPublisher.publishEvent(event);