public async Task <IdentityResult> UpdateAsAdmin(ApplicationUserUpdateDto input)
        {
            if (!input.IsUpdateEntry())
            {
                throw new EntityNotFoundException();
            }

            var user = await UserManager.FindByIdAsync(input.Id);

            if (user == null)
            {
                throw new EntityNotFoundException();
            }

            var updateUser = input.MapTo <ApplicationUser>();

            updateUser.UserName = input.Email;
            await UserManager.UpdateAsync(updateUser);

            var userRoles = await UserManager.GetRolesAsync(user.Id);

            input.SelectedRoles = input.SelectedRoles ?? new string[] { };

            var result = await UserManager.AddToRolesAsync(user.Id, input.SelectedRoles.Except(userRoles).ToArray <string>());

            if (!result.Succeeded)
            {
                return(result);
            }
            result = await UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(input.SelectedRoles).ToArray <string>());

            return(result);
        }
        public async Task <IHttpActionResult> Put(ApplicationUserUpdateDto input)
        {
            input.Id = User.Identity.GetUserId();
            var result = await _service.Update(input);

            return(Ok(result));
        }
        public async Task <bool> Update(ApplicationUserUpdateDto input)
        {
            if (!input.IsUpdateEntry())
            {
                throw new EntityNotFoundException();
            }

            var user = await UserManager.FindByIdAsync(input.Id);

            var userRoles = await UserManager.GetRolesAsync(user.Id);

            var userOriginal = UnitOfWork.AppContext.Users.Find(user.Id);

            if (user == null)
            {
                throw new EntityNotFoundException();
            }

            var updateUser = input.MapTo <ApplicationUser>();

            updateUser.Email         = user.Email;
            updateUser.UserName      = user.Email;
            updateUser.PasswordHash  = userOriginal.PasswordHash;
            updateUser.SecurityStamp = userOriginal.SecurityStamp;

            Mapper.Map(updateUser, user);
            await UserManager.UpdateAsync(user);

            //input.SelectedRoles = input.SelectedRoles ?? new string[] { };

            var result = await UserManager.AddToRolesAsync(user.Id, userRoles.ToArray <string>());

            if (!result.Succeeded)
            {
                return(false);
            }

            //result = await UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(input.SelectedRoles).ToArray<string>());

            //if (!result.Succeeded)
            //{
            //    return false;
            //}
            return(true);
        }
        public async Task <IHttpActionResult> PutAsAdmin(ApplicationUserUpdateDto input)
        {
            var result = await _service.Update(input);

            return(Ok(result));
        }