ShoppingCrawler/processor/src/main/java/com/myoa/engineering/crawl/ppomppu/processor/controller/CrawlAPIController.java

71 lines
3.0 KiB
Java
Raw Normal View History

2021-09-05 10:24:45 +00:00
package com.myoa.engineering.crawl.ppomppu.processor.controller;
2021-12-03 16:07:42 +00:00
import java.util.List;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
2021-12-03 16:07:42 +00:00
import com.myoa.engineering.crawl.ppomppu.processor.domain.PpomppuArticle;
import com.myoa.engineering.crawl.ppomppu.processor.dto.FeedParsedResult;
import com.myoa.engineering.crawl.ppomppu.processor.service.MessageSenderService;
2021-09-26 13:22:30 +00:00
import com.myoa.engineering.crawl.ppomppu.processor.service.PpomppuArticleService;
import com.myoa.engineering.crawl.ppomppu.processor.service.PpomppuFeedService;
2021-09-26 13:22:30 +00:00
import com.myoa.engineering.crawl.ppomppu.support.dto.APIResponse;
import com.myoa.engineering.crawl.ppomppu.support.dto.code.PpomppuBoardName;
import lombok.extern.slf4j.Slf4j;
2021-09-05 10:24:45 +00:00
import reactor.core.publisher.Mono;
/**
* CrawlAPIController
*
2021-09-05 10:24:45 +00:00
* @author Shin Woo-jin (woo-jin.shin@linecorp.com)
* @since 2021-09-05
*/
@Slf4j
@RestController
@RequestMapping("/api/v1/crawl")
public class CrawlAPIController {
private final PpomppuFeedService ppomppuRSSFeedService;
2021-09-26 13:22:30 +00:00
private final PpomppuArticleService ppomppuArticleService;
private final MessageSenderService messageSenderService;
2021-09-26 13:22:30 +00:00
public CrawlAPIController(PpomppuFeedService ppomppuRSSFeedService,
PpomppuArticleService ppomppuArticleService,
MessageSenderService messageSenderService) {
this.ppomppuRSSFeedService = ppomppuRSSFeedService;
2021-09-26 13:22:30 +00:00
this.ppomppuArticleService = ppomppuArticleService;
this.messageSenderService = messageSenderService;
}
2021-09-05 10:24:45 +00:00
@PostMapping("/boards/{boardName}")
public Mono<APIResponse<FeedParsedResult>> crawlBoard(@PathVariable("boardName") PpomppuBoardName boardName) {
2021-09-05 10:24:45 +00:00
log.info("got request... {}", boardName);
FeedParsedResult result = FeedParsedResult.of(boardName);
2021-11-21 13:36:30 +00:00
Mono<String> publishedMessages =
ppomppuRSSFeedService.getArticles(boardName)
2021-11-21 13:36:30 +00:00
.map(e -> ppomppuArticleService.filterOnlyNewArticles(boardName, e))
.map(e -> ppomppuArticleService.save(boardName, e))
2021-11-30 16:16:15 +00:00
.filter(e -> !e.isEmpty())
2021-12-03 16:29:32 +00:00
.flatMap(e -> messageSenderService.sendBlockMessageToSlack(boardName, e));
2021-11-21 13:36:30 +00:00
return publishedMessages.then(Mono.just(APIResponse.success(result.done())));
2021-09-05 10:24:45 +00:00
}
2021-12-03 16:07:42 +00:00
@PostMapping("/exploit/boards/{boardName}")
public Mono<APIResponse<String>> crawlBoardDryRun(
@PathVariable("boardName") PpomppuBoardName boardName) {
log.info("got request... {}", boardName);
Mono<String> publishedMessages =
ppomppuRSSFeedService.getArticles(boardName)
2021-12-03 16:29:32 +00:00
.flatMap(e -> messageSenderService.sendBlockMessageToSlack(boardName, e));
2021-12-03 16:07:42 +00:00
return publishedMessages.map(APIResponse::success);
}
2021-09-05 10:24:45 +00:00
}