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(); } }
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(); }