public void Close() { var calculator = ResultsCalculator.Calculate(_evaluation.Decisions); if (calculator.GetForgiveVotes() > calculator.GetPunishVotes()) { // todo: forgive _evaluation.Match.Status = Status.Active; foreach (var user in _evaluation.Match.MatchUsers) { user.SetFreeze(false); } } else if (calculator.GetForgiveVotes() <= calculator.GetPunishVotes()) { //todo: punish } _evaluation.Complete = true; _evaluation.Decisions //.Where(x => x.Vote == VoteResults.Winner()) .Select(x => x.User) .ToList() .ForEach(x => { x.Reputation += 2; }); }
public async Task <Unit> Handle(CloseCompleteEvaluationCommand request, CancellationToken cancellationToken) { var evaluation = request.Evaluation; if (evaluation.Decisions.Count <= 0) { evaluation.Expiry = DateTime.Now.AddDays(1); await _ctx.SaveChangesAsync(cancellationToken); return(new Unit()); } var host = evaluation.Match.GetHost(); var opponent = evaluation.Match.GetOpponent(); var calcResult = ResultsCalculator.Calculate(evaluation.Decisions); var winner = calcResult.GetWinner(); if (winner == Winner.Draw) { host.SetDraw(10).AwardExp(10); opponent.SetDraw(10).AwardExp(10); } else if (winner == Winner.Host) { host.SetWinner(10).AwardExp(12); opponent.SetLoser(10).AwardExp(8); } else if (winner == Winner.Opponent) { host.SetLoser(10).AwardExp(8); opponent.SetWinner(10).AwardExp(12); } host.User.Hosting--; opponent.User.Joined--; evaluation.Complete = true; evaluation.Match.Status = Status.Complete; evaluation.Match.LastUpdate = DateTime.Now; evaluation.Match.Finished = evaluation.Match.LastUpdate.GetFinishTime(); evaluation.Decisions .Select(x => x.User) .ToList() .ForEach(user => { user.Reputation += 2; user.AwardExp(2); }); await _ctx.SaveChangesAsync(cancellationToken); return(new Unit()); }
public void RecognizesDraw() { var decisions = new List <Decision> { new Decision { Vote = 0, Weight = 1 }, new Decision { Vote = 1, Weight = 1 }, }; var resultsCalculator = ResultsCalculator.Calculate(decisions); Assert.Equal(Winner.Draw, resultsCalculator.GetWinner()); }
public async Task <DecisionResultViewModel> Handle(GetVoteResultsQuery request, CancellationToken cancellationToken) { var decisions = await _ctx.Decisions .Where(x => x.EvaluationId == request.EvaluationId) .ToListAsync(cancellationToken: cancellationToken); var results = ResultsCalculator.Calculate(decisions); return(new DecisionResultViewModel { HostVotes = results.GetHostVotes(), HostPercent = results.GetHostPercent(), OpponentVotes = results.GetOpponentVotes(), OpponentPercent = results.GetOpponentPercent(), Winner = (int)results.GetWinner(), }); }
public void Close() { var host = _evaluation.Match.GetHost(); var opponent = _evaluation.Match.GetOpponent(); var winner = ResultsCalculator.Calculate(_evaluation.Decisions).GetWinner(); if (winner == Winner.Draw) { host.SetDraw(10).AwardExp(10); opponent.SetDraw(10).AwardExp(10); } else if (winner == Winner.Host) { host.SetWinnerAndLock(10).AwardExp(12); opponent.SetLoserAndLock(10).AwardExp(8); } else if (winner == Winner.Opponent) { host.SetLoserAndLock(10).AwardExp(8); opponent.SetWinnerAndLock(10).AwardExp(12); } host.User.Hosting--; opponent.User.Joined--; _evaluation.Complete = true; _evaluation.Match.Status = Status.Complete; _evaluation.Match.LastUpdate = DateTime.Now; _evaluation.Match.Finished = _evaluation.Match.LastUpdate.GetFinishTime(); _evaluation.Decisions .Select(x => x.User) .ToList() .ForEach(user => { user.Reputation += 2; user.AwardExp(2); }); }
public void CountsWinningPercentageForOpponent() { var resultsCalculator = ResultsCalculator.Calculate(_decisions); Assert.Equal(67, resultsCalculator.GetOpponentPercent()); }
public void CountsWinningPercentageForHost() { var resultsCalculator = ResultsCalculator.Calculate(_decisions); Assert.Equal(33, resultsCalculator.GetHostPercent()); }
public void CountsNumberOfVotesForOpponent() { var resultsCalculator = ResultsCalculator.Calculate(_decisions); Assert.Equal(2, resultsCalculator.GetOpponentVotes()); }