PortfolioImportReviewDtos.java

package com.taxonomy.portfolio.dto;

import com.taxonomy.portfolio.dto.PortfolioDtos.AnalysisJobView;
import com.taxonomy.portfolio.dto.PortfolioDtos.RequirementView;
import com.taxonomy.portfolio.dto.PortfolioDtos.SourceReference;
import com.taxonomy.portfolio.model.PortfolioTypes.Criticality;
import com.taxonomy.portfolio.model.PortfolioTypes.RequirementType;

import java.util.List;

/** Contracts for one atomic, human-reviewed document import. */
public final class PortfolioImportReviewDtos {

    private PortfolioImportReviewDtos() {
    }

    public enum ImportDecision {
        NEW_REQUIREMENT,
        NEW_VERSION
    }

    public record ReviewedImportItem(
            ImportDecision decision,
            Long targetRequirementId,
            String requirementKey,
            String title,
            String text,
            RequirementType requirementType,
            Integer priority,
            Criticality criticality,
            SourceReference source) {
    }

    public record ReviewedImportRequest(
            List<ReviewedImportItem> items,
            boolean analyzeAfterImport,
            String provider,
            Integer maxArchitectureNodes,
            String idempotencyKey) {
    }

    public record ReviewedImportResult(
            List<RequirementView> newRequirements,
            List<RequirementView> versionedRequirements,
            AnalysisJobView analysisJob) {
    }

    public record PersistedReviewImport(
            List<RequirementView> newRequirements,
            List<RequirementView> versionedRequirements) {
        public List<Long> affectedRequirementIds() {
            return java.util.stream.Stream.concat(
                            newRequirements.stream(), versionedRequirements.stream())
                    .map(RequirementView::id)
                    .distinct()
                    .toList();
        }
    }
}