private static void AddTieBreakPoint(TieBreakPoint tieBreakPoint, TieBreak tieBreak) { TieBreakPoint newTieBreakPoint = new TieBreakPoint() { FirstPlayerPoint = tieBreakPoint.FirstPlayerPoint, SecondPlayerPoint = tieBreakPoint.SecondPlayerPoint, TieBreak = tieBreakPoint.TieBreak, TieBreakId = tieBreakPoint.TieBreakId }; tieBreak.TieBreakPoints.Add(newTieBreakPoint); }
/// <summary> /// Add point to the first player of match by the given Id /// </summary> /// <param name="matchId"></param> /// <returns> Task<LiveREsultViewModel> </returns> public async Task <LiveResultViewModel> AddFirstPlayerPoint(int matchId) { Set set = null; Game game = null; Point point = new Point(); TieBreakPoint tieBreakPoint = null; TieBreak tieBreak = null; Match match = await GetCurrentMatch(matchId); set = match.Sets.ToList().LastOrDefault(); game = set.Games.ToList().LastOrDefault(); var lastPoint = game.Points.ToList().LastOrDefault(); PointValue(game, point, lastPoint); if (!match.IsFinished) { if (!set.HasTieBreak) { point.FirstPlayerPoints++; if (((point.FirstPlayerPoints - 2 >= point.SecondPlayerPoints) && point.SecondPlayerPoints >= 3) || (point.FirstPlayerPoints == 4 && point.SecondPlayerPoints <= 2)) { point.FirstPlayerPoints--; //game.Points.Add(point); game.Player = match.FirstPlayer; game.PlayerId = match.FirstPlayerId; game.IsGameFinished = true; set.FirstPlayerGames++; set.Games.Add(game); if ((set.FirstPlayerGames >= 6 && set.SecondPlayerGames <= 4) || set.FirstPlayerGames == 7 && set.SecondPlayerGames == 5) { match.FirstPlayerSets++; set.Player = match.FirstPlayer; set.PlayerId = match.FirstPlayerId; set.IsSetFinished = true; if (match.FirstPlayerSets == 2) { match.IsFinished = true; match.IsActive = false; match.FirstPlayer.Win++; match.SecondPlayer.Loses++; PointsToZero(point); //TODO Add Winner } else { CreateGameAndSet(match); } } else if (set.FirstPlayerGames == 6 && set.SecondPlayerGames == 6) { set.HasTieBreak = true; set.TieBreak = new TieBreak { Set = set, SetId = set.Id, TieBreakPoints = new List <TieBreakPoint>() { new TieBreakPoint() } }; PointsToZero(point); } else { AddNewGame(set); } } else if (point.FirstPlayerPoints == 4 && point.SecondPlayerPoints == 4) { point.FirstPlayerPoints = 3; point.SecondPlayerPoints = 3; game.Points.Add(point); } else { game.Points.Add(point); } } else { tieBreak = await this.context .TieBreaks .Include(t => t.TieBreakPoints) .FirstOrDefaultAsync(t => t.SetId == set.Id); tieBreakPoint = tieBreak.TieBreakPoints.ToList().LastOrDefault(p => p.TieBreakId == tieBreak.Id); tieBreakPoint.FirstPlayerPoint++; if ((tieBreakPoint.FirstPlayerPoint == 7 && tieBreakPoint.SecondPlayerPoint <= 5) || ((tieBreakPoint.FirstPlayerPoint - 2 == tieBreakPoint.SecondPlayerPoint) && tieBreakPoint.SecondPlayerPoint > 5)) { set.FirstPlayerGames++; match.FirstPlayerSets++; set.IsSetFinished = true; set.Player = match.FirstPlayer; set.PlayerId = match.FirstPlayerId; match.Sets.Add(set); if (match.Sets.Where(s => s.Player.Id == set.PlayerId).Count() == 2) { match.IsActive = false; match.IsFinished = true; match.SecondPlayer.Win++; match.FirstPlayer.Loses++; } else { CreateGameAndSet(match); } } AddTieBreakPoint(tieBreakPoint, tieBreak); } } await this.context.SaveChangesAsync(); var r = mapper.Map <LiveResultViewModel>(match); return(r); }