ContentCanonicalizationSurvivor.java

package net.sasasin.sreader.domain;

import java.time.OffsetDateTime;
import java.util.Objects;

/**
 * Header values to write for the surviving article after a group is planned. Does not carry full
 * text fields; selected full text is tracked separately on the plan. {@code updatedAt} is set by
 * the repository at write time.
 */
public record ContentCanonicalizationSurvivor(
    String id,
    String feedUrlId,
    String sourceUrl,
    String fetchUrl,
    String canonicalUrl,
    String title,
    OffsetDateTime publishedAt,
    String feedText,
    OffsetDateTime createdAt) {

  public ContentCanonicalizationSurvivor {
    Objects.requireNonNull(id, "id must not be null");
    Objects.requireNonNull(feedUrlId, "feedUrlId must not be null");
    Objects.requireNonNull(sourceUrl, "sourceUrl must not be null");
    Objects.requireNonNull(fetchUrl, "fetchUrl must not be null");
    Objects.requireNonNull(canonicalUrl, "canonicalUrl must not be null");
    Objects.requireNonNull(createdAt, "createdAt must not be null");
  }
}