internal async Task <(List <PlayerVM>, bool)> CreatePlayersAsync(List <string> playerNames, string userId)
        {
            var playerNamesLower = playerNames.Select(x => x.ToLower()).ToList();

            var allPlayerNames = await context.Players
                                 .Where(p => p.CompanyId == userId)
                                 .Select(p => p.Name.ToLower())
                                 .ToListAsync();

            var badPlayerNames = allPlayerNames.Intersect(playerNamesLower).ToArray();
            var badPlayers     = new List <PlayerVM>();

            if (badPlayerNames.Length > 0)
            {
                foreach (var name in badPlayerNames)
                {
                    badPlayers.Add(
                        new PlayerVM
                    {
                        PlayerName = name
                    });
                }
                return(badPlayers, false);
            }

            var newPlayers = new List <EntityEntry <Players> >();

            foreach (var playerName in playerNames)
            {
                if (playerName != "")
                {
                    var newPlayer = await context.Players.AddAsync(new Players
                    {
                        Name      = playerName,
                        CompanyId = userId,
                        Score     = 0
                    });

                    newPlayers.Add(newPlayer);
                }
            }

            await context.SaveChangesAsync();

            var newToLeaderboard = newPlayers.Select(p => new PlayerVM
            {
                PlayerName = p.Entity.Name,
                PlayerId   = p.Entity.Id,
                Score      = p.Entity.Score
            }).ToList();

            return(newToLeaderboard, true);
        }
示例#2
0
        internal async Task FinalizeTournamentAsync(FinalizeTournamentVM vm, string userId)
        {
            var tournament = await context.Tournaments.Where(t => t.CompanyId == userId).SingleOrDefaultAsync(t => t.Id == vm.TournamentId);

            tournament.IsCompleted = true;
            var winner = await context.Players.Where(p => p.CompanyId == userId).SingleOrDefaultAsync(p => p.Id == vm.WinnerPlayerId);

            if (winner != null)
            {
                winner.Score += vm.WinnerScore;
            }

            var second = await context.Players.Where(p => p.CompanyId == userId).SingleOrDefaultAsync(p => p.Id == vm.SecondPlayerId);

            if (second != null)
            {
                second.Score += vm.SecondScore;
            }


            await context.SaveChangesAsync();
        }