ContentCanonicalizationPlan.java

package net.sasasin.sreader.domain;

import java.util.List;
import java.util.Objects;
import java.util.Optional;

public record ContentCanonicalizationPlan(
    ContentCanonicalizationGroup group,
    ContentCanonicalizationSurvivor survivor,
    Optional<ContentCanonicalizationFullText> selectedFullText,
    boolean feedConflict) {

  public ContentCanonicalizationPlan {
    Objects.requireNonNull(group, "group must not be null");
    Objects.requireNonNull(survivor, "survivor must not be null");
    Objects.requireNonNull(selectedFullText, "selectedFullText must not be null");
  }

  public List<String> memberIds() {
    return group.members().stream().map(ContentCanonicalizationCandidate::id).toList();
  }

  public boolean merge() {
    return group.members().size() > 1;
  }

  /** Survivor header id (MD5 of normalized canonical URL). */
  public String survivorId() {
    return survivor.id();
  }
}