package p.packer.dtos; import java.nio.file.Path; import java.util.List; import java.util.Objects; public record PackerPackValidationAssetDTO( int assetId, String assetName, Path assetPath, long lastModified, List diagnostics) { public PackerPackValidationAssetDTO { if (assetId < 0) { throw new IllegalArgumentException("assetId must not be negative"); } assetName = Objects.requireNonNull(assetName, "assetName").trim(); assetPath = Objects.requireNonNull(assetPath, "assetPath").toAbsolutePath().normalize(); diagnostics = List.copyOf(Objects.requireNonNull(diagnostics, "diagnostics")); if (assetName.isBlank()) { throw new IllegalArgumentException("assetName must not be blank"); } if (lastModified < 0L) { throw new IllegalArgumentException("lastModified must not be negative"); } if (diagnostics.stream().anyMatch(diagnostic -> !diagnostic.blocking())) { throw new IllegalArgumentException("validation diagnostics must be blocking in the first wave"); } } public boolean blocked() { return !diagnostics.isEmpty(); } }