Beispiel #1
0
 public virtual void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
 {
     foreach (var key in swaggerDoc.Paths.Keys)
     {
         var pathItem = swaggerDoc.Paths[key];
         var path     = key.Replace("{id}", string.Empty).TrimEnd('/');
         if (!_settings.DataSettings().IgnoreOperations.ContainsKey(path))
         {
             continue;
         }
         var ignores = _settings.DataSettings().IgnoreOperations[path];
         if (ignores.Contains(HttpMethod.Post))
         {
             pathItem.Post = null;
         }
         if (ignores.Contains(HttpMethod.Put))
         {
             pathItem.Put = null;
         }
         if (ignores.Contains(HttpMethod.Delete))
         {
             pathItem.Delete = null;
         }
     }
 }
 public void PopulateFeature(IEnumerable <ApplicationPart> parts, ControllerFeature feature)
 {
     foreach (var controllerType in _settings.DataSettings().Routes.Keys)
     {
         feature.Controllers.Add(controllerType.GetTypeInfo());
     }
 }
Beispiel #3
0
 public RepositoryControllerAsync(ICrudPageableRepositoryAsync <TEntity, TKey> repository,
                                  AutumnSettings settings, IHttpContextAccessor httpContextAccessor)
 {
     _repository          = repository;
     _settings            = settings ?? throw new ArgumentNullException(nameof(settings));
     _entityInfo          = _settings.DataSettings().EntitiesInfos[typeof(TEntity)];
     _httpContextAccessor = httpContextAccessor;
 }
        public async Task Invoke(HttpContext context)
        {
            var ignore = _settings.DataSettings().IgnoreOperations;
            var method = Method(context.Request.Method);
            var path   = Path(method, context.Request.Path);

            if (ignore.ContainsKey(path))
            {
                if (ignore[path].Contains(method))
                {
                    context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                }
                else
                {
                    await _next(context);
                }
            }
            else
            {
                await _next(context);
            }
        }
        private static void ProcessToRepositoryControllerAsync(AutumnSettings settings, Operation operation,
                                                               ControllerActionDescriptor actionDescriptor)
        {
            // find entity type
            var entityType = actionDescriptor.ControllerTypeInfo.GetGenericArguments()[0];

            // find entity type info
            if (!settings.DataSettings().ResourceInfos.ContainsKey(entityType))
            {
                return;
            }
            var resourceInfo = settings.DataSettings().ResourceInfos[entityType];
            // register response swagger schema for GET request
            var entitySchemaGet = GetOrRegistrySchema(entityType, HttpMethod.Get, settings.NamingStrategy);
            // register request swagger schema for POST request
            var entitySchemaPost = GetOrRegistrySchema(resourceInfo.ProxyRequestTypes[HttpMethod.Post], HttpMethod.Post, settings.NamingStrategy);
            // register request swagger schema for PUT request
            var entitySchemaPut                 = GetOrRegistrySchema(resourceInfo.ProxyRequestTypes[HttpMethod.Put], HttpMethod.Put, settings.NamingStrategy);
            var errorSchemaBadRequest           = GetOrRegistrySchema(typeof(ErrorModelBadRequest), HttpMethod.Get, settings.NamingStrategy);
            var errorSchemaInternalErrorRequest = GetOrRegistrySchema(typeof(ErrorModelInternalError), HttpMethod.Get, settings.NamingStrategy);

            operation.Responses = new ConcurrentDictionary <string, Response>();
            // add generic reponse for internal error from server
            operation.Responses.Add(((int)HttpStatusCode.BadRequest).ToString(), new Response()
            {
                Schema = errorSchemaBadRequest
            });
            // add generic reponse for internal error from server
            operation.Responses.Add(((int)HttpStatusCode.InternalServerError).ToString(), new Response()
            {
                Schema = errorSchemaInternalErrorRequest
            });
            operation.Consumes.Clear();

            IParameter parameter;

            // create operation description in term of ActionName
            switch (actionDescriptor.ActionName)
            {
            // operation is "Put"
            case "Put":
                operation.Consumes.Add(ConsumeContentType);
                parameter                         = operation.Parameters.Single(p => p.Name == "id");
                parameter.Description             = "ID of the object to update";
                parameter                         = operation.Parameters.Single(p => p.Name == "entityPutRequest");
                parameter.Name                    = "entity";
                parameter.Description             = "New value of the object";
                ((BodyParameter)parameter).Schema = entitySchemaPut;
                parameter.Required                = true;

                operation.Responses.Add(((int)HttpStatusCode.OK).ToString(),
                                        new Response()
                {
                    Schema = entitySchemaGet, Description = "Resource is Updated"
                });
                break;

            case "Delete":
                operation.Consumes.Add(ConsumeContentType);
                parameter             = operation.Parameters.Single(p => p.Name == "id");
                parameter.Description = "ID of the object to delete";
                parameter.Required    = true;
                operation.Responses.Add(((int)HttpStatusCode.OK).ToString(),
                                        new Response()
                {
                    Schema = entitySchemaGet, Description = "Resource is deleted"
                });
                break;

            case "Post":
                operation.Consumes.Add(ConsumeContentType);
                parameter                         = operation.Parameters.Single(p => p.Name == "entityPostRequest");
                parameter.Name                    = "entity";
                parameter.Description             = "Object to create";
                parameter.Required                = true;
                ((BodyParameter)parameter).Schema = entitySchemaPost;
                operation.Responses.Add(((int)HttpStatusCode.Created).ToString(),
                                        new Response()
                {
                    Schema = entitySchemaGet, Description = "Resource is created"
                });
                break;

            case "GetById":
                parameter             = operation.Parameters.Single(p => p.Name == "id");
                parameter.Description = "ID of resource to search";
                parameter.Required    = true;
                operation.Responses.Add(((int)HttpStatusCode.OK).ToString(),
                                        new Response()
                {
                    Schema = entitySchemaGet
                });
                operation.Responses.Add(((int)HttpStatusCode.NotFound).ToString(),
                                        new Response()
                {
                    Description = "Resource not Found"
                });
                break;

            default:
                operation.Parameters.Clear();
                BuildQueryParameters(settings, operation);
                BuildPageableParameters(settings, operation, entityType);
                break;
            }
        }
 protected CrudPageableRepositoryAsync(AutumnSettings settings)
 {
     _parameter  = Expression.Parameter(typeof(TEntity));
     _settings   = settings ?? throw new ArgumentNullException(nameof(settings));
     _entityInfo = _settings.DataSettings().EntitiesInfos[typeof(TEntity)];
 }