ContentTextFileExportService.java
package net.sasasin.sreader.service;
import net.sasasin.sreader.config.FeedReaderProperties;
import net.sasasin.sreader.domain.ContentTextFileExportTarget;
import net.sasasin.sreader.repository.ContentTextFileExportRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class ContentTextFileExportService {
private static final Logger logger = LoggerFactory.getLogger(ContentTextFileExportService.class);
private final FeedReaderProperties properties;
private final ContentTextFileExportRepository repository;
private final ContentTextFileWriter writer;
public ContentTextFileExportService(
FeedReaderProperties properties,
ContentTextFileExportRepository repository,
ContentTextFileWriter writer) {
this.properties = properties;
this.repository = repository;
this.writer = writer;
}
public int exportPending(int limit) {
if (!properties.textExport().enabled()) {
return 0;
}
logger.info("Starting content text file export phase");
int exported = 0;
for (ContentTextFileExportTarget target : repository.findUnexported(limit)) {
try {
ContentTextFileWriter.WriteResult result = writer.write(target);
boolean inserted =
repository.insertExported(
target.contentHeaderId(),
target.contentFullTextId(),
result.relativePath(),
result.fileSizeBytes(),
result.sha256());
if (inserted) {
exported++;
}
} catch (Exception e) {
logger.warn(
"Failed to export content text file for content_header_id={}",
target.contentHeaderId(),
e);
}
}
logger.info("Finished content text file export phase: exported={}", exported);
return exported;
}
}