11package com .davcatch .devcatch .common .scheduler .article .processor ;
22
33import java .util .List ;
4+ import java .util .Map ;
45import java .util .Objects ;
56import java .util .concurrent .CompletableFuture ;
67import java .util .concurrent .Executor ;
1415import com .davcatch .devcatch .domain .article .Article ;
1516import com .davcatch .devcatch .domain .source .Source ;
1617import com .davcatch .devcatch .domain .tag .Tag ;
18+ import com .davcatch .devcatch .domain .tag .TagType ;
1719import com .davcatch .devcatch .web .service .article .ArticleService ;
18- import com .davcatch .devcatch .web .service .tag .TagService ;
1920
2021import lombok .RequiredArgsConstructor ;
2122import lombok .extern .slf4j .Slf4j ;
2627public class ArticleProcessorService {
2728
2829 private final ArticleSummaryService articleSummaryService ;
29- private final TagService tagService ;
3030 private final ArticleService articleService ;
3131 private final Executor gptSummaryTaskExecutor ;
3232
33- public List <Article > processParsedArticles (Source source , List <ParsedArticle > parsedArticles ) {
33+ public List <Article > processParsedArticles (Source source , Map < TagType , Tag > tagMap , List <ParsedArticle > parsedArticles ) {
3434 log .debug ("[{}] {}개 아티클 처리 시작" , source .getName (), parsedArticles .size ());
3535
3636 List <CompletableFuture <Article >> futures = parsedArticles .stream ()
3737 .map (parsedArticle -> CompletableFuture .supplyAsync (() -> {
3838 try {
3939 ArticleSummary summary = articleSummaryService .summarizeArticle (parsedArticle .getContent ());
40- List <Tag > tags = tagService .getInTagTypes (summary .getTags ());
40+
41+ List <Tag > tags = summary .getTags ().stream ()
42+ .map (tagMap ::get )
43+ .filter (Objects ::nonNull )
44+ .toList ();
45+
4146 Article article = ArticleUtil .createNewArticle (source , parsedArticle , summary , tags );
4247
4348 articleService .save (article );
@@ -51,19 +56,15 @@ public List<Article> processParsedArticles(Source source, List<ParsedArticle> pa
5156
5257 CompletableFuture .allOf (futures .toArray (new CompletableFuture [0 ])).join ();
5358
54- List < Article > processedArticles = futures .stream ()
59+ return futures .stream ()
5560 .map (future -> {
5661 try {
57- return future .get ( );
62+ return future .getNow ( null );
5863 } catch (Exception e ) {
59- log .error ("[{}] CompletableFuter 결과 가져오기 실패: {}" , source .getName (), e .getMessage (), e );
6064 return null ;
6165 }
6266 })
6367 .filter (Objects ::nonNull )
6468 .toList ();
65-
66- log .debug ("[{}] {}개 아티클 처리 완료" , source .getName (), processedArticles .size ());
67- return processedArticles ;
6869 }
6970}
0 commit comments