Beispiel #1
0
        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());
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
 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;
     }
 }
Beispiel #4
0
        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);
            });
        }