FeedImportJobSummary.java

package net.sasasin.sreader.service.feed.ingestion;

import java.util.Objects;
import java.util.Optional;
import net.sasasin.sreader.service.outcome.BatchStopReason;
import net.sasasin.sreader.service.outcome.OutcomePreconditions;

/** Aggregated feed-import results across active feeds in one job run. */
public record FeedImportJobSummary(
    int completedFeeds,
    int failedFeeds,
    FeedImportSummary entries,
    Optional<BatchStopReason> stopReason) {

  public FeedImportJobSummary {
    completedFeeds = OutcomePreconditions.requireNonNegative("completedFeeds", completedFeeds);
    failedFeeds = OutcomePreconditions.requireNonNegative("failedFeeds", failedFeeds);
    Objects.requireNonNull(entries, "entries must not be null");
    stopReason = Objects.requireNonNull(stopReason, "stopReason must not be null");
  }

  public static FeedImportJobSummary empty() {
    return new FeedImportJobSummary(0, 0, FeedImportSummary.empty(), Optional.empty());
  }
}