protected override async Task <bool> HandleInternal(SaveRoles request, CancellationToken cancellationToken) { var users = await this._userRepository.GetAll(); var usedRoles = users .SelectMany(u => u.Roles) .ToList(); var allRoles = (await _roleRepository.Get()).ToList(); var missing = allRoles .Where(r => !request.Roles.Select(i => i.Code).Contains(r.Code) && !r.IsSystem) .Select(r => r.Code) .ToList(); var needed = usedRoles.Where(r => missing.Contains(r)).ToList(); if (needed.Count > 0) { var plurarlSuffix = needed.Count == 1 ? String.Empty : "s"; var isOrAre = needed.Count == 1 ? "is" : "are"; var roles = String.Join(", ", needed); return(FailedResponse($"Role{plurarlSuffix} '{roles}' {isOrAre} in use and cannot be deleted!")); } await _roleRepository.DeleteByCode(missing); var newRoles = request .Roles .Where(r => !allRoles.Select(i => i.Code).ToList().Contains(r.Code) && !r.IsSystem) .ToList(); await _roleRepository.AddRoles(newRoles); var existing = request .Roles .Where(r => allRoles.Select(i => i.Code).ToList().Contains(r.Code) && !r.IsSystem) .ToList(); await this._roleRepository.Update(existing); MessageToReturn = "Roles saved!"; return(true); }