public async Task <IActionResult> GetById(int id) { Models.Crew crew = await _context.Crews.Include(x => x.Results).FirstOrDefaultAsync(x => x.BroeCrewId == id); if (crew == null) { return(NotFound()); } Models.Competition comp = await _context.Competitions.Include(c => c.TimingPoints) .FirstOrDefaultAsync(c => c.CompetitionId == crew.CompetitionId); Crew output = ResultsHelper.BuildCrew(_mapper, comp, crew); if (comp.TimingPoints.Count > 0) { Models.TimingPoint lastPoint = comp.TimingPoints.Last(); List <Models.Crew> crews = ResultsHelper.OrderCrews(comp.Crews, comp, lastPoint); output.Rank = crew.Rank(crews, comp.TimingPoints.First(), lastPoint); } for (int i = 1; i < crew.Results.Count; i++) { List <Models.Crew> crews = ResultsHelper.OrderCrews(comp.Crews, comp, comp.TimingPoints[i]); output.Results[i].Rank = crew.Rank(crews, comp.TimingPoints.First(), comp.TimingPoints[i]); } return(Ok(output)); }
private async Task <List <Result> > GetResults(Models.Crew crew) { List <Models.Crew> allCrews = await _context.Crews.Include(c => c.Results) .Include("Results.TimingPoint").ToListAsync(); Models.Result previousResult = null; bool isFirst = true; Models.TimingPoint startPoint = crew.Competition.TimingPoints.First(); List <Result> results = new List <Result>(); foreach (Models.Result result in crew.Results.OrderBy(x => x.TimingPoint.Order)) { results.Add(new Result() { Id = result.TimingPointId, Name = result.TimingPoint.Name, TimeOfDay = result.TimeOfDay, SectionTime = isFirst ? null : crew.RunTime(previousResult.TimingPoint, result.TimingPoint), RunTime = isFirst ? null : crew.RunTime(startPoint, result.TimingPoint), Rank = isFirst ? String.Empty : crew.Rank(allCrews.Where(x => x.RunTime(startPoint, result.TimingPoint).HasValue) .OrderBy(x => x.RunTime(startPoint, result.TimingPoint)).ToList(), startPoint, result.TimingPoint) }); previousResult = result; isFirst = false; } return(results); }