public Task HandleAsync(TeamRoleUpdatedEvent @event, CancellationToken cancellationToken) { _cache.Remove(_cacheKey.FindTeamRole ( @event.TeamId, @event.RoleId )); return(Task.CompletedTask); }
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() )); }