public MatchHeaderInfo[] BuildMatches(CompetitionType competitionType, CompetitionDetails competitionDetails) { var helper = new KnockoutMatchProvisioningEngineHelper(); var pMatches = helper.ProvisionMatches(competitionType.PlayersCount, competitionType.QualifyingToFinalPlayersCount, competitionDetails.Players.Length); var fMatches = pMatches.Where(m => m.SectionCode == "MD").ToArray(); var qMatches = pMatches.Where(m => m.SectionCode == "Q").ToArray(); var rankedPlayersCount = competitionType.PlayersCount - competitionType.QualifyingToFinalPlayersCount; var qPlayersCount = competitionDetails.Players.Length - rankedPlayersCount; if (qPlayersCount <= competitionType.QualifyingToFinalPlayersCount) { qPlayersCount = 0; } var matches = new List<MatchHeaderInfo>(); var finalPlayersCount = PlayersCountCalculator.CalculatePlayersCount(rankedPlayersCount); var qualifyingPlayersCount = PlayersCountCalculator.CalculatePlayersCount(qPlayersCount); var finalSectionMatches = CreateSectionMatches(finalPlayersCount, CompetitionSection.Final).ToArray(); var qualifyingSectionMatches = CreateSectionMatches(qualifyingPlayersCount, CompetitionSection.Qualifying, competitionType.QualifyingToFinalPlayersCount).ToArray(); var consolationSectionMatches = CreateConselationMatches(finalPlayersCount); for (var i = 0; i < fMatches.Length; i++) { finalSectionMatches[i].Player1Code = fMatches[i].Player1Code; finalSectionMatches[i].Player2Code = fMatches[i].Player2Code; } for (var i = 0; i < qMatches.Length; i++) { qualifyingSectionMatches[i].Player1Code = qMatches[i].Player1Code; qualifyingSectionMatches[i].Player2Code = qMatches[i].Player2Code; } matches.AddRange(qualifyingSectionMatches); matches.AddRange(finalSectionMatches); matches.AddRange(consolationSectionMatches); return matches.ToArray(); }
public UpdatePlayerPositionInfo[] PositionPlayers(CompetitionDetails details, CompetitionSection section) { var helper = new KnockoutMatchProvisioningEngineHelper(); var engine = new KnockoutCalculationEngine(); var output = engine.Calculate(details.Type.PlayersCount, details.Type.QualifyingToFinalPlayersCount, details.Players.Length); var sectionCodes = section == CompetitionSection.Final ? helper.GenerateMainDrawCodesQueue(output.TotalMainDrawPlayers, output.ActualMainDrawPlayers, details.Type.QualifyingToFinalPlayersCount) : helper.GenerateQualifyingDrawCodes(output.TotalQualifyingPlayers, output.ActualQualifyingPlayers); var sectionPlayers = details.Players.Where(p => p.Section == section); var items = new List <UpdatePlayerPositionInfo>(); if (sectionCodes.Count > 0 && sectionPlayers.Any()) { var map = new Dictionary <string, int>(); foreach (var competitionPlayer in sectionPlayers) { map[sectionCodes.Dequeue()] = competitionPlayer.Id; } var sectionMatches = details.Matches.Where(m => m.Section == section); foreach ( var match in sectionMatches.Where(m => m.Player1Code.NotNullOrEmpty() || m.Player2Code.NotNullOrEmpty()) ) { int playerId; if (match.Player1Code.NotNullOrEmpty()) { if (map.TryGetValue(match.Player1Code, out playerId)) { items.Add(new UpdatePlayerPositionInfo() { MatchId = match.Id, PlayerId = playerId, Position = 0 }); } } if (match.Player2Code.NotNullOrEmpty()) { if (map.TryGetValue(match.Player2Code, out playerId)) { items.Add(new UpdatePlayerPositionInfo() { MatchId = match.Id, PlayerId = playerId, Position = 1 }); } } } } return(items.ToArray()); if (details.Type.QualifyingPlayersCount > 0 && section == CompetitionSection.Qualifying) { items.AddRange(this.GetQualifyingPlayersPositions(details)); } if (section == CompetitionSection.Final) { items.AddRange(this.GetFinalPlayersPositions(details)); } return((from item in items where item.IsNotNull <UpdatePlayerPositionInfo>() select item).ToArray <UpdatePlayerPositionInfo>()); }
public UpdatePlayerPositionInfo[] PositionPlayers(CompetitionDetails details, CompetitionSection section) { var helper = new KnockoutMatchProvisioningEngineHelper(); var engine = new KnockoutCalculationEngine(); var output = engine.Calculate(details.Type.PlayersCount, details.Type.QualifyingToFinalPlayersCount, details.Players.Length); var sectionCodes = section == CompetitionSection.Final ? helper.GenerateMainDrawCodesQueue(output.TotalMainDrawPlayers, output.ActualMainDrawPlayers, details.Type.QualifyingToFinalPlayersCount) : helper.GenerateQualifyingDrawCodes(output.TotalQualifyingPlayers, output.ActualQualifyingPlayers); var sectionPlayers = details.Players.Where(p => p.Section == section); var items = new List<UpdatePlayerPositionInfo>(); if (sectionCodes.Count > 0 && sectionPlayers.Any()) { var map = new Dictionary<string, int>(); foreach (var competitionPlayer in sectionPlayers) { map[sectionCodes.Dequeue()] = competitionPlayer.Id; } var sectionMatches = details.Matches.Where(m => m.Section == section); foreach ( var match in sectionMatches.Where(m => m.Player1Code.NotNullOrEmpty() || m.Player2Code.NotNullOrEmpty()) ) { int playerId; if (match.Player1Code.NotNullOrEmpty()) { if (map.TryGetValue(match.Player1Code, out playerId)) { items.Add(new UpdatePlayerPositionInfo() { MatchId = match.Id, PlayerId = playerId, Position = 0 }); } } if (match.Player2Code.NotNullOrEmpty()) { if (map.TryGetValue(match.Player2Code, out playerId)) { items.Add(new UpdatePlayerPositionInfo() { MatchId = match.Id, PlayerId = playerId, Position = 1 }); } } } } return items.ToArray(); if (details.Type.QualifyingPlayersCount > 0 && section == CompetitionSection.Qualifying) { items.AddRange(this.GetQualifyingPlayersPositions(details)); } if (section == CompetitionSection.Final) { items.AddRange(this.GetFinalPlayersPositions(details)); } return (from item in items where item.IsNotNull<UpdatePlayerPositionInfo>() select item).ToArray<UpdatePlayerPositionInfo>(); }