public async Task <Tuple <bool, string[]> > CreateUserAsync(UserDTO user, IEnumerable <string> roles, string password)
        {
            ObjectMapper    mapper  = new ObjectMapper();
            ApplicationUser appUser = mapper.ConvertUserToIdentityUser(user);


            try
            {
                var result = await _appUserManager.CreateAsync(appUser, password);

                if (!result.Succeeded)
                {
                    return(Tuple.Create(false, result.Errors.ToArray()));
                }

                appUser = await _appUserManager.FindByNameAsync(appUser.UserName);

                try
                {
                    if (roles != null)
                    {
                        result = await _appUserManager.AddToRolesAsync(appUser.Id, roles.ToArray());
                    }

                    if (appUser != null)
                    {
                        _appUserManager.SetLockoutEnabled(appUser.Id, true);
                    }
                }
                catch
                {
                    await DeleteUserAsync(appUser);

                    throw;
                }

                if (!result.Succeeded)
                {
                    await DeleteUserAsync(appUser);

                    return(Tuple.Create(false, result.Errors.ToArray()));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(Tuple.Create(true, new string[] { appUser.Id }));
        }
        public async Task <Tuple <bool, string[]> > UpdateUserAsync(UserDTO user, IEnumerable <string> roles)
        {
            ObjectMapper    mapper  = new ObjectMapper();
            ApplicationUser appUser = mapper.ConvertUserToIdentityUser(user);

            var result = await _appUserManager.UpdateAsync(appUser);

            if (!result.Succeeded)
            {
                return(Tuple.Create(false, result.Errors.ToArray()));
            }


            if (roles != null)
            {
                var userRoles = await _appUserManager.GetRolesAsync(user.Id);

                var rolesToRemove = userRoles.Except(roles).ToArray();
                var rolesToAdd    = roles.Except(userRoles).Distinct().ToArray();

                if (rolesToRemove.Any())
                {
                    result = await _appUserManager.RemoveFromRolesAsync(user.Id, rolesToRemove);

                    if (!result.Succeeded)
                    {
                        return(Tuple.Create(false, result.Errors.ToArray()));
                    }
                }

                if (rolesToAdd.Any())
                {
                    result = await _appUserManager.AddToRolesAsync(user.Id, rolesToAdd);

                    if (!result.Succeeded)
                    {
                        return(Tuple.Create(false, result.Errors.ToArray()));
                    }
                }
            }

            return(Tuple.Create(true, new string[] { }));
        }