public static Api.Resources.Crew BuildCrew(IMapper mapper, Models.Competition competition, Models.Crew modelCrew) { if (mapper is null) { throw new ArgumentNullException(nameof(mapper)); } if (competition is null) { throw new ArgumentNullException(nameof(competition)); } if (modelCrew is null) { throw new ArgumentNullException(nameof(modelCrew)); } TimingPoint startPoint = competition.TimingPoints.First(); Api.Resources.Crew apiCrew = mapper.Map <Api.Resources.Crew>(modelCrew); foreach (Models.Result modelResult in modelCrew.Results) { Api.Resources.Result apiResult = new Api.Resources.Result() { Id = modelResult.TimingPointId, TimeOfDay = modelResult.TimeOfDay, Name = modelResult.TimingPoint.Name, RunTime = modelCrew.RunTime(startPoint.TimingPointId, modelResult.TimingPointId), SectionTime = startPoint.TimingPointId != modelResult.TimingPointId ? modelCrew.RunTime(competition.TimingPoints[competition.TimingPoints.IndexOf(modelResult.TimingPoint) - 1].TimingPointId, modelResult.TimingPointId) : null }; apiCrew.Results.Add(apiResult); } return(apiCrew); }
public static List <Api.Resources.Crew> BuildCrewsList(IMapper mapper, Models.Competition competition, IEnumerable <Models.Crew> crews) { if (mapper is null) { throw new ArgumentNullException(nameof(mapper)); } if (competition is null) { throw new ArgumentNullException(nameof(competition)); } if (crews is null) { throw new ArgumentNullException(nameof(crews)); } List <Api.Resources.Crew> apiCrews = new List <Api.Resources.Crew>(); if (!crews.Any()) { return(apiCrews); } TimingPoint finishPoint = competition.TimingPoints.Last(); foreach (Models.Crew modelCrew in crews) { Api.Resources.Crew apiCrew = BuildCrew(mapper, competition, modelCrew); apiCrews.Add(apiCrew); } for (int i = 1; i < competition.TimingPoints.Count; i++) { apiCrews = OrderCrews(apiCrews, competition, competition.TimingPoints[i]); int currentTimingPointId = competition.TimingPoints[i].TimingPointId; int rank = 1; for (int j = 0; j < apiCrews.Count; j++) { Api.Resources.Result currentResult = apiCrews[j].Results.FirstOrDefault(y => y.Id == currentTimingPointId); if (currentResult == null) { break; } if (j == 0) { currentResult.Rank = rank.ToString(CultureInfo.CurrentCulture); if (apiCrews.Count > 1) { currentResult.Rank += (apiCrews[j + 1].Results.FirstOrDefault(y => y.Id == currentTimingPointId)?.RunTime == currentResult.RunTime ? "=" : String.Empty); } } else if (currentResult.RunTime == apiCrews[j - 1].Results.FirstOrDefault(y => y.Id == currentTimingPointId).RunTime) { currentResult.Rank = rank.ToString(CultureInfo.CurrentCulture) + "="; } else { rank = j + 1; currentResult.Rank = rank.ToString(CultureInfo.CurrentCulture); if (j < apiCrews.Count - 1) { currentResult.Rank += (apiCrews[j + 1].Results.FirstOrDefault(y => y.Id == currentTimingPointId)?.RunTime == currentResult?.RunTime ? "=" : String.Empty); } } } } apiCrews = OrderCrews(apiCrews, competition); int overallRank = 1; for (int i = 0; i < apiCrews.Count; i++) { if (apiCrews[i].OverallTime == null) { break; } if (i == 0) { apiCrews[i].Rank = overallRank.ToString(CultureInfo.CurrentCulture); if (apiCrews.Count > 1) { apiCrews[i].Rank += (apiCrews[i + 1].OverallTime == apiCrews[i].OverallTime ? "=" : String.Empty); } } else if (apiCrews[i].OverallTime == apiCrews[i - 1].OverallTime) { apiCrews[i].Rank = overallRank.ToString(CultureInfo.CurrentCulture) + "="; } else { overallRank = i + 1; apiCrews[i].Rank = overallRank.ToString(CultureInfo.CurrentCulture); if (i < apiCrews.Count - 1) { apiCrews[i].Rank += (apiCrews[i + 1].OverallTime == apiCrews[i].OverallTime ? "=" : String.Empty); } } } return(apiCrews); }