| package controllers |
| |
| import ( |
| e "repodiff/entities" |
| "repodiff/interactors" |
| "repodiff/repositories" |
| "repodiff/utils" |
| ) |
| |
| func DenormalizeData(config e.ApplicationConfig) error { |
| return interactors.NewTaskRunner().ExecuteFunctionsAsync( |
| []func() error{ |
| func() error { return denormalizeViewRecentProject(config) }, |
| func() error { return denormalizeDiffRows(config) }, |
| func() error { return denormalizeViewRecentCommit(config) }, |
| }, |
| ) |
| } |
| |
| func denormalizeViewRecentProject(config e.ApplicationConfig) error { |
| for _, target := range config.DiffTargets { |
| err := denormalizeViewRecentProjectForTarget(target) |
| if err != nil { |
| return err |
| } |
| } |
| return nil |
| } |
| |
| func denormalizeViewRecentProjectForTarget(target e.DiffTarget) error { |
| mappedTarget, err := getMappedTarget(target) |
| if err != nil { |
| return err |
| } |
| denormalizeRepo, err := repositories.NewScopedDenormalizerRepository(target, mappedTarget) |
| if err != nil { |
| return err |
| } |
| |
| projectRepo, err := repositories.NewProjectRepository(mappedTarget) |
| if err != nil { |
| return err |
| } |
| |
| diffRows, err := projectRepo.GetMostRecentDifferentials() |
| if err != nil { |
| return err |
| } |
| return denormalizeRepo.DenormalizeToRecentView(diffRows) |
| } |
| |
| func denormalizeDiffRows(config e.ApplicationConfig) error { |
| for _, target := range config.DiffTargets { |
| if err := denormalizeDiffRowsForTarget(target); err != nil { |
| return err |
| } |
| } |
| return nil |
| } |
| |
| func denormalizeDiffRowsForTarget(target e.DiffTarget) error { |
| mappedTarget, err := getMappedTarget(target) |
| if err != nil { |
| return err |
| } |
| denormalizeRepo, err := repositories.NewScopedDenormalizerRepository(target, mappedTarget) |
| if err != nil { |
| return err |
| } |
| |
| projectRepo, err := repositories.NewProjectRepository(mappedTarget) |
| if err != nil { |
| return err |
| } |
| |
| diffRows, err := projectRepo.GetMostRecentDifferentials() |
| if err != nil { |
| return err |
| } |
| return denormalizeRepo.DenormalizeToChangesOverTime(diffRows) |
| } |
| |
| func getMappedTarget(target e.DiffTarget) (e.MappedDiffTarget, error) { |
| sourceRepo, err := repositories.NewSourceRepository() |
| if err != nil { |
| return e.MappedDiffTarget{}, err |
| } |
| return sourceRepo.DiffTargetToMapped(target) |
| } |
| |
| func denormalizeViewRecentCommit(config e.ApplicationConfig) error { |
| for _, target := range config.DiffTargets { |
| if err := denormalizeCommitRows(target); err != nil { |
| return err |
| } |
| } |
| return denormalizeViewRecentCommitGlobal() |
| } |
| |
| func denormalizeViewRecentCommitGlobal() error { |
| denormalizeRepo, err := repositories.NewGlobalDenormalizerRepository() |
| if err != nil { |
| return err |
| } |
| if err := denormalizeRepo.DenormalizeToTopCommitter(); err != nil { |
| return err |
| } |
| return denormalizeRepo.DenormalizeToTopTechArea() |
| } |
| |
| func denormalizeCommitRows(target e.DiffTarget) error { |
| mappedTarget, err := getMappedTarget(target) |
| if err != nil { |
| return err |
| } |
| denormalizeRepo, err := repositories.NewScopedDenormalizerRepository(target, mappedTarget) |
| if err != nil { |
| return err |
| } |
| |
| commitRepo, err := repositories.NewCommitRepository(mappedTarget) |
| if err != nil { |
| return err |
| } |
| commitRows, err := commitRepo.GetMostRecentCommits() |
| if err != nil { |
| return err |
| } |
| commitToTimestamp, err := MaybeNullObjectCommitRepository( |
| mappedTarget, |
| ).GetFirstSeenTimestamp( |
| extractCommitHashes(commitRows), |
| utils.TimestampSeconds(), |
| ) |
| if err != nil { |
| return err |
| } |
| |
| return denormalizeRepo.DenormalizeToRecentCommits(commitRows, commitToTimestamp) |
| } |
| |
| func extractCommitHashes(commitRows []e.AnalyzedCommitRow) []string { |
| hashes := make([]string, len(commitRows)) |
| for i, row := range commitRows { |
| hashes[i] = row.Commit |
| } |
| return hashes |
| } |