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()); } }
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)]; }