public async Task <Result <IImmutableList <GroupMemberModel> > > Handle(GetGroupMembers request, CancellationToken cancellationToken) { var isValid = await _validator.IsValidAsync(request); if (!isValid) { return(Result.Failure <IImmutableList <GroupMemberModel> >("Validation failed")); } var groupMembers = await _context .UsersToGroups .Where(x => x.GroupId == request.GroupId) .Include(x => x.User) .Include(x => x.Group) .Select(x => new { x.User, x.Group }) .Select(x => new GroupMemberModel { Id = x.User.Id, FirstName = x.User.FirstName, LastName = x.User.LastName, IsGroupAdmin = x.Group.AdminId == x.User.Id }) .ToListAsync(cancellationToken); return(groupMembers.ToImmutableList()); }
public async Task <ActionResult <IImmutableList <GroupMemberModel> > > GetGroupMembersAsync([FromRoute] Guid groupId) { var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; var query = new GetGroupMembers(sub, groupId); var result = await _mediator.Send(query); if (result.IsFailure) { return(BadRequest()); } return(Ok(result.Value)); }
private void UpdateGrid() { if (this.cbxGroupList.SelectedIndex > 0) { var ggm = new GetGroupMembers(this._dbo); var groupIndex = this.cbxGroupList.SelectedIndex; var groupId = this._groupList[groupIndex].GroupId; if (this.tgShowAll.IsChecked == true) { var dt = ggm.SelectByGroupId(groupId); this.dg.ItemsSource = dt.DefaultView; } else { var dt = ggm.SelectOnlyApporedByGroupId(groupId); this.dg.ItemsSource = dt.DefaultView; } } else { this.dg.ItemsSource = null; } }
public EditMembersDialogViewModel() { SetGroup = ReactiveCommand.CreateFromObservable <string, GroupObject>(identity => _adFacade.GetGroup(identity)); GetGroupMembers = ReactiveCommand.CreateFromObservable(() => GetGroupMembersImpl(_group.Value)); Search = ReactiveCommand.Create(() => _adFacade.SearchDirectory(_searchQuery, TaskPoolScheduler.Default).Take(1000)); OpenSearchResult = ReactiveCommand.CreateFromTask(() => NavigateToPrincipal(_selectedSearchResult.Properties.Get <string>("name"))); OpenGroupMember = ReactiveCommand.CreateFromTask(() => NavigateToPrincipal(_selectedGroupMember.Properties.Get <string>("name"))); AddToGroup = ReactiveCommand.Create( () => { if (_groupMembers.Contains(_selectedSearchResult) || _membersToAdd.Contains(_selectedSearchResult)) { return; } _membersToRemove.Remove(_selectedSearchResult); _groupMembers.Add(_selectedSearchResult); _membersToAdd.Add(_selectedSearchResult); }, this.WhenAnyValue(vm => vm.SelectedSearchResult).IsNotNull()); RemoveFromGroup = ReactiveCommand.Create( () => { if (_membersToAdd.Contains(_selectedGroupMember)) { _membersToAdd.Remove(_selectedGroupMember); } else { _membersToRemove.Add(_selectedGroupMember); } _groupMembers.Remove(_selectedGroupMember); }, this.WhenAnyValue(vm => vm.SelectedGroupMember).IsNotNull()); Save = ReactiveCommand.CreateFromTask( async() => await SaveImpl(_group.Value, _membersToAdd, _membersToRemove), Observable.CombineLatest(_membersToAdd.CountChanged.StartWith(0), _membersToRemove.CountChanged.StartWith(0), (x, y) => x > 0 || y > 0)); Cancel = ReactiveCommand.Create(() => _close()); _group = SetGroup .ToProperty(this, vm => vm.Group); this.WhenActivated(disposables => { GetGroupMembers .ObserveOnDispatcher() .Subscribe(directoryEntry => _groupMembers.Add(directoryEntry)) .DisposeWith(disposables); Search .Do(_ => _searchResults.Clear()) .Switch() .ObserveOnDispatcher() .Subscribe(directoryEntry => _searchResults.Add(directoryEntry)) .DisposeWith(disposables); Save .SelectMany(groups => groups.Any() ? _messages.Handle(new MessageInfo(MessageType.Warning, $"The following messages were generated:\n{string.Join(Environment.NewLine, groups)}")) : Observable.Return(0)) .ObserveOnDispatcher() .Do(_ => _close()) .Subscribe() .DisposeWith(disposables); Observable.Merge <(string Title, string Message)>( SetGroup.ThrownExceptions.Select(ex => (("Could not load group", ex.Message))), GetGroupMembers.ThrownExceptions.Select(ex => (("Could not get members", ex.Message))), Search.ThrownExceptions.Select(ex => (("Could not complete search", ex.Message))), OpenSearchResult.ThrownExceptions.Select(ex => (("Could not open AD object", ex.Message))), OpenGroupMember.ThrownExceptions.Select(ex => (("Could not open AD object", ex.Message))), AddToGroup.ThrownExceptions.Select(ex => (("Could not add member", ex.Message))), RemoveFromGroup.ThrownExceptions.Select(ex => (("Could not remove member", ex.Message))), Save.ThrownExceptions.Select(ex => (("Could not save changes", ex.Message))), Cancel.ThrownExceptions.Select(ex => (("Could not close dialog", ex.Message)))) .SelectMany(dialogContent => _messages.Handle(new MessageInfo(MessageType.Error, dialogContent.Message, dialogContent.Title))) .Subscribe() .DisposeWith(disposables); }); }