Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="queryRequest"></param>
        /// <returns></returns>
        public async Task <QueryResult> Execute(QueryRequest queryRequest)
        {
            QueryResult result = null;

            try
            {
                _executionContextManager.CurrentFor(TenantId.Development, Dolittle.Execution.CorrelationId.New(), ClaimsPrincipal.Current.ToClaims());

                var queryType = _typeFinder.GetQueryTypeByName(queryRequest.GeneratedFrom);
                var query     = _container.Get(queryType) as IQuery;

                PopulateProperties(queryRequest, queryType, query);

                _logger.Trace($"Executing runtime query coordinator");
                result = await _queryCoordinator.Execute(query, new PagingInfo());

                if (result.Success)
                {
                    AddClientTypeInformation(result);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, $"Error executing query : '{queryRequest.NameOfQuery}'");
                result = new QueryResult
                {
                    Exception = ex,
                    QueryName = queryRequest.NameOfQuery
                };
            }

            return(result);
        }
Example #2
0
        public ActionResult Handle([FromBody] QueryRequest queryRequest)
        {
            _executionContextConfigurator.ConfigureFor(_tenantResolver.Resolve(HttpContext.Request), Dolittle.Execution.CorrelationId.New(), ClaimsPrincipal.Current.ToClaims());
            QueryResult queryResult = null;

            try
            {
                _logger.Information($"Executing query : {queryRequest.NameOfQuery}");
                var queryType = _typeFinder.GetQueryTypeByName(queryRequest.GeneratedFrom);
                var query     = _container.Get(queryType) as IQuery;

                PopulateProperties(queryRequest, queryType, query);

                queryResult = _queryCoordinator.Execute(query, new PagingInfo());
                if (queryResult.Success)
                {
                    AddClientTypeInformation(queryResult);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, $"Error executing query : '{queryRequest.NameOfQuery}'");
                queryResult = new QueryResult {
                    Exception = ex
                };
            }

            var content = new ContentResult();

            content.Content     = _serializer.ToJson(queryResult, SerializationOptions.CamelCase);
            content.ContentType = "application/json";
            return(content);
        }
Example #3
0
        public QueryResult Execute(QueryDescriptor descriptor, PagingInfo paging)
        {
            try
            {
                _logger.Information($"Executing query : {descriptor.NameOfQuery}");
                var queryType = _typeFinder.GetQueryTypeByName(descriptor.GeneratedFrom);
                var query     = _container.Get(queryType) as IQuery;

                PopulateProperties(descriptor, queryType, query);

                var result = _queryCoordinator.Execute(query, paging);
                if (result.Success)
                {
                    AddClientTypeInformation(result);
                }
                return(result);
            }
            catch (Exception ex)
            {
                _logger.Error(ex, $"Error executing query : '{descriptor.NameOfQuery}'");
                return(new QueryResult {
                    Exception = ex
                });
            }
        }
        /// <summary>
        /// Handles a <see cref="QueryRequest" /> from the <see cref="HttpRequest.Body" /> and writes the <see cref="QueryResult" /> to the <see cref="HttpResponse" />.
        /// </summary>
        /// <param name="context">The <see cref="HttpContext" />.</param>
        /// <returns>A task representing the asynchronous operation.</returns>
        public async Task Handle(HttpContext context)
        {
            QueryRequest queryRequest = null;

            try
            {
                queryRequest = await context.RequestBodyFromJson <QueryRequest>().ConfigureAwait(false);

                _logger.Information("Executing query : {Query}", queryRequest.NameOfQuery);
                var queryType  = _typeFinder.GetQueryTypeByName(queryRequest.GeneratedFrom);
                var query      = _container.Get(queryType) as IQuery;
                var properties = queryType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty).ToDictionary(p => p.Name.ToLowerInvariant(), p => p);
                CopyPropertiesFromRequestToQuery(queryRequest, query, properties);

                var result = await _queryCoordinator.Execute(query, new PagingInfo()).ConfigureAwait(false);

                if (result.Success)
                {
                    AddClientTypeInformation(result);
                }

                await context.RespondWithStatusCodeAndResult(StatusCodes.Status200OK, result, SerializationOptions.CamelCase).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                }
                var queryName = queryRequest?.NameOfQuery ?? "Could not resolve query name";
                _logger.Error(ex, "Could not handle query request for the '{QueryName}' query", queryName);
                await context.RespondWithStatusCodeAndResult(
                    StatusCodes.Status200OK,
                    new QueryResult
                {
                    Exception = ex,
                    QueryName = queryName
                }).ConfigureAwait(false);
            }
        }
Example #5
0
        public async Task <IActionResult> Handle([FromBody] QueryRequest queryRequest)
        {
            var         content     = new ContentResult();
            QueryResult queryResult = null;

            try
            {
                _executionContextConfigurator.ConfigureFor(_tenantResolver.Resolve(HttpContext.Request), Dolittle.Execution.CorrelationId.New(), ClaimsPrincipal.Current.ToClaims());
                _logger.Information($"Executing query : {queryRequest.NameOfQuery}");
                var queryType = _typeFinder.GetQueryTypeByName(queryRequest.GeneratedFrom);
                var query     = _container.Get(queryType) as IQuery;

                var properties = queryType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty).ToDictionary(p => p.Name.ToLowerInvariant(), p => p);
                CopyPropertiesFromRequestToQuery(queryRequest, query, properties);

                queryResult = await _queryCoordinator.Execute(query, new PagingInfo());

                if (queryResult.Success)
                {
                    AddClientTypeInformation(queryResult);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, $"Error executing query : '{queryRequest.NameOfQuery}'");
                queryResult = new QueryResult
                {
                    Exception = ex,
                    QueryName = queryRequest.NameOfQuery
                };
            }

            content.Content     = _serializer.ToJson(queryResult, SerializationOptions.CamelCase);
            content.ContentType = "application/json";
            return(content);
        }