public async Task <IActionResult> DisableUsers([FromBody] Sync.UserSyncSet syncSet)
        {
            try
            {
                var syncJob = await _db.SyncJobs.FindAsync(syncSet.JobID);

                if (syncJob == null)
                {
                    return(BadRequest(new[] { "Invalid synchronization job identifier." }));
                }

                if (syncJob.Status != Sync.SyncJobStatus.Running)
                {
                    return(BadRequest(new[] { "Invalid synchronization job status: " + syncJob.Status.ToString() }));
                }

                var result = await syncJob.DisableUsersAsync(_userManager, syncSet.Users);

                await _db.SaveChangesAsync();

                if (result != null && result.Any())
                {
                    return(BadRequest(result.ToArray()));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Error disabling users for sync job: { syncSet.JobID }");
                return(BadRequest(new[] { "Error disabling users for sync job." }));
            }

            return(Ok());
        }
        public async Task <IActionResult> UpdateUsers([FromBody] Sync.UserSyncSet syncSet)
        {
            try
            {
                var syncJob = await _db.SyncJobs.FindAsync(syncSet.JobID);

                if (syncJob == null)
                {
                    return(BadRequest(new[] { "Invalid synchronization job identifier." }));
                }

                if (syncJob.Status != Sync.SyncJobStatus.Running)
                {
                    return(BadRequest(new[] { "Invalid synchronization job status: " + syncJob.Status.ToString() }));
                }

                var result = await syncJob.SyncUsersAsync(_userManager, syncSet.Users);

                if (_db.ChangeTracker.HasChanges())
                {
                    await _db.SaveChangesAsync();
                }

                var users      = syncSet.Users;
                var modelUsers = _modelDb.Users.Where(u => users.Any(d => d.ID == u.ID)).ToArray();
                foreach (var updateUser in users.Where(u => modelUsers.Any(mu => mu.ID == u.ID)))
                {
                    var m_user = modelUsers.First(m => m.ID == updateUser.ID);
                    m_user.FirstName    = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.FirstName_Key).Select(cl => cl.Value).FirstOrDefault();
                    m_user.LastName     = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.LastName_Key).Select(cl => cl.Value).FirstOrDefault();
                    m_user.Organization = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.Organization_Key).Select(cl => cl.Value).FirstOrDefault();
                    m_user.PhoneNumber  = updateUser.Claims.Where(cl => cl.Key == Identity.Claims.Phone_Key).Select(cl => cl.Value).FirstOrDefault();
                    m_user.UserName     = updateUser.UserName;
                    m_user.Email        = updateUser.Email;
                }

                if (_modelDb.ChangeTracker.HasChanges())
                {
                    await _modelDb.SaveChangesAsync();
                }

                //add any missing model users
                using (var cmd = _modelDb.Database.GetDbConnection().CreateCommand())
                {
                    cmd.CommandText = @"SELECT u.Id,
ISNULL(u.UserName, '') AS UserName,
ISNULL(u.Email, '') AS Email,
ISNULL(u.PhoneNumber, '') AS PhoneNumber,
ISNULL((SELECT TOP 1 cl.ClaimValue FROM AspNetUserClaims cl WHERE cl.UserId = u.Id AND cl.ClaimType = 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'), '') AS FirstName,
ISNULL((SELECT TOP 1 cl.ClaimValue FROM AspNetUserClaims cl WHERE cl.UserId = u.Id AND cl.ClaimType = 'USER.ORGANIZATION'), '') AS Organization,
ISNULL((SELECT TOP 1 cl.ClaimValue FROM AspNetUserClaims cl WHERE cl.UserId = u.Id AND cl.ClaimType = 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname'), '') AS LastName
FROM AspNetUsers u WHERE NOT EXISTS(SELECT NULL FROM Users mu WHERE mu.ID = u.Id)";

                    await _modelDb.Database.OpenConnectionAsync();

                    using (var reader = await cmd.ExecuteReaderAsync())
                    {
                        while (await reader.ReadAsync())
                        {
                            _modelDb.Users.Add(new ASPE.DQM.Model.User
                            {
                                ID           = reader.GetGuid(0),
                                UserName     = reader.GetString(1),
                                Email        = reader.GetString(2),
                                PhoneNumber  = reader.GetString(3),
                                FirstName    = reader.GetString(4),
                                Organization = reader.GetString(5),
                                LastName     = reader.GetString(6)
                            });
                        }
                    }
                }

                if (_modelDb.ChangeTracker.HasChanges())
                {
                    await _modelDb.SaveChangesAsync();
                }

                if (result != null && result.Any())
                {
                    return(BadRequest(result.ToArray()));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Error updating users for sync job: { syncSet.JobID }");
                return(BadRequest(new[] { "Error updating users for sync job." }));
            }

            return(Ok());
        }