private Task <IEnumerable <TournamentGameRound> > GenerateGames(TournamentPostRequest game) { return(Task.Factory.StartNew(() => { if (!game.Players?.Any() ?? false) { return null; } var namesOfAvailablePlayers = game.Players.Select(p => p.Id).ToList(); int maxPlayersNeeded = 4 * game.NumberOfGames; var newRealList = GenerateAwesomeList(maxPlayersNeeded, namesOfAvailablePlayers); Stack <string> realList = new Stack <string>(newRealList); var games = new List <Game>(); for (int i = 0; realList.Any() && i < game.NumberOfGames; i++) { realList.TryPop(out string player_red_1); realList.TryPop(out string player_blue_1); realList.TryPop(out string player_red_2); realList.TryPop(out string player_blue_2); Game newGame = new Game(null, player_red_1, player_red_2, player_blue_1, player_blue_2, DateTime.UtcNow, "", -1, -1); // Don't return games, where there isn't at least 1 player on both teams if (player_blue_1 != null) { games.Add(newGame); } } return Enumerable.Repeat(new TournamentGameRound(games), 1); })); }
public async Task <ActionResult <TournamentGameRound[]> > RequestGames([FromBody] TournamentPostRequest request) { var games = await GenerateGames(request); return(games.ToArray()); }