71 lines
3.0 KiB
Java
71 lines
3.0 KiB
Java
package com.myoa.engineering.crawl.ppomppu.processor.controller;
|
|
|
|
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;
|
|
|
|
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;
|
|
import com.myoa.engineering.crawl.ppomppu.processor.service.PpomppuArticleService;
|
|
import com.myoa.engineering.crawl.ppomppu.processor.service.PpomppuFeedService;
|
|
import com.myoa.engineering.crawl.ppomppu.support.dto.APIResponse;
|
|
import com.myoa.engineering.crawl.ppomppu.support.dto.code.PpomppuBoardName;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import reactor.core.publisher.Mono;
|
|
|
|
/**
|
|
* CrawlAPIController
|
|
*
|
|
* @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;
|
|
private final PpomppuArticleService ppomppuArticleService;
|
|
private final MessageSenderService messageSenderService;
|
|
|
|
public CrawlAPIController(PpomppuFeedService ppomppuRSSFeedService,
|
|
PpomppuArticleService ppomppuArticleService,
|
|
MessageSenderService messageSenderService) {
|
|
this.ppomppuRSSFeedService = ppomppuRSSFeedService;
|
|
this.ppomppuArticleService = ppomppuArticleService;
|
|
this.messageSenderService = messageSenderService;
|
|
}
|
|
|
|
@PostMapping("/boards/{boardName}")
|
|
public Mono<APIResponse<FeedParsedResult>> crawlBoard(@PathVariable("boardName") PpomppuBoardName boardName) {
|
|
log.info("got request... {}", boardName);
|
|
FeedParsedResult result = FeedParsedResult.of(boardName);
|
|
|
|
Mono<String> publishedMessages =
|
|
ppomppuRSSFeedService.getArticles(boardName)
|
|
.map(e -> ppomppuArticleService.filterOnlyNewArticles(boardName, e))
|
|
.map(e -> ppomppuArticleService.save(boardName, e))
|
|
.filter(e -> !e.isEmpty())
|
|
.flatMap(e -> messageSenderService.sendBlockMessageToSlack(boardName, e));
|
|
|
|
return publishedMessages.then(Mono.just(APIResponse.success(result.done())));
|
|
}
|
|
|
|
@PostMapping("/exploit/boards/{boardName}")
|
|
public Mono<APIResponse<String>> crawlBoardDryRun(
|
|
@PathVariable("boardName") PpomppuBoardName boardName) {
|
|
log.info("got request... {}", boardName);
|
|
Mono<String> publishedMessages =
|
|
ppomppuRSSFeedService.getArticles(boardName)
|
|
.flatMap(e -> messageSenderService.sendBlockMessageToSlack(boardName, e));
|
|
|
|
return publishedMessages.map(APIResponse::success);
|
|
}
|
|
|
|
}
|