public Models.Squad.Player Convert(Database.Entities.User.FavoritePlayer source, Models.Squad.Player destination, ResolutionContext context) { return(new Models.Squad.Player { Id = source.PlayerId, FirstName = source.Player.FirstName, LastName = source.Player.LastName, KitNumber = source.Player.KitNumber, IsOutOnLoan = source.Player.IsOutOnLoan, IsHereOnLoan = source.Player.IsHereOnLoan, IsCaptain = source.Player.IsCaptain, IsSold = source.Player.IsSold }); }
public async Task <List <Result> > UpdateUserAsync(string userId, Models.User.CRUD.User user) { // user is fetched with user manager due to issue with entity framework (entity is already being tracked...) var currentUser = await _userManager.Users.Include(x => x.NickNames).Include(x => x.FavoritePlayer).Include(x => x.Region).ThenInclude(x => x.Region).FirstOrDefaultAsync(x => x.Id == userId); var currentNick = currentUser.NickNames.Current(); var results = new List <Result>(); if (!string.IsNullOrEmpty(currentNick) && !currentNick.Equals(user.NickName)) { if (!await _dbClient.NickNameIsAlreadyTakenByOtherUserAsync(user.NickName)) { var nickName = new Database.Entities.User.NickName { UserId = userId, Nick = user.NickName, Created = DateTime.Now }; results.Update(await _dbClient.CreateNewNickNameForUserAsync(nickName), ResultMessages.CreateNick); } } if (currentUser.Bio == null && !string.IsNullOrEmpty(user.Bio) || currentUser.Bio != null && !currentUser.Bio.Equals(user.Bio)) { results.Update(await _dbClient.UpdateUserBioAsync(userId, user.Bio), ResultMessages.UpdateBio); } if (!string.IsNullOrEmpty(user.Region)) { if (currentUser.Region?.Region?.Name != user.Region) { results.Update(await _dbClient.UpdateRegionForUserAsync(userId, user.Region), ResultMessages.UpdateRegion); } } else { if (await _dbClient.UserHasRegionSelectedAsync(userId)) { results.Update(await _dbClient.DeleteRegionForUserAsync(userId), ResultMessages.UpdateRegion); } } if (string.IsNullOrEmpty(user.SecludeUntil) && currentUser.SecludedUntil != null) { currentUser.SecludedUntil = null; results.Update(await _dbClient.UpdateUserAsync(currentUser), ResultMessages.RemoveSeclude); } else { if (!string.IsNullOrEmpty(user.SecludeUntil)) { if (Convert.ToDateTime(user.SecludeUntil).Date != Convert.ToDateTime(currentUser.SecludedUntil).Date) { currentUser.SecludedUntil = Convert.ToDateTime(user.SecludeUntil); results.Update(await _dbClient.UpdateUserAsync(currentUser), ResultMessages.CreateSeclude); } } } var currentRoles = await _userManager.GetRolesAsync(currentUser); if (!currentRoles.SequenceEqual(user.Roles)) { var removeResult = await _userManager.RemoveFromRolesAsync(currentUser, currentRoles); var addResult = await _userManager.AddToRolesAsync(currentUser, user.Roles); results.Update(removeResult.Succeeded && addResult.Succeeded, ResultMessages.UpdateRoles); } if (currentUser.FavoritePlayer != null) { if (currentUser.FavoritePlayer.PlayerId == user.FavoritePlayerId) { return(results); } if (await _dbClient.UserHasAFavoritePlayerSelectedAsync(userId)) { results.Update(await _dbClient.DeleteFavoritePlayerConnectionToUserAsync(userId), ResultMessages.RemovedFavoritePlayer); } if (user.FavoritePlayerId <= 0) { return(results); } var favoritePlayer = new Database.Entities.User.FavoritePlayer { PlayerId = user.FavoritePlayerId, UserId = userId }; results.Update(await _dbClient.ConnectFavoritePlayerToUserAsync(favoritePlayer), ResultMessages.CreateFavoritePlayer); } else { if (user.FavoritePlayerId <= 0) { return(results); } var favoritePlayer = new Database.Entities.User.FavoritePlayer { PlayerId = user.FavoritePlayerId, UserId = userId }; results.Update(await _dbClient.ConnectFavoritePlayerToUserAsync(favoritePlayer), ResultMessages.CreateFavoritePlayer); } return(results); }