public async Task <IActionResult> ListByCompetition(int id, string s, int?award = null) { List <Models.Crew> crews; Models.Competition comp = await _context.Competitions.Include(c => c.TimingPoints).FirstOrDefaultAsync(c => c.CompetitionId == id); if (comp is null) { return(NotFound()); } if (award == null) { crews = await _context.Crews.Include(c => c.Results).Where(c => c.CompetitionId == id).ToListAsync(); } else { Models.Award dbAward = await _context.Awards.Include("Crews.Crew.Results") .FirstOrDefaultAsync(a => a.AwardId == award); crews = dbAward.Crews.Select(x => x.Crew).ToList(); } List <Crew> results = ResultsHelper.BuildCrewsList(_mapper, comp, crews); if (String.IsNullOrEmpty(s)) { return(Ok(results)); } else { return(Ok(results.Where(x => x.Name.ToUpper(CultureInfo.CurrentCulture) .Contains(s.ToUpper(CultureInfo.CurrentCulture), StringComparison.CurrentCulture)).ToList())); } }
public static List <Models.Crew> OrderCrews(List <Models.Crew> crews, Models.Competition competition, Models.TimingPoint timingPoint) { if (crews is null) { throw new ArgumentNullException(nameof(crews)); } if (competition is null) { throw new ArgumentNullException(nameof(competition)); } if (timingPoint is null) { throw new ArgumentNullException(nameof(timingPoint)); } int timingPointIndex = competition.TimingPoints.IndexOf(timingPoint); int timingPointId = competition.TimingPoints[timingPointIndex].TimingPointId; TimingPoint startPoint = competition.TimingPoints.First(); var ordered = crews.OrderByDescending(x => (x.IsStarted) ? (x.IsTimeOnly ? 1 : 2) : 0); for (int i = timingPointIndex; i > 0; i--) { ordered = ordered.ThenByDescending(x => x.Results.FirstOrDefault(y => y.TimingPointId == timingPointId) != null) .ThenBy(x => x.RunTime(startPoint, timingPoint)); } return(ordered.ToList()); }
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)); }
public async Task ImportLeague_WhenLeagueCodeDoesNotExistsOnFootballApi_ShouldReturn404() { var leagueCode = "CL"; Models.Competition result = null; var mapperStub = new MapperConfiguration(mc => mc.AddProfile(new MappingsProfile())).CreateMapper(); var leagueService = new Mock <ILeagueService>(); leagueService.Setup(x => x.ImportLeague(It.IsAny <string>())).ReturnsAsync(result); var logger = new Mock <ILogger <ImportLeagueController> >(); var controller = new ImportLeagueController(leagueService.Object, mapperStub, logger.Object); var actionResult = await controller.Get(leagueCode); leagueService.Verify(x => x.ImportLeague(It.IsAny <string>())); Assert.IsType <NotFoundObjectResult>(actionResult); var importLeagueResult = ((NotFoundObjectResult)actionResult).Value as ImportLeagueResponse; Assert.IsType <ImportLeagueResponse>(importLeagueResult); Assert.Equal("Not found", importLeagueResult.Message); }
public async Task <IActionResult> GetByFriendlyName(string friendlyName) { Models.Competition competition = await _context.Competitions.Include(x => x.TimingPoints) .FirstOrDefaultAsync(x => x.FriendlyName == friendlyName); return(Ok(_mapper.Map <Competition>(competition))); }
public async Task <IActionResult> GetByCompetition(int id) { Models.Competition competition = await _context.Competitions.Include(x => x.Awards).FirstOrDefaultAsync(x => x.CompetitionId == id); if (competition == null) { return(NotFound()); } return(Ok(_mapper.Map <List <Models.Award>, List <Award> >(competition.Awards))); }
public static void ParseResultsDirectory(racewranglerContext context) { var di = new DirectoryInfo(@"..\results"); foreach (var d in di.EnumerateDirectories()) { var season = (from s in context.Seasons where s.Year == int.Parse(d.Name) select s).FirstOrDefault(); // Don't continuously add seasons, use an existing one if possible! if (season == default(Season)) { season = new Models.Season() { Year = int.Parse(d.Name), Competitions = new List <Competition>() }; } // Now check each file in the directory to see if it has been loaded // If not, load it into the database! foreach (var f in d.EnumerateFiles()) { var fileLoaded = (from c in context.Competitions where c.ResultsSource == f.FullName select c).Any(); if (!fileLoaded) { var comp = new Models.Competition() { Entrants = new List <RaceEntry>() }; ParseCompetition(context, comp, f); comp.ResultsSource = f.FullName; season.Competitions.Add(comp); } } context.Seasons.Update(season); } context.SaveChanges(); return; }
public async Task <IActionResult> OnGetAsync(long?id) { if (id == null) { return(NotFound()); } Competition = await _context.Competition.FirstOrDefaultAsync(m => m.Id == id); if (Competition == null) { return(NotFound()); } return(Page()); }
public async Task <IActionResult> OnPostAsync(long?id) { if (id == null) { return(NotFound()); } Competition = await _context.Competition.FindAsync(id); if (Competition != null) { _context.Competition.Remove(Competition); await _context.SaveChangesAsync(); } return(RedirectToPage("./Index")); }
public static Competition FromEntity(Models.Competition competition) { var @new = new Competition(); @new.Categories = competition.Categories.Select(x => x.CategoryGuid).ToList(); @new.Constraints = competition.Constraints; @new.Description = competition.Description; @new.EndDate = competition.EndDate; @new.Guid = competition.Guid; @new.JuryGuids = competition.Jury.Select(x => x.JuryUserGuid).ToList(); @new.Prizes = competition.Prizes; @new.ShortDescription = competition.ShortDescription; @new.StartDate = competition.StartDate; @new.Title = competition.Title; @new.Participants = competition.Participants; @new.Creator = competition.Creator; return(@new); }
public async Task <IActionResult> Put(int compid, int id, [FromBody] Crew crew) { Models.Competition competition = await _context.Competitions.Include("Administrators.CompetitionAdministrator").FirstAsync(x => x.CompetitionId == compid); var authorizationResult = await _authorizationHelper.AuthorizeAsync(User, competition, "CanAdminCompetition"); if (!authorizationResult.Succeeded) { if (User.Identity.IsAuthenticated) { return(new ForbidResult()); } else { return(new ChallengeResult()); } } Models.Crew dbCrew = await _context.Crews.FirstOrDefaultAsync(x => x.BroeCrewId == id); if (dbCrew == null) { Models.Crew modelCrew = new Models.Crew { Competition = competition }; competition.Crews.Add(modelCrew); _mapper.Map(crew, modelCrew); await _context.SaveChangesAsync(); return(CreatedAtRoute("GetById", new { id = modelCrew.BroeCrewId })); } else { _mapper.Map(crew, dbCrew); await _context.SaveChangesAsync(); return(NoContent()); } }
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> OrderCrews(List <Api.Resources.Crew> apiCrews, Models.Competition competition) { if (apiCrews is null) { throw new ArgumentNullException(nameof(apiCrews)); } if (competition is null) { throw new ArgumentNullException(nameof(competition)); } return(OrderCrews(apiCrews, competition, competition.TimingPoints.Last())); }
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); }