public Task HandleAsync(TeamRoleUpdatedEvent @event, CancellationToken cancellationToken)
        {
            _cache.Remove(_cacheKey.FindTeamRole
                          (
                              @event.TeamId,
                              @event.RoleId
                          ));

            return(Task.CompletedTask);
        }
Exemple #2
0
        public async Task <FindTeamRoleProjection> HandleAsync(FindTeamRoleQuery query,
                                                               CancellationToken cancellationToken)
        {
            if (_authenticatedUserAccessor.AuthenticatedUser.Teams.All(t => t.Id != query.TeamId))
            {
                throw new UserNotAddedToTeamException
                      (
                          _authenticatedUserAccessor.AuthenticatedUser.Id,
                          query.TeamId
                      );
            }

            var role = await _cache.GetOrSetAsync
                       (
                _cacheKey.FindTeamRole(query.TeamId, query.RoleId),
                async() => await _teamsCollection
                .Find(t => t.Id == query.TeamId && t.Roles.Any(r => r.Id == query.RoleId))
                .Project(t => t.Roles.SingleOrDefault(r => r.Id == query.RoleId))
                .SingleOrDefaultAsync(cancellationToken)
                       );

            if (role == null)
            {
                throw new RoleNotFoundException
                      (
                          query.RoleId,
                          query.TeamId
                      );
            }

            return(new FindTeamRoleProjection
                   (
                       role.Id.ToString(),
                       role.Name,
                       role.Permissions.Select(p => p.ToQueryPermission()).Where(p => p != null).ToList()
                   ));
        }