public async Task SavePlayerAsync(Player player)
        {
            var existingPlayerForGamertag = await _context.Players.SingleOrDefaultAsync(p => p.Gamertag == player.Gamertag);

            if (existingPlayerForGamertag != null && existingPlayerForGamertag.UserId != player.UserId)
            {
                // Can't use a gamertag from another user
                _logger.LogDebug("Save player - gamertag already in use: UserId '{0}', Gamertag '{1}'", player.UserId, player.Gamertag);
                throw new Exception("gamertag is already in use");
            }

            // add only if the player does not exist
            PlayerEntity entity = player.UserId == null
                ? null
                : await _context.Players.SingleOrDefaultAsync(p => p.Gamertag == player.Gamertag);

            if (entity == null)
            {
                _logger.LogDebug("Add player: UserId '{0}', Gamertag '{1}'", player.UserId, player.Gamertag);
                await _context.Players.AddAsync(new PlayerEntity
                {
                    UserId    = player.UserId,
                    Gamertag  = player.Gamertag,
                    Country   = player.Country,
                    CustomTag = player.CustomTag,
                });

                await _context.SaveChangesAsync();
            }
            else
            {
                if (player.Gamertag != entity.Gamertag)
                {
                    // Can't change gamertag
                    _logger.LogDebug("Save player - cannot change gamertag: UserId '{0}', Gamertag '{1}'", player.UserId, player.Gamertag);
                    throw new Exception("Cannot change gamertag");
                }
                _logger.LogDebug("Update player: UserId '{0}', Gamertag '{1}'", player.UserId, player.Gamertag);
                entity.Gamertag  = player.Gamertag;
                entity.Country   = player.Country;
                entity.CustomTag = player.CustomTag;
                await _context.SaveChangesAsync();
            }
        }
Exemple #2
0
        private async Task AddPlayerToGroupAsync(string groupName, string gamertag)
        {
            if (string.IsNullOrEmpty(groupName))
            {
                throw new ArgumentException($"{nameof(groupName)} is required");
            }
            if (string.IsNullOrEmpty(gamertag))
            {
                throw new ArgumentException($"{nameof(gamertag)} is required");
            }

            PlayerEntity dbPlayer = await _context.Players
                                    .Where(p => p.Gamertag == gamertag)
                                    .FirstOrDefaultAsync();

            if (dbPlayer == null)
            {
                throw new ArgumentException($"player '{gamertag}' does not exist", nameof(gamertag));
            }

            GroupEntity dbGroup = await _context.Groups
                                  .Where(g => g.Name == groupName)
                                  .FirstOrDefaultAsync();

            if (dbGroup == null)
            {
                throw new ArgumentException($"group '{groupName}' does not exist", nameof(groupName));
            }

            await _context.PlayerGroups.AddAsync(new PlayerGroupEntity
            {
                Gamertag  = gamertag,
                GroupName = groupName
            });

            await _context.SaveChangesAsync();
        }