FeedReaderService.java
package net.sasasin.sreader.service;
import net.sasasin.sreader.config.FeedReaderProperties;
import net.sasasin.sreader.domain.FeedUrl;
import net.sasasin.sreader.repository.FeedUrlRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class FeedReaderService {
private static final Logger logger = LoggerFactory.getLogger(FeedReaderService.class);
private final FeedReaderProperties properties;
private final FeedRegistrationService feedRegistrationService;
private final FeedUrlRepository feedUrlRepository;
private final FeedEntryImportService feedEntryImportService;
private final FullTextExtractionService fullTextExtractionService;
private final ContentTextFileExportService contentTextFileExportService;
public FeedReaderService(
FeedReaderProperties properties,
FeedRegistrationService feedRegistrationService,
FeedUrlRepository feedUrlRepository,
FeedEntryImportService feedEntryImportService,
FullTextExtractionService fullTextExtractionService,
ContentTextFileExportService contentTextFileExportService) {
this.properties = properties;
this.feedRegistrationService = feedRegistrationService;
this.feedUrlRepository = feedUrlRepository;
this.feedEntryImportService = feedEntryImportService;
this.fullTextExtractionService = fullTextExtractionService;
this.contentTextFileExportService = contentTextFileExportService;
}
public JobResult runOnce() {
int seeded = feedRegistrationService.registerFeedUrls(properties.seedFeedUrls());
int headers = 0;
for (FeedUrl feedUrl : feedUrlRepository.findActiveForReading()) {
headers += feedEntryImportService.importEntries(feedUrl);
}
int fullTexts = fullTextExtractionService.extractPending(100);
int textFilesExported =
contentTextFileExportService.exportPending(properties.textExport().batchSize());
JobResult result = new JobResult(seeded, headers, fullTexts, textFilesExported);
logger.info("Feed reader job finished: {}", result);
return result;
}
public record JobResult(
int feedUrlsInserted,
int contentHeadersInserted,
int fullTextsInserted,
int textFilesExported) {}
}