blob: 123bb9a0c73bb859ce2f9f641a848a7c9d9a7197 [file] [log] [blame]
package interactors
import (
cst "repodiff/constants"
ent "repodiff/entities"
)
// AppProcessingParameters defines all possible inputs that are necessary
// prior to applying any application business logic. Any outputs should
// be derived from purely deterministic means; As such, the interactors
// package should be 100% testable and free of any error return types
type AppProcessingParameters struct {
DiffRows []ent.DiffRow
CommitRows []ent.CommitRow
Manifests *ent.ManifestFileGroup
}
func ApplyApplicationMutations(p AppProcessingParameters) ([]ent.AnalyzedDiffRow, []ent.AnalyzedCommitRow) {
projectNameToType := ProjectNamesToType(p.Manifests)
return diffRowsToAnalyzed(p.DiffRows, projectNameToType),
commitRowsToAnalyzed(p.CommitRows, projectNameToType)
}
func commitRowsToAnalyzed(commitRows []ent.CommitRow, projectNameToType TypeMap) []ent.AnalyzedCommitRow {
analyzed := make([]ent.AnalyzedCommitRow, len(commitRows))
for i, row := range commitRows {
analyzed[i] = ent.AnalyzedCommitRow{
CommitRow: row,
Type: projectNameToType.getWithDefault(
row.DownstreamProject,
cst.Empty,
),
}
}
return analyzed
}
func diffRowsToAnalyzed(diffRows []ent.DiffRow, projectNameToType TypeMap) []ent.AnalyzedDiffRow {
analyzed := make([]ent.AnalyzedDiffRow, len(diffRows))
for i, row := range diffRows {
analyzed[i] = ent.AnalyzedDiffRow{
DiffRow: row,
Type: projectNameToType.getWithDefault(
row.DownstreamProject,
cst.Empty,
),
}
}
return analyzed
}