Esempio n. 1
0
        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());
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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)));
        }
Esempio n. 6
0
        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)));
        }
Esempio n. 7
0
        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());
        }
Esempio n. 9
0
        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"));
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }