Example #1
0
        public Result Handle(AddBetterToTournament command)
        {
            Tournament tournament = _tournamentRepository.GetTournamentById(command.TournamentId);

            if (tournament == null)
            {
                return(Result.Failure($"Could not add better to tournament. Tournament ({ command.TournamentId }) not found."));
            }

            User user = _userRepository.GetUserById(command.UserId);

            if (user == null)
            {
                return(Result.Failure($"Could not add better to tournament with given user ({ command.UserId }). Tournament ({ command.TournamentId }) not found."));
            }

            Better better = _tournamentRepository.AddBetterToTournament(tournament, user);

            if (better == null)
            {
                return(Result.Failure($"Could not add better to tournament with given user ({ command.UserId })."));
            }

            _tournamentRepository.Save();
            return(Result.Success());
        }
Example #2
0
        private void PlaceBetsOnAvailableMatchesInGroup(List <Better> betters, GroupBase group)
        {
            Random random       = new Random(133742069);
            int    matchCounter = 0;

            foreach (Domain.Match match in group.Matches)
            {
                if (match.GetPlayState() != PlayStateEnum.NotBegun)
                {
                    continue;
                }

                Better better = betters[0];

                if (matchCounter % 4 != 0)
                {
                    better.PlaceMatchBet(match, match.Player1);
                }

                for (int betterIndex = 1; betterIndex < betters.Count; ++betterIndex)
                {
                    Player player = random.Next(2) == 0 ? match.Player1 : match.Player2;

                    better = betters[betterIndex];
                    better.PlaceMatchBet(match, player);
                }

                matchCounter++;
            }
        }
Example #3
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (WeatherId != 0)
            {
                hash ^= WeatherId.GetHashCode();
            }
            if (Name.Length != 0)
            {
                hash ^= Name.GetHashCode();
            }
            if (VisitingNum != 0)
            {
                hash ^= VisitingNum.GetHashCode();
            }
            if (Best != 0)
            {
                hash ^= Best.GetHashCode();
            }
            if (Better != 0)
            {
                hash ^= Better.GetHashCode();
            }
            if (Same != 0)
            {
                hash ^= Same.GetHashCode();
            }
            return(hash);
        }
Example #4
0
        private static bool ParametersAreValid(Better better, Match match, Player player)
        {
            bool invalidBetterGiven = better == null;

            if (invalidBetterGiven)
            {
                // LOG Error: Cannot create match bet because given better was invalid
                return(false);
            }

            bool invalidMatchGiven = match == null;

            if (invalidMatchGiven)
            {
                // LOG Error: Cannot create match bet because given match was invalid
                return(false);
            }

            bool invalidPlayerGiven = player == null;

            if (invalidPlayerGiven)
            {
                // LOG Error: Cannot create match bet because given player was invalid
                return(false);
            }

            return(true);
        }
Example #5
0
        public void GivenBettersPlacesMatchBets(Table table)
        {
            foreach (TableRow row in table.Rows)
            {
                TestUtilities.ParseBetterMatchBetPlacements(row, out string betterName, out int roundIndex, out int groupIndex, out int matchIndex, out string playerName);

                RoundBase round = createdRounds[roundIndex];
                GroupBase group = createdGroups[groupIndex];
                Match     match = group.Matches[matchIndex];

                bool betterNameIsNotEmpty = betterName.Length > 0;
                bool playerNameIsNotEmpty = playerName.Length > 0;

                if (betterNameIsNotEmpty && playerNameIsNotEmpty)
                {
                    Better better = round.Tournament.GetBetterByName(betterName);
                    Player player = match.FindPlayer(playerName);

                    better.Should().NotBeNull();
                    player.Should().NotBeNull();

                    better.PlaceMatchBet(match, player).Should().NotBeNull();
                }
            }
        }
Example #6
0
        public TournamentTests()
        {
            tournament   = Tournament.Create("GSL 2019");
            bracketRound = tournament.AddBracketRound() as BracketRound;

            user   = User.Create("Stålberto");
            better = tournament.AddBetter(user);
        }
Example #7
0
        public static ApplicableFunction FindBest(List <ApplicableFunction> candidates)
        {
            if (candidates == null || candidates.Count == 0)
            {
                return(null);
            }

            if (candidates.Count == 1)
            {
                return(candidates[0]);
            }

            ApplicableFunction best = null;

            Better[,] betterMap = new Better[candidates.Count, candidates.Count];

            for (int i = 0; i < candidates.Count; i++)
            {
                bool isBest = true;

                for (int j = 0; j < candidates.Count; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }

                    Better better = betterMap[i, j];
                    if (better == Better.Undefined)
                    {
                        better          = ApplicableFunction.GetBetterCandidate(candidates[i], candidates[j]);
                        betterMap[i, j] = better;
                        betterMap[j, i] = Invert(better);
                    }

                    if (better != Better.Left)
                    {
                        isBest = false;
                        break;
                    }
                }

                if (isBest)
                {
                    if (best == null)
                    {
                        best = candidates[i];
                    }
                    else
                    {
                        return(null);
                    }
                }
            }

            return(best);
        }
Example #8
0
        public void CanGetBetterInTournamentByBetterName()
        {
            Better fetchedBetter = tournament.GetBetterByName(better.User.Name);

            fetchedBetter.Should().NotBeNull();
            fetchedBetter.User.Should().NotBeNull();
            fetchedBetter.Id.Should().Be(better.Id);
            fetchedBetter.User.Name.Should().Be(better.User.Name);
        }
Example #9
0
        public void CanGetBetterInTournamentByBetterNameNoMatterLetterCasing()
        {
            Better fetchedBetter = tournament.GetBetterByName(better.User.Name.ToLower());

            fetchedBetter.Should().NotBeNull();
            fetchedBetter.User.Should().NotBeNull();
            fetchedBetter.Id.Should().Be(better.Id);
            fetchedBetter.User.Name.Should().Be(better.User.Name);
        }
Example #10
0
        public void MatchBetIsRemovedWhenMatchLayoutIsChangedInOneMatch()
        {
            Better better = tournament.AddBetter(user);

            better.PlaceMatchBet(match, match.Player1);

            PlayerSwitcher.SwitchMatchesOn(match.Player1, match.Player2);

            better.Bets.Should().BeEmpty();
        }
Example #11
0
        public void CannotPlaceMatchBetOnMatchThatIsOngoing()
        {
            Better better = tournament.AddBetter(user);

            SystemTimeMocker.SetOneSecondAfter(match.StartDateTime);

            better.PlaceMatchBet(match, match.Player1);

            better.Bets.Should().BeEmpty();
        }
Example #12
0
        public void CanCreateBetter()
        {
            Better better = tournament.AddBetter(user);

            better.Id.Should().NotBeEmpty();
            better.User.Should().NotBeNull();
            better.Bets.Should().BeEmpty();
            better.TournamentId.Should().Be(tournament.Id);
            better.Tournament.Should().Be(tournament);
        }
Example #13
0
        public bool RemoveBetterFromTournamentById(Tournament tournament, Guid betterId)
        {
            Better better = tournament.GetBetterById(betterId);

            if (better != null)
            {
                return(tournament.RemoveBetter(better));
            }

            return(false);
        }
Example #14
0
        static Better Invert(Better b)
        {
            switch (b)
            {
            case Better.Left: return(Better.Right);

            case Better.Right: return(Better.Left);

            default: return(b);
            }
        }
Example #15
0
 public MatchBetTests()
 {
     user       = User.Create("Stålberto");
     tournament = Tournament.Create("GSL 2019");
     better     = tournament.AddBetter(user);
     round      = tournament.AddBracketRound() as BracketRound;
     tournament.RegisterPlayerReference("Maru");
     tournament.RegisterPlayerReference("Stork");
     group      = round.Groups.First() as BracketGroup;
     firstMatch = group.Matches.First();
 }
Example #16
0
        public void TournamentDoesNotKeepBettersThatFailedToBeCreated()
        {
            Tournament tournament = Tournament.Create("ASUS ROG 2012");
            User       user       = User.Create("Guggelito");

            tournament.AddBetter(user);
            Better better = tournament.AddBetter(user);

            better.Should().BeNull();
            tournament.Betters.Should().HaveCount(1);
        }
Example #17
0
        public Better AddBetterToTournament(Tournament tournament, User user)
        {
            Better better = tournament.AddBetter(user);

            if (better != null)
            {
                _slaskContext.Attach(better.User);
            }

            return(better);
        }
Example #18
0
        public bool RemoveBetterFromTournamentByName(Tournament tournament, string betterName)
        {
            Better better = tournament.GetBetterByName(betterName);

            if (better != null)
            {
                return(tournament.RemoveBetter(better));
            }

            return(false);
        }
Example #19
0
 public static BetterDto ConvertToBetterDto(Better better)
 {
     return(new BetterDto()
     {
         Id = better.Id,
         UserId = better.User.Id,
         Name = better.User.Name,
         MatchBets = better.Bets.OfType <MatchBet>()
                     .Select(matchBet => ConvertToMatchBetDto(matchBet))
                     .ToList()
     });
 }
Example #20
0
        /// <summary>
        /// Receive a SocketMessage and parse it out to gather the information about a specified player
        /// </summary>
        /// <param name="sm"></param>
        /// <returns></returns>
        public (String, Embed) ViewPlayer(SocketMessage sm)
        {
            Int64  playerId;
            String playerName;

            if (sm.MentionedUsers.Count == 1)
            {
                playerId   = (Int64)sm.MentionedUsers.First().Id;
                playerName = sm.MentionedUsers.First().Username;
            }
            else
            {
                playerId   = (Int64)sm.Author.Id;
                playerName = sm.Author.Username;
            }

            var player = _bettingGame.Betters.Find(b => b.Id == playerId);

            if (player == null)
            {
                player = new Better
                {
                    Id          = playerId,
                    Name        = playerName,
                    Points      = 1000,
                    BetsWon     = 0,
                    WonBetsList = new Dictionary <int, string>()
                };

                _bettingGame.Betters.Add(player);
                SerializeData(_bettingGame);
            }

            EmbedBuilder eb = new EmbedBuilder();

            eb.WithTitle(player.Name);
            eb.WithColor(Color.Purple);
            eb.AddField("Points: ", player.Points);
            eb.AddField("Bets Won: ", player.BetsWon);

            if (player.WonBetsList.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                foreach (var bet in player.WonBetsList)
                {
                    sb.Append($"{bet.Key} - {bet.Value}\n");
                }

                eb.AddField("List of Bets Won: ", sb);
            }

            return("", eb.Build());
        }
Example #21
0
        public void CanPlaceMatchBetOnMatch()
        {
            Better better = tournament.AddBetter(user);

            better.PlaceMatchBet(match, match.Player1);

            better.Bets.Should().HaveCount(1);
            better.Bets.First().Should().NotBeNull();
            MatchBet matchBet = better.Bets.First() as MatchBet;

            ValidateMatchBet(matchBet, better, match, match.Player1);
        }
Example #22
0
        public void CannotPlaceMatchBetOnMatchThatIsFinished()
        {
            Better better = tournament.AddBetter(user);

            SystemTimeMocker.SetOneSecondAfter(match.StartDateTime);

            int winningScore = (int)Math.Ceiling(match.BestOf / 2.0);

            match.Player1.IncreaseScore(winningScore);

            better.PlaceMatchBet(match, match.Player1);

            better.Bets.Should().BeEmpty();
        }
Example #23
0
        public void CannotPlaceMatchBetOnWithoutMatch()
        {
            Better better = tournament.AddBetter(user);

            round.SetPlayersPerGroupCount(3);
            tournament.RegisterPlayerReference("Taeja");

            group = round.Groups.First();
            Match incompleteMatch = group.Matches.Last();

            better.PlaceMatchBet(null, incompleteMatch.Player1);

            better.Bets.Should().BeEmpty();
        }
Example #24
0
        public void CanOnlyAddUserAsBetterOncePerTournament()
        {
            InitializeUsersAndBetters();

            using (UserRepository userRepository = CreateuserRepository())
            {
                using (TournamentRepository tournamentRepository = CreateTournamentRepository())
                {
                    Tournament tournament = tournamentRepository.GetTournamentByName(tournamentName);

                    Better better = tournamentRepository.AddBetterToTournament(tournament, userRepository.GetUserByName("Stålberto"));
                    better.Should().BeNull();
                }
            }
        }
Example #25
0
 void CreateBetterlist(List <string> betters, ISubmittedBets sb, IResults actual)
 {
     foreach (var better in betters)
     {
         var score = new ScoringSystem(sb.GetSingleBet(better), actual);
         var bet   = new Better()
         {
             Name = better, Score = score.GetTotal()
         };
         var achievements = new AchievementSystem(sb.GetSingleBet(better), actual);
         bet.Achievements = achievements.Achievements;
         bet.RowClass     = "normal";
         Betters.Add(bet);
     }
 }
Example #26
0
        public static MiscellaneousBet Create(Better better, Player player)
        {
            bool anyParameterIsInvalid = !ParametersAreValid(better, player);

            if (anyParameterIsInvalid)
            {
                return(null);
            }

            return(new MiscellaneousBet
            {
                BetterId = better.Id,
                PlayerId = player.Id,
            });
        }
Example #27
0
 void CreateBetterlist(List <string> betters, ISubmittedBets sb, IResultCollection rc)
 {
     foreach (var better in betters)
     {
         var score    = new ScoringSystem(sb.GetSingleBet(better), rc.Current);
         var oldscore = new ScoringSystem(sb.GetSingleBet(better), rc.Previous);
         var bet      = new Better()
         {
             Name = better, Score = score.GetTotal(), OldScore = oldscore.GetTotal()
         };
         var achievements = new AchievementSystem(sb.GetSingleBet(better), rc.Current);
         bet.Achievements = achievements.Achievements;
         bet.RowClass     = "normal";
         Betters.Add(bet);
     }
 }
Example #28
0
        public void CannotReplaceMatchBetOnMatchThatIsOngoing()
        {
            Better better = tournament.AddBetter(user);

            better.PlaceMatchBet(match, match.Player1);
            SystemTimeMocker.SetOneSecondAfter(match.StartDateTime);

            better.PlaceMatchBet(match, match.Player2);

            better.Bets.Should().HaveCount(1);
            better.Bets.First().Should().NotBeNull();

            MatchBet matchBet = better.Bets.First() as MatchBet;

            ValidateMatchBet(matchBet, better, match, match.Player1);
        }
Example #29
0
        public bool BetterPlacesMatchBetOnMatch(Guid tournamentId, Guid matchId, string betterName, string playerName)
        {
            Tournament tournament = GetTournamentById(tournamentId);

            if (tournament == null)
            {
                /* LOG Issue: Could not place match bet; tournament with id '{tournamentId}' does not exist. */
                return(false);
            }

            Better better = tournament.GetBetterByName(betterName);

            if (better == null)
            {
                /* LOG Issue: Could not place match bet; better with name '{betterName}' does not exist in tournament. */
                return(false);
            }

            foreach (RoundBase round in tournament.Rounds)
            {
                foreach (GroupBase group in round.Groups)
                {
                    foreach (Match match in group.Matches)
                    {
                        if (match.Id == matchId)
                        {
                            Player player = match.FindPlayer(playerName);

                            if (player == null)
                            {
                                /* LOG Issue: Could not place match bet; sought player is not participating in sought match. */
                                return(false);
                            }

                            MatchBet matchBet = better.PlaceMatchBet(match, player);

                            return(matchBet != null);
                        }
                    }
                }
            }

            return(false);
        }
Example #30
0
        public void MatchBetIsRemovedWhenMatchLayoutIsChangedInTwoMatches()
        {
            Better better = tournament.AddBetter(user);

            round.SetPlayersPerGroupCount(4);
            tournament.RegisterPlayerReference("Taeja");
            tournament.RegisterPlayerReference("Rain");
            group = round.Groups.First();

            Match firstMatch  = group.Matches[0];
            Match secondMatch = group.Matches[1];

            better.PlaceMatchBet(firstMatch, firstMatch.Player1);
            better.PlaceMatchBet(secondMatch, secondMatch.Player1);

            PlayerSwitcher.SwitchMatchesOn(firstMatch.Player1, secondMatch.Player1);

            better.Bets.Should().BeEmpty();
        }
Example #31
0
        public static ApplicableFunction FindBest(List<ApplicableFunction> candidates)
        {
            if (candidates == null || candidates.Count == 0)
                return null;

            if (candidates.Count == 1)
                return candidates[0];

            ApplicableFunction best = null;
            Better[,] betterMap = new Better[candidates.Count, candidates.Count];

            for (int i = 0; i < candidates.Count; i++)
            {
                bool isBest = true;

                for (int j = 0; j < candidates.Count; j++)
                {
                    if (i == j)
                        continue;

                    Better better = betterMap[i, j];
                    if (better == Better.Undefined)
                    {
                        better = ApplicableFunction.GetBetterCandidate(candidates[i], candidates[j]);
                        betterMap[i, j] = better;
                        betterMap[j, i] = Invert(better);
                    }

                    if (better != Better.Left)
                    {
                        isBest = false;
                        break;
                    }
                }

                if (isBest)
                {
                    if (best == null)
                        best = candidates[i];
                    else
                        return null;
                }
            }

            return best;
        }
Example #32
0
 static Better Invert(Better b)
 {
     switch (b)
     {
         case Better.Left: return Better.Right;
         case Better.Right: return Better.Left;
         default: return b;
     }
 }