PortfolioGitDtos.java

package com.taxonomy.portfolio.dto;

import java.time.Instant;
import java.util.List;

/** REST contracts for Git-backed project portfolio collaboration. */
public final class PortfolioGitDtos {

    private PortfolioGitDtos() {
    }

    public record ExportedPortfolioDsl(
            String workspaceId,
            String username,
            String activeBranch,
            String headCommit,
            String dsl,
            int projectCount,
            int requirementCount,
            int solutionCount,
            int productCount,
            Instant exportedAt) {
    }

    public record CommitPortfolioRequest(
            String branch,
            String message) {
    }

    public record PortfolioCommitResult(
            String branch,
            String commitId,
            String parentCommitId,
            int projectCount,
            int requirementCount,
            int solutionCount,
            int productCount,
            int conflictCount,
            Instant committedAt) {
    }

    public record MaterializePortfolioRequest(
            String branch,
            String expectedHead) {
    }

    public record MaterializationPreview(
            String branch,
            String targetHead,
            String currentFingerprint,
            String targetFingerprint,
            int currentLineCount,
            int targetLineCount,
            int addedLines,
            int removedLines,
            boolean changed,
            boolean destructiveChangePossible,
            List<String> addedPreview,
            List<String> removedPreview) {
    }

    public record MaterializePortfolioResult(
            String branch,
            String commitId,
            int projectsUpserted,
            int requirementsUpserted,
            int requirementVersionsCreated,
            int warnings,
            Instant materializedAt) {
    }

    public record MergePortfolioRequest(
            String sourceBranch,
            String targetBranch,
            String message) {
    }

    public record MergePortfolioResult(
            String sourceBranch,
            String targetBranch,
            String sourceHead,
            String targetHeadBefore,
            String mergeCommitId,
            String strategy,
            int projectCount,
            int requirementCount,
            int solutionCount,
            int productCount,
            int conflictCount,
            Instant mergedAt) {
    }
}