Exemplo n.º 1
0
        private static string GenerateDescription(CompetitionRound competitionRound)
        {
            switch (competitionRound.CompetitionRoundTypeID)
            {
            case CompetitionRoundTypes.LeagueMatches:
                return($"Game {competitionRound.GameNumber}");

            case CompetitionRoundTypes.Prelims:
                return($"Prelim");

            case CompetitionRoundTypes.Rounds123:
                return($"Round {competitionRound.GameNumber}");

            case CompetitionRoundTypes.Last16:
                return($"Last 16");

            case CompetitionRoundTypes.QuarterFinals:
                return($"Quarter Final");

            case CompetitionRoundTypes.SemiFinals:
                return($"Semi Final");

            case CompetitionRoundTypes.Final:
                return($"Final");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemplo n.º 2
0
 public static TeamCompetitionRoundDto AssembleTeamDto(this CompetitionRound competitionRound)
 {
     return(new TeamCompetitionRoundDto
     {
         ID = competitionRound.ID,
         Notes = competitionRound.Notes,
         GameNumber = competitionRound.GameNumber,
         CompetitionRoundTypeID = competitionRound.CompetitionRoundTypeID,
         Description = GenerateDescription(competitionRound)
     });
 }
Exemplo n.º 3
0
        public override IList <ScoreboardSummaryEntry> GetPeerTeams(CompetitionRound round, CompleteScoreboardSummary divisionScoreboard, ScoreboardSummaryEntry teamDetails)
        {
            // make a clone because we'll mutate this later
            divisionScoreboard = divisionScoreboard.Clone().WithFilter(teamDetails.Division, null);
            if (teamDetails.Division == Division.MiddleSchool)
            {
                // middle school doesn't have tiers or categories
                return(divisionScoreboard.TeamList);
            }

            // open/service

            if ((teamDetails.Division == Division.Open && round > CompetitionRound.Round2) || (teamDetails.Division == Division.AllService && round == CompetitionRound.Round3))
            {
                // In open past R2, tier matters, but that's it
                // In all service R3, category doesn't* matter, just tier
                // See issue #14
                return(divisionScoreboard.WithFilter(teamDetails.Division, teamDetails.Tier).TeamList);
            }

            // open/service, service: category matters; open: no tiers
            if (teamDetails.Division == Division.Open)
            {
                // unknown round - if our candidate team has a tier, filter by tier, otherwise return the whole division
                if (round == 0 && teamDetails.Tier != null)
                {
                    return(divisionScoreboard.WithFilter(teamDetails.Division, teamDetails.Tier).TeamList);
                }

                // either R1 or R2
                // safe to return the whole division as a peer list
                return(divisionScoreboard.TeamList);
            }

            // all-service round where category matters ("R0" we default to factoring in category)

            // filter by tier, where available
            if (round > CompetitionRound.Round2)
            {
                divisionScoreboard.WithFilter(Division.AllService, teamDetails.Tier);
            }

            // just need to filter the list by category
            if (teamDetails.Category == null)
            {
                // silent fail
                return(divisionScoreboard.TeamList);
            }

            // there might be some A.S. teams whose categories we don't know
            // they get treated as not-my-problem, that is, not part of my category
            return(divisionScoreboard.TeamList.Where(t => t.Category == teamDetails.Category).ToIList());
        }
Exemplo n.º 4
0
        public static CompetitionRoundDto AssembleDto(this CompetitionRound competitionRound)
        {
            if (competitionRound is PlayerCompetitionRound playerCompetitionRound)
            {
                return(AssemblePlayerDto(playerCompetitionRound));
            }

            if (competitionRound is TeamCompetitionRound teamCompetitionRound)
            {
                return(AssembleTeamDto(teamCompetitionRound));
            }

            throw new ArgumentOutOfRangeException();
        }
        public override ScoreboardFilterInfo GetPeerFilter(CompetitionRound round, ScoreboardSummaryEntry teamDetails)
        {
            if (teamDetails.Division == Division.MiddleSchool)
            {
                // middle school doesn't have tiers or categories
                return(new ScoreboardFilterInfo(Division.MiddleSchool, null));
            }

            // open/service

            if ((teamDetails.Division == Division.Open && round > CompetitionRound.Round2) || (teamDetails.Division == Division.AllService && round == CompetitionRound.Round3))
            {
                // In open past R2, tier matters, but that's it
                // In all service R3, category doesn't* matter, just tier
                // See issue #14
                return(new ScoreboardFilterInfo(teamDetails.Division, teamDetails.Tier));
            }

            // open/service, service: category matters; open: no tiers
            if (teamDetails.Division == Division.Open)
            {
                // unknown round - if our candidate team has a tier, filter by tier, otherwise return the whole division
                if (round == 0 && teamDetails.Tier != null)
                {
                    return(new ScoreboardFilterInfo(teamDetails.Division, teamDetails.Tier));
                }

                // either R1 or R2
                // safe to return the whole division as a peer list
                return(new ScoreboardFilterInfo(Division.Open, null));
            }

            // all-service round where category matters ("R0" we default to factoring in category)

            Tier?tierFilter = null;

            // filter by tier, where available
            if (round > CompetitionRound.Round2)
            {
                tierFilter = teamDetails.Tier;
            }

            // there might be some A.S. teams whose categories we don't know
            // they get treated as not-my-problem, that is, not part of my category
            // unknown category -> null -> no filtering on that, a good enough fallback
            return(new ScoreboardFilterInfo(Division.AllService, tierFilter, teamDetails.Category, null));
        }
        public override double GetCiscoPointsPossible(CompetitionRound round, Division division, Tier?tier)
        {
            // http://www.uscyberpatriot.org/competition/competition-challenges-by-round
            switch (round)
            {
            case CompetitionRound.Round1:
                return(division == Division.MiddleSchool ? 0 : 20);

            case CompetitionRound.Round2:
                return(division == Division.MiddleSchool ? 0 : 30);

            case CompetitionRound.Round3:
                return(division == Division.MiddleSchool ? 30 : 100);

            case CompetitionRound.Semifinals:
                return(division == Division.MiddleSchool ? 30 : 100);
            }

            throw new ArgumentException("Unknown round.");
        }
Exemplo n.º 7
0
        public virtual TeamDetailRankingInformation GetRankingInformation(CompetitionRound round, CompleteScoreboardSummary divisionScoreboard, ScoreboardSummaryEntry teamInfo)
        {
            divisionScoreboard = divisionScoreboard.Clone().WithFilter(teamInfo.Division, null);

            // may be equal to division scoreboard, that's fine
            var tierScoreboard = divisionScoreboard.Clone().WithFilter(teamInfo.Division, teamInfo.Tier);
            var peers          = GetPeerTeams(round, divisionScoreboard, teamInfo);

            var summaryComparer = BuildSummaryComparer(teamInfo.TeamId);

            return(new TeamDetailRankingInformation()
            {
                TeamId = teamInfo.TeamId,
                Peers = peers,
                PeerIndex = peers.IndexOfWhere(summaryComparer),
                PeerCount = peers.Count,
                DivisionIndex = divisionScoreboard.TeamList.IndexOfWhere(summaryComparer),
                DivisionCount = divisionScoreboard.TeamList.Count,
                TierIndex = tierScoreboard.TeamList.IndexOfWhere(summaryComparer),
                TierCount = tierScoreboard.TeamList.Count
            });
        }
 public abstract double GetCiscoPointsPossible(CompetitionRound round, Division division, Tier?tier);
Exemplo n.º 9
0
 public abstract IList <ScoreboardSummaryEntry> GetPeerTeams(CompetitionRound round, CompleteScoreboardSummary divisionScoreboard, ScoreboardSummaryEntry teamInfo);
Exemplo n.º 10
0
 ScoreboardFilterInfo ICompetitionRoundLogicService.GetPeerFilter(CompetitionRound round, ScoreboardSummaryEntry teamInfo) => underlyingService.GetPeerFilter(round, teamInfo);
Exemplo n.º 11
0
 double ICompetitionRoundLogicService.GetCiscoPointsPossible(CompetitionRound round, Division division, Tier?tier) => underlyingService.GetCiscoPointsPossible(round, division, tier);
Exemplo n.º 12
0
 public PreconfiguredRoundPassthroughCompetitionRoundLogicService(CompetitionRound round, ICompetitionRoundLogicService underlying)
 {
     preconfiguredRound = round;
     underlyingService  = underlying;
 }
 public async Task Initialise(Entities.Competition competition, CompetitionStage stage, CompetitionEvent competitionEvent, CompetitionRound round, ITeamFixtureModel teamFixture)
 {
     this.Competition      = competition;
     this.CompetitionStage = stage;
     this.CompetitionEvent = competitionEvent;
     this.CompetitionRound = round;
     this.Fixture          = teamFixture;
 }
 public abstract ScoreboardFilterInfo GetPeerFilter(CompetitionRound round, ScoreboardSummaryEntry teamInfo);
Exemplo n.º 15
0
        public static async Task <string> SerializeAsync(CompleteScoreboardSummary summary,
                                                         IDictionary <TeamId, ScoreboardDetails> teamDetails, CompetitionRound round = 0)
        {
            StreamWriter sw = null;
            StreamReader sr = null;

            try
            {
                using (var memStr = new MemoryStream())
                {
                    sw = new StreamWriter(memStr);
                    sr = new StreamReader(memStr);

                    // write
                    await SerializeAsync(sw, summary, teamDetails, round).ConfigureAwait(false);

                    // read
                    memStr.Position = 0;
                    return(await sr.ReadToEndAsync().ConfigureAwait(false));
                }
            }
            finally
            {
                sw?.Dispose();
                sr?.Dispose();
            }
        }
 public override double GetCiscoPointsPossible(CompetitionRound round, Division division, Tier?tier)
 {
     throw new NotImplementedException("CP-X Cisco totals are not implemented.");
 }
Exemplo n.º 17
0
 public void Initialise(Entities.Competition competition, CompetitionStage stage, CompetitionEvent competitionEvent, CompetitionRound round,
                        IPlayerFixtureModel playerFixture)
 {
     this.Competition      = competition;
     this.CompetitionStage = stage;
     this.CompetitionEvent = competitionEvent;
     this.CompetitionRound = round;
     this.PlayerFixture    = playerFixture;
 }
Exemplo n.º 18
0
        public static async Task SerializeAsync(TextWriter target, CompleteScoreboardSummary summary,
                                                IDictionary <TeamId, ScoreboardDetails> teamDetails, CompetitionRound round = 0)
        {
            using (JsonWriter jw = new JsonTextWriter(target))
            {
                jw.CloseOutput = false;

                // write
                await jw.WriteStartObjectAsync().ConfigureAwait(false);

                await jw.WritePropertyNameAsync("summary").ConfigureAwait(false);

                var serializer = JsonSerializer.CreateDefault();
                // serialize
                serializer.Serialize(jw, summary);
                await jw.WritePropertyNameAsync("teams").ConfigureAwait(false);

                serializer.Serialize(jw, teamDetails);
                await jw.WritePropertyNameAsync("round").ConfigureAwait(false);

                await jw.WriteValueAsync((int)round).ConfigureAwait(false);

                await jw.WriteEndObjectAsync().ConfigureAwait(false);

                await jw.FlushAsync().ConfigureAwait(false);
            }
        }