Esempio n. 1
0
        public async Task <IActionResult> GetAsync([FromRoute][BindRequired] string objectType)
        {
            var type = _typeResolver.FindFirstByName(objectType);             // FIXME: allow pluralized type names

            if (type == null || !typeof(IObject).IsAssignableFrom(type))
            {
                return(NotFound());
            }

            if (!(HttpContext.Items[nameof(QueryContextProviderSelectorAttribute)] is IQueryContextProvider provider))
            {
                return(await this.InternalServerErrorAsync(ErrorEvents.PlatformError, "Did not correctly resolve query context provider"));
            }

            var contexts = provider.Parse(type, User, Request.GetEncodedPathAndQuery());
            var results  = new List <object>();

            foreach (var context in contexts)
            {
                results.Add(await context.GetAsync(_repository));
            }

            throw new NotImplementedException();
            //return provider.ToResult(results);
        }
Esempio n. 2
0
        private object CreateHandler(BackgroundTask task)
        {
            try
            {
                var handlerInfo = Serializer.Deserialize <HandlerInfo>(task.Handler);

                var typeName = $"{handlerInfo.Namespace}.{handlerInfo.Entrypoint}";
                var type     = _typeResolver.FindByFullName(typeName) ?? _typeResolver.FindFirstByName(typeName);
                return(type == null ? null : _backgroundServices.AutoResolve(type));
            }
            catch (Exception e)
            {
                _logger.Error(() => "Error creating handler for task", e);
                throw;
            }
        }
Esempio n. 3
0
        public async Task <IActionResult> CreateBackgroundTask([FromBody] CreateBackgroundTaskModel model)
        {
            if (!this.TryValidateModelOrError(model, ErrorEvents.ValidationFailed, ErrorStrings.ValidationFailed,
                                              out var error))
            {
                return(error);
            }

            if (!string.IsNullOrWhiteSpace(model.TaskType))
            {
                var type = _typeResolver.FindByFullName(model.TaskType) ??
                           _typeResolver.FindFirstByName(model.TaskType);
                if (type == null)
                {
                    return(this.BadRequestError(ErrorEvents.ResourceMissing, "No task type found with name {0}",
                                                model.TaskType));
                }

                var(success, task) = await _host.TryScheduleTaskAsync(type, model.Data, t =>
                {
                    if (model.Tags?.Length > 0)
                    {
                        t.Tags.AddRange(model.Tags);
                    }

                    if (!string.IsNullOrWhiteSpace(model.Expression))
                    {
                        t.Expression = model.Expression;
                    }
                });

                if (!success)
                {
                    return(this.NotAcceptableError(ErrorEvents.CouldNotAcceptWork,
                                                   "Task was not accepted by the server"));
                }

                return(Accepted(new Uri($"{Request.Path}/{task.Id}", UriKind.Relative)));
            }

            return(this.NotImplemented());
        }