public async Task <KeyValuePair <bool, string> > UpdateUser(int userId, UserToUpdateDto userToUpdateDto)
        {
            var user = await _unitOfWork.Users.GetById(userId);

            if (user == null)
            {
                return(new KeyValuePair <bool, string>(false, "Specified user doesn't exist."));
            }

            var country = await _unitOfWork.Countries.GetCountryWithCities(userToUpdateDto.Country);

            var city = await _unitOfWork.Cities.GetCityById(userToUpdateDto.City, userToUpdateDto.Country);

            if (city == null || country == null || !country.Cities.Contains(city))
            {
                return(new KeyValuePair <bool, string>(false, "Specified country or city doesn't exist!"));
            }

            user.City    = city;
            user.Country = country;
            user.Email   = userToUpdateDto.Email;
            if (await _unitOfWork.Complete())
            {
                return(new KeyValuePair <bool, string>(true, "User successfully updated."));
            }

            return(new KeyValuePair <bool, string>(false, "User can't be updated."));
        }
Exemple #2
0
        public async Task <IActionResult> UpdateUser(int userId, UserToUpdateDto userToUpdateDto)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            return(Ok(await _usersService.UpdateUser(userId, userToUpdateDto)));
        }
        public async Task UpdateUser_ShouldUpdate()
        {
            // Arrange
            var responseMessage = "User successfully updated.";
            var userId          = 1;
            var firstname       = "Jelena";
            var lastname        = "Ralevic";
            var countryId       = 2;
            var cityId          = 3;

            var user = new PowerUser()
            {
                Id        = userId,
                Firstname = firstname,
                Lastname  = lastname
            };

            var userToUpdateDto = new UserToUpdateDto()
            {
                Country = countryId,
                City    = cityId
            };

            var city = new City()
            {
                Id        = cityId,
                Name      = "Beograd",
                CountryId = countryId,
            };

            var country = new Country()
            {
                Id     = countryId,
                Name   = "Srbija",
                Cities = new List <City>()
                {
                    city
                }
            };

            _unitOfWorkMock.Setup(x => x.Users.GetById(It.IsAny <int>()))
            .ReturnsAsync(user);

            _unitOfWorkMock.Setup(x => x.Countries.GetCountryWithCities(countryId))
            .ReturnsAsync(country);

            _unitOfWorkMock.Setup(x => x.Cities.GetCityById(cityId, countryId))
            .ReturnsAsync(city);

            _unitOfWorkMock.Setup(x => x.Complete())
            .ReturnsAsync(true);
            // Act
            var result = await _sut.UpdateUser(userId, userToUpdateDto);

            // Assert
            Assert.Equal(responseMessage, result.Value);
        }
Exemple #4
0
        public async Task <IActionResult> Put(int id, UserToUpdateDto user)
        {
            UserDto updatedUser = await _service.UpdateUser(user, id);

            if (updatedUser == null)
            {
                return(StatusCode(404));
            }
            return(StatusCode(200, updatedUser));
        }
Exemple #5
0
        public async Task <IActionResult> EditUser(int id, UserToUpdateDto userToUpdateDto)
        {
            var user = await _context.Users.FirstOrDefaultAsync(u => u.Id == id);

            var userToreturn = _mapper.Map(userToUpdateDto, user);

            await _context.SaveChangesAsync();

            return(NoContent());
        }
        public async Task <UserDto> UpdateUserByIdAsync(UserToUpdateDto user, int id)
        {
            GetClient();
            UserDto             updatedUser = null;
            HttpResponseMessage response    = await client.PutAsJsonAsync($"api/users/{id}", user);

            if (response.IsSuccessStatusCode)
            {
                updatedUser = await response.Content.ReadAsAsync <UserDto>();
            }
            return(updatedUser);
        }
Exemple #7
0
        public async Task <IActionResult> UpdateUser(int id, UserToUpdateDto userToUpdateDto)
        {
            var user = await accountManager.GetUser(id);

            user = mapper.Map <UserToUpdateDto, User>(userToUpdateDto, user);

            if (await database.Complete())
            {
                return(NoContent());
            }

            throw new AccountException("Konto nie zostało zaktualizowane");
        }
Exemple #8
0
        public async Task <IActionResult> UpdateUser([FromBody] UserToUpdateDto dto)
        {
            if (dto.Username != User.FindFirst(ClaimTypes.Name).Value)
            {
                return(Unauthorized());
            }
            var result = await repo.UpdateUser(dto);

            if (result)
            {
                return(Ok());
            }
            return(BadRequest());
        }
Exemple #9
0
        public async Task <IActionResult> UpdateUser(int id, UserToUpdateDto userToUpdateDto)
        {
            if (id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }
            var userFromRepo = await _repo.GetUser(id);

            _mapper.Map(userToUpdateDto, userFromRepo);
            if (await _repo.SaveAll())
            {
                return(NoContent());
            }
            throw new Exception($"Updating user {id} failed in save");
        }
        public ActionResult UpdateUser(Guid userId, UserToUpdateDto user)
        {
            var getUser = repo.GetUser(userId);

            if (getUser == null)
            {
                return(NotFound());
            }

            var userEntity = mapper.Map(user, getUser);

            repo.UpdateUser(userEntity);
            repo.Save();
            return(NoContent());
        }
Exemple #11
0
        public async Task <ActionResult <bool> > updateUser(UserToUpdateDto user)
        {
            User updatedUser = new User();

            foreach (var field in user.GetType().GetProperties())
            {
                PropertyInfo pi = updatedUser.GetType().GetProperty(field.Name);
                if (pi != null && field.Name != "Token" && field.Name != "Type")
                {
                    pi.SetValue(updatedUser, field.GetValue(user));
                }
            }

            bool updated = await _userService.updateUserFromDB(updatedUser);

            return(Ok(updated));
        }
        public async Task <IActionResult> UpdateUser(int id, UserToUpdateDto userToUpdateDto)
        {
            // has to match with whats in token
            if (id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            var userFromRepo = await _repo.GetUser(id);

            _mapper.Map(userToUpdateDto, userFromRepo);
            if (await _repo.SaveAll())
            {
                // because its the appropriate response
                return(NoContent());
            }
            throw new Exception($"Updating user {id} failed on save");
        }
        public async Task <ActionResult <UserToUpdateDto> > UpdateUser(UserToUpdateDto userUpdate, string id)
        {
            var user = await _userManager.FindByIdAsync(id);

            user.Birthday    = userUpdate.Birthday;
            user.FirstName   = userUpdate.FirstName;
            user.DisplayName = userUpdate.DisplayName;
            user.LastName    = userUpdate.LastName;
            user.Phone       = userUpdate.Phone;
            user.Gender      = userUpdate.Gender;
            var result = await _userManager.UpdateAsync(user);

            if (result.Succeeded)
            {
                return(Ok(_mapper.Map <AppUser, UserToUpdateDto>(user)));
            }
            return(BadRequest("Problem updating the user"));
        }
Exemple #14
0
        public async Task <IActionResult> UpdateUser(string id, UserToUpdateDto userToUpdate)
        {
            var user = await _repo.GetUserAsync(id);

            if (id.Equals(userToUpdate.Id))
            {
                BadRequest("You are not permitted");
            }

            _mapper.Map(userToUpdate, user);

            if (await _repo.SaveAll())
            {
                return(Ok(user));
            }

            throw new Exception("Article failed to update");
        }
Exemple #15
0
        public async Task <IActionResult> Put(int id, [FromBody] UserToUpdateDto userUpdateDto)
        {
            var userFromRepo = await _repo.GetUser(id);

            if (userFromRepo == null)
            {
                return(BadRequest("The user doesn't exist"));
            }


            //questionUpdateDto.Id = id;
            var user        = _mapper.Map <User>(userUpdateDto);
            var updatedUser = await _repo.UpdateUser(user);

            var userToReturn = _mapper.Map <UserForClientDto>(updatedUser);

            return(Ok(userToReturn));
        }
Exemple #16
0
        public async Task <IActionResult> UpdateUser(int id, UserToUpdateDto user)
        {
            if (id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            var userToUpdate = await _datingRepo.GetUser(id);

            _autoMapper.Map(user, userToUpdate);

            if (await _datingRepo.SaveAll())
            {
                return(NoContent());
            }

            throw new Exception("failed to update user");
        }
        public async Task <ActionResult <UserToUpdateDto> > UpdateInfoUser(UserToUpdateDto userUpdate)
        {
            var user = await _userManager.FindByEmailFromClaimsPriciple(HttpContext.User);

            user.Birthday    = userUpdate.Birthday;
            user.FirstName   = userUpdate.FirstName;
            user.DisplayName = userUpdate.DisplayName;
            user.LastName    = userUpdate.LastName;
            user.Phone       = userUpdate.Phone;
            user.Gender      = userUpdate.Gender;
            var result = await _userManager.UpdateAsync(user);

            if (result.Succeeded)
            {
                return(Ok(_mapper.Map <AppUser, UserToUpdateDto>(user)));
            }
            return(BadRequest("Problem updating the user"));
        }
        public async Task <IActionResult> UpdateUser(string id, UserToUpdateDto userToUpdate)
        {
            if (!id.Equals(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            //var userFromRepo = await _repo.GetUser(id, false);
            var userFromRepo = await _userManager.FindByEmailAsync(userToUpdate.Email);

            _mapper.Map(userToUpdate, userFromRepo);
            var user = _mapper.Map <UserForDetailed>(userFromRepo);

            if (await _repo.SaveAll())
            {
                return(Ok(user));
            }

            throw new Exception("Failed to save");
        }
Exemple #19
0
        public async Task <IActionResult> PartiallyUpdateUser(Guid id, [FromBody] JsonPatchDocument <UserManipulationDto> patch)
        {
            if (patch is null)
            {
                return(BadRequest());
            }

            UserDto         outerFacingModelUser;
            UserToUpdateDto dto = new UserToUpdateDto();

            patch.ApplyTo(dto);


            User resourceEntity = await _userQuery.ExecuteGetResourceByIdWithTracking(id);

            if (resourceEntity is null)
            {
                outerFacingModelUser = _userCommand.ExecuteAddResource(dto, id);

                if (!(await _userCommand.ExecuteSaveAsync()))
                {
                    throw new Exception("There was a problem with saving the user resource");
                }

                outerFacingModelUser
                .ShapeData(null)
                .TryAdd("links", CreateLinks(id, null));

                return(CreatedAtRoute("GetUser", new { id = id }, outerFacingModelUser));
            }

            _userCommand.ExecuteUpdateResource(resourceEntity, dto);

            if (!(await _userCommand.ExecuteSaveAsync()))
            {
                throw new Exception("There was a problem with saving the user resource");
            }

            Response.Headers.Add("Location", _urlHelper.Link("GetUser", new { id = resourceEntity.Id }));
            return(NoContent());
        }
        public async Task <UserDto> UpdateUser(UserToUpdateDto updatedUser, int userId)
        {
            User userToUpdate = await _context.Users.Include(x => x.Address).FirstOrDefaultAsync(x => x.Id == userId);

            if (userToUpdate != null)
            {
                userToUpdate.FirstName           = updatedUser.FirstName;
                userToUpdate.LastName            = updatedUser.LastName;
                userToUpdate.Email               = updatedUser.Email.ToLower();
                userToUpdate.PhoneNumber         = updatedUser.PhoneNumber;
                userToUpdate.Address.Country     = updatedUser.Address.Country;
                userToUpdate.Address.City        = updatedUser.Address.City;
                userToUpdate.Address.PostalCode  = updatedUser.Address.PostalCode;
                userToUpdate.Address.Street      = updatedUser.Address.Street;
                userToUpdate.Address.HouseNumber = updatedUser.Address.HouseNumber;
                userToUpdate.Address.BoxNumber   = updatedUser.Address.BoxNumber;

                return(ConvertToUserDto(await UpdateAsync(userToUpdate)));
            }
            return(null);
        }
Exemple #21
0
        public async Task <IActionResult> UpdateUser([FromRoute] Guid id, [FromBody] UserToUpdateDto dto)
        {
            if (dto is null)
            {
                return(BadRequest());
            }
            UserDto outerFacingModelUser;

            User resourceEntity = await _userQuery.ExecuteGetResourceByIdWithTracking(id);

            if (resourceEntity is null)
            {
                outerFacingModelUser = _userCommand.ExecuteAddResource(dto, id);

                if (!(await _userCommand.ExecuteSaveAsync()))
                {
                    throw new Exception("There was a problem with saving the user resource");
                }

                outerFacingModelUser
                .ShapeData(null)
                .TryAdd("links", CreateLinks(id, null));

                return(CreatedAtRoute("GetUser", new { id = id }, outerFacingModelUser));
            }


            //if it does update the user with tracking
            _userCommand.ExecuteUpdateResource(resourceEntity, dto);

            //then save changes
            if (!(await _userCommand.ExecuteSaveAsync()))
            {
                throw new Exception("There was a problem with saving the user resource");
            }

            Response.Headers.Add("Location", _urlHelper.Link("GetUser", new { id = resourceEntity.Id }));
            return(NoContent());
        }
        public async Task UpdateUser_ShouldNotUpdate_WhenCityIsInvalid()
        {
            // Arrange
            var responseMessage = "Specified country or city doesn't exist!";
            var userId          = 1;
            var firstname       = "Jelena";
            var lastname        = "Ralevic";
            var countryId       = 2;
            var cityId          = 3;

            var user = new PowerUser()
            {
                Id        = userId,
                Firstname = firstname,
                Lastname  = lastname
            };

            var userToUpdateDto = new UserToUpdateDto()
            {
                Country = countryId,
                City    = cityId
            };

            _unitOfWorkMock.Setup(x => x.Users.GetById(It.IsAny <int>()))
            .ReturnsAsync(user);

            _unitOfWorkMock.Setup(x => x.Countries.GetCountryWithCities(countryId))
            .ReturnsAsync(It.IsAny <Country>());

            _unitOfWorkMock.Setup(x => x.Cities.GetCityById(cityId, countryId))
            .ReturnsAsync(() => null);
            // Act
            var result = await _sut.UpdateUser(userId, userToUpdateDto);

            // Assert
            Assert.Equal(responseMessage, result.Value);
        }
Exemple #23
0
        public static void TestFillBy()
        {
            var registrationTime = DateTime.Now.AddYears(-1);
            var userDto          = new UserToUpdateDto
            {
                Login = "******",
                Name  = "Jack"
            };

            var userEntity = new UserEntity
            {
                Id               = 777,
                Login            = "******",
                RegistrationTime = registrationTime,
            };

            // userEntity дополняется значениями из userDto
            Mapper.Map(userDto, userEntity);

            Assert.AreEqual(777, userEntity.Id);
            Assert.AreEqual("SuperAdmin", userEntity.Login);
            Assert.AreEqual("Jack", userEntity.Name);
            Assert.AreEqual(registrationTime, userEntity.RegistrationTime);
        }
Exemple #24
0
        public static void TestFillByReturnSyntax()
        {
            var registrationTime = DateTime.Now.AddYears(-1);
            var userDto          = new UserToUpdateDto
            {
                Login = "******",
                Name  = "Jack"
            };

            // Mapper.Map возвращает ссылку на второй аргумент.
            // Поэтому можно вторым аргументом передавать только что созданный объект,
            // а потом получать ссылку на него как возвращаемое значение Map.
            var userEntity = Mapper.Map(userDto, new UserEntity
            {
                Id               = 777,
                Login            = "******",
                RegistrationTime = registrationTime,
            });

            Assert.AreEqual(777, userEntity.Id);
            Assert.AreEqual("SuperAdmin", userEntity.Login);
            Assert.AreEqual("Jack", userEntity.Name);
            Assert.AreEqual(registrationTime, userEntity.RegistrationTime);
        }
        public async Task <bool> UpdateUser(UserToUpdateDto userToUpdateDto)
        {
            Tuple <bool, string> result = await Exist(userToUpdateDto.Username);

            if (result.Item1)
            {
                if (result.Item2 == "Admin")
                {
                    var user = await context.Admins.FirstAsync(x => x.Username == userToUpdateDto.Username);

                    byte[] passwordHash, passwordSalt;
                    user.FirstName = userToUpdateDto.FirstName;
                    user.LastName  = userToUpdateDto.LastName;
                    if (!String.IsNullOrEmpty(userToUpdateDto.Password))
                    {
                        CreatePasswordHash(userToUpdateDto.Password, out passwordHash, out passwordSalt);
                        user.PasswordHash = passwordHash;
                        user.PasswordSalt = passwordSalt;
                    }
                    user.Gender = user.Gender == "female" ? Gender.Female : Gender.Male;
                    await context.SaveChangesAsync();

                    return(true);
                }
                else if (result.Item2 == "Host")
                {
                    var user = await context.Hosts.FirstOrDefaultAsync(x => x.Username == userToUpdateDto.Username);

                    byte[] passwordHash, passwordSalt;
                    user.FirstName = userToUpdateDto.FirstName;
                    user.LastName  = userToUpdateDto.LastName;
                    if (!String.IsNullOrEmpty(userToUpdateDto.Password))
                    {
                        CreatePasswordHash(userToUpdateDto.Password, out passwordHash, out passwordSalt);
                        user.PasswordHash = passwordHash;
                        user.PasswordSalt = passwordSalt;
                    }
                    user.Gender = user.Gender == "female" ? Gender.Female : Gender.Male;
                    await context.SaveChangesAsync();

                    return(true);
                }
                else
                {
                    var user = await context.Guests.FirstOrDefaultAsync(x => x.Username == userToUpdateDto.Username);

                    byte[] passwordHash, passwordSalt;
                    user.FirstName = userToUpdateDto.FirstName;
                    user.LastName  = userToUpdateDto.LastName;
                    if (!String.IsNullOrEmpty(userToUpdateDto.Password))
                    {
                        CreatePasswordHash(userToUpdateDto.Password, out passwordHash, out passwordSalt);
                        user.PasswordHash = passwordHash;
                        user.PasswordSalt = passwordSalt;
                    }
                    user.Gender = userToUpdateDto.Gender == "female" ? Gender.Female : Gender.Male;
                    await context.SaveChangesAsync();

                    return(true);
                }
            }

            return(false);
        }
Exemple #26
0
        static void Main()
        {
            //Create address
            AddressToCreateDto createdAddress = new AddressToCreateDto
            {
                Country     = "Belgium",
                City        = "Brussel",
                PostalCode  = "1000",
                Street      = "testStraat",
                HouseNumber = "20"
            };

            //Create user
            UserToCreateDto createdUser = new UserToCreateDto
            {
                FirstName   = "Mich",
                LastName    = "dg",
                Email       = "*****@*****.**",
                PhoneNumber = "+3256798487",
                Psw         = "hallo",
                Address     = createdAddress
            };

            //Update address
            AddressToUpdateDto updatedAddress = new AddressToUpdateDto
            {
                Country     = "Belgium",
                City        = "Brussel",
                PostalCode  = "1000",
                Street      = "testStraat1",
                HouseNumber = "35"
            };

            //Update user
            UserToUpdateDto updatedUser = new UserToUpdateDto
            {
                FirstName   = "Michael",
                LastName    = "DG",
                Email       = "*****@*****.**",
                PhoneNumber = "+3256798489",
                Address     = updatedAddress
            };

            //Login
            UserToLoginDto login = new UserToLoginDto
            {
                Email    = "*****@*****.**",
                Password = "******"
            };

            //Create company
            CompanyToCreateDto createdCompany = new CompanyToCreateDto
            {
                Name    = "Microsoft1",
                Address = createdAddress
            };

            //Update company
            CompanyToUpdateDto updatedCompany = new CompanyToUpdateDto
            {
                Name    = "Microsoft 2",
                Address = updatedAddress
            };

            //Create companyrole
            CompanyRoleToCreateDto createdCompanyRole = new CompanyRoleToCreateDto
            {
                Name           = "CompanyRole1",
                Description    = "It's just a test",
                IsDefault      = true,
                ManageCompany  = true,
                ManageUsers    = false,
                ManageProjects = true,
                ManageRoles    = true
            };

            //Update companyrole
            CompanyRoleToUpdateDto updatedCompanyRole = new CompanyRoleToUpdateDto
            {
                Name           = "CompanyRole1Updated",
                Description    = "It's just a test for something",
                IsDefault      = true,
                ManageCompany  = true,
                ManageUsers    = true,
                ManageProjects = true,
                ManageRoles    = true
            };

            //Create project
            ProjectToCreateDto createdProject = new ProjectToCreateDto
            {
                CompanyID   = 1,
                Name        = "Tim",
                Description = "desc"
            };

            //Update project
            ProjectToUpdateDto updatedProject = new ProjectToUpdateDto
            {
                CompanyID   = 2,
                Name        = "Kevin",
                Description = "desc 2"
            };


            //Testen API calls
            UserServices        userServices        = new UserServices();
            CompanyServices     companyServices     = new CompanyServices();
            ProjectServices     projectServices     = new ProjectServices();
            CompanyRoleServices companyRoleServices = new CompanyRoleServices();
            LogServices         logServices         = new LogServices();
            SessionServices     sessionServices     = new SessionServices();

            UserDto        user1 = new UserDto();
            CompanyDto     c     = new CompanyDto();
            CompanyRoleDto cr    = new CompanyRoleDto();
            ProjectDto     p     = new ProjectDto();


            //Userservices  //OK

            //user1 = userServices.GetUserByIdAsync(1).GetAwaiter().GetResult();
            //List<UserDto> userlist = userServices.GetAllUsersAsync().GetAwaiter().GetResult();
            //user1 = userServices.CreateUserAsync(createdUser).GetAwaiter().GetResult();
            //user1 = userServices.UpdateUserByIdAsync(updatedUser, 1).GetAwaiter().GetResult();
            //user1 = userServices.DeleteUserByIdAsync(3).GetAwaiter().GetResult();
            //List<LogDto> user = userServices.GetAllUserLogsAsync(1).GetAwaiter().GetResult();
            //List<UserDto> users = userServices.GetUserByEmailAsync("*****@*****.**").GetAwaiter().GetResult();
            //List<LogDto> lk = userServices.GetAllUserLogsAsync(5).GetAwaiter().GetResult();


            //Sessionservices  //OK

            //string str = sessionServices.CreateSession(login);
            //string str = sessionServices.DeleteSessionAsync().GetAwaiter().GetResult();


            //Companyservices  //OK

            //List<CompanyDto> companylist = companyServices.GetAllCompaniesAsync().GetAwaiter().GetResult();
            //c = companyServices.GetCompanyByIdAsync(1).GetAwaiter().GetResult();
            //c = companyServices.CreateCompanyAsync(createdCompany).GetAwaiter().GetResult();
            //c = companyServices.UpdateCompanyByIdAsync(updatedCompany, 1).GetAwaiter().GetResult();
            //List<UserDto> cl = companyServices.GetUsersFromCompanyByIdAsync(1).GetAwaiter().GetResult();
            //bool b = companyServices.AddUserToCompanyByIdAsync(1, 8).GetAwaiter().GetResult();


            //CompanyRoleservices  //OK

            //cr = companyRoleServices.CreateCompanyRoleAsync(createdCompanyRole, 1).GetAwaiter().GetResult();
            //List<CompanyRoleDto> crlist = companyRoleServices.GetAllCompanyRolesAsync(1).GetAwaiter().GetResult();
            //cr = companyRoleServices.GetCompanyRoleByIdAsync(1, 3).GetAwaiter().GetResult();
            //cr = companyRoleServices.UpdateCompanyRoleByIdAsync(updatedCompanyRole, 1, 3).GetAwaiter().GetResult();


            //Projectservices  //OK

            //bool bp = projectServices.UpdateProjectByIdAsync(updatedProject, 1).GetAwaiter().GetResult();
            //List<ProjectDto> projects = companyServices.GetAllCompanyProjectsAsync(1).GetAwaiter().GetResult();
            //List<ProjectDto> projects = userServices.GetAllUserProjectsAsync(1).GetAwaiter().GetResult();
            //bool pu = projectServices.RemoveUserToProjectAsync(1, 1).GetAwaiter().GetResult();
            //bool u = projectServices.AddUserToProjectAsync(1, "*****@*****.**").GetAwaiter().GetResult();
            //bool u = projectServices.RemoveUserToProjectAsync(1, 7).GetAwaiter().GetResult();
        }
        public async Task <ActionResult <UsersWithRolesToReturnDto> > UpdateUser(string id, UserToUpdateDto userToUpdate)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(NotFound(new ApiResponse(404)));
            }

            var userFromDb = await _context.Users.SingleOrDefaultAsync(p => p.Id == id);

            if (userFromDb == null)
            {
                return(NotFound(new ApiResponse(404)));
            }

            try
            {
                if (userFromDb.Email != userToUpdate.Email)
                {
                    if (CheckEmailExistsAsync(userToUpdate.Email).Result.Value)
                    {
                        return(BadRequest(new ApiResponse(400, "Email address is in use!")));
                    }

                    userFromDb.Email           = userToUpdate.Email;
                    userFromDb.NormalizedEmail = userToUpdate.Email.ToUpper();
                }

                userFromDb.UserName           = userToUpdate.UserName;
                userFromDb.NormalizedUserName = userToUpdate.UserName.ToUpper();

                userFromDb.DisplayName = userToUpdate.DisplayName;
                userFromDb.PhoneNumber = userToUpdate.PhoneNumber;

                bool isLockedOut = await CheckUserIsLockedOut(userFromDb);

                if (isLockedOut)
                {
                    if (userToUpdate.LockoutEnd.HasValue)
                    {
                        userFromDb.LockoutEnd = userToUpdate.LockoutEnd;
                    }
                    else
                    {
                        userFromDb.LockoutEnd = DateTime.Now.AddYears(100);
                    }
                }

                // Update roles list
                List <RolesListOfSelectedUser> appRoles = userToUpdate.RolesList;
                List <string> new_Roles = new List <string>();

                foreach (var itemRole in appRoles)
                {
                    if (itemRole.SelectedRole)
                    {
                        new_Roles.Add(itemRole.Name);
                    }
                }

                if (new_Roles.Count < 1)
                {
                    return(BadRequest(new ApiResponse(400, "Please select at least one role.")));
                }

                var old_Roles = await _userManager.GetRolesAsync(userFromDb);

                var result = await _userManager.RemoveFromRolesAsync(userFromDb, old_Roles);

                if (!result.Succeeded)
                {
                    return(BadRequest(new ApiResponse(400, "Failed to remove old roles.")));
                }

                result = await _userManager.AddToRolesAsync(userFromDb, new_Roles);

                if (!result.Succeeded)
                {
                    return(BadRequest(new ApiResponse(400, "Failed to add new roles.")));
                }

                // Without this row, return will be zero even though record has been updated into Database successfully.
                _context.Entry(userFromDb).State = EntityState.Modified;

                var completed = await Complete();

                if (completed <= 0)
                {
                    return(BadRequest(new ApiResponse(400, "Problem in Update user!")));
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(BadRequest(new ApiResponse(400, "Problem in Update user! " + ex.Message)));
            }
        }