From 226d5f6ec639a270fe1cd0bbd5a6c4ec21a46ca5 Mon Sep 17 00:00:00 2001 From: Tim Cadenbach Date: Tue, 29 Mar 2022 12:33:51 +0200 Subject: [PATCH] Added new options: * Enable / Disable ODATA completely * Enable XML Comments for swagger Fixed * Fixed a bug that prevented the service to start when the connectionstring wasn't set despite using InMemory --- sample/ApiGeneratorSampleApp/Model/Person.cs | 2 ++ sample/ApiGeneratorSampleApp/appsettings.json | 11 +++------- .../Data/GenericDbContext.cs | 11 +++++----- .../Extension/ApiGeneratorConfig.cs | 14 ++++++++++++ .../Extension/ApiGeneratorExtension.cs | 22 ++++++++++++++----- .../TCDev.APIGenerator.csproj | 2 +- 6 files changed, 43 insertions(+), 19 deletions(-) diff --git a/sample/ApiGeneratorSampleApp/Model/Person.cs b/sample/ApiGeneratorSampleApp/Model/Person.cs index 06d456c..c6f38db 100644 --- a/sample/ApiGeneratorSampleApp/Model/Person.cs +++ b/sample/ApiGeneratorSampleApp/Model/Person.cs @@ -22,6 +22,8 @@ public class Person : Trackable, IEntityTypeConfiguration // Configure Table Options yourself { public string Name { get; set; } + + public DateTime Date { get; set; } public string Description { get; set; } public int Age { get; set; } diff --git a/sample/ApiGeneratorSampleApp/appsettings.json b/sample/ApiGeneratorSampleApp/appsettings.json index d9adf60..dcd7605 100644 --- a/sample/ApiGeneratorSampleApp/appsettings.json +++ b/sample/ApiGeneratorSampleApp/appsettings.json @@ -12,9 +12,7 @@ For more info see https://aka.ms/dotnet-template-ms-identity-platform "CallbackPath": "/signin-oidc" }, - "ConnectionStrings": { - "ApiGeneratorDatabase": "Server=localhost;database=tcdev_dev_222;user=sa;password=Password!23;" - }, + "Logging": { "LogLevel": { "Default": "Information", @@ -25,10 +23,6 @@ For more info see https://aka.ms/dotnet-template-ms-identity-platform "AllowedHosts": "*", //Sample Config for API Generator "Api": { - "Database": { - "DatabaseType": "SQL" - } - } "Swagger": { "EnableProduction": "false", // Enable/Disable for production builds "Description": "Sample Swagger Config", @@ -38,9 +32,10 @@ For more info see https://aka.ms/dotnet-template-ms-identity-platform "ContactUri": "https://www.myuri.com" }, "Database": { - "DatabaseType": "SQL|InMemory|SQLite" + "DatabaseType": "InMemory" }, "Odata": { + "EnableOData": false, "EnableSelect": true, "EnableFilter": true, "EnableSort": true diff --git a/src/TCDev.APIGenerator/Data/GenericDbContext.cs b/src/TCDev.APIGenerator/Data/GenericDbContext.cs index 711ed46..f93e93f 100644 --- a/src/TCDev.APIGenerator/Data/GenericDbContext.cs +++ b/src/TCDev.APIGenerator/Data/GenericDbContext.cs @@ -43,13 +43,12 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { - var config = new ApiGeneratorConfig(null); var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") + .AddJsonFile("secrets.json") .Build(); - var connectionString = configuration.GetConnectionString("ApiGeneratorDatabase"); - + var config = new ApiGeneratorConfig(configuration); // Add Database Context switch (config.DatabaseOptions.DatabaseType) @@ -58,10 +57,12 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder.UseInMemoryDatabase("ApiGeneratorDB"); break; case DBType.SQL: - optionsBuilder.UseSqlServer(connectionString); + var connectionStringSQL = configuration.GetConnectionString("ApiGeneratorDatabase"); + optionsBuilder.UseSqlServer(connectionStringSQL); break; case DBType.SQLite: - optionsBuilder.UseSqlite(connectionString); + var connectionStringSQLite = configuration.GetConnectionString("ApiGeneratorDatabase"); + optionsBuilder.UseSqlite(connectionStringSQLite); break; default: throw new Exception("Database Type Unkown"); diff --git a/src/TCDev.APIGenerator/Extension/ApiGeneratorConfig.cs b/src/TCDev.APIGenerator/Extension/ApiGeneratorConfig.cs index a8d9854..36461b9 100644 --- a/src/TCDev.APIGenerator/Extension/ApiGeneratorConfig.cs +++ b/src/TCDev.APIGenerator/Extension/ApiGeneratorConfig.cs @@ -24,19 +24,32 @@ public ApiGeneratorConfig(IConfiguration config) } //Load Options + configuration.Bind("API:Basic", APIOptions); configuration.Bind("Api:Cache", CacheOptions); configuration.Bind("Api:Swagger", SwaggerOptions); configuration.Bind("Api:Database", DatabaseOptions); + configuration.Bind("Api:Odata", ODataOptions); } private readonly IConfigurationRoot Configuration; public CacheOptions CacheOptions { get; set; } = new CacheOptions(); + + public APIOptions APIOptions { get; set; } = new APIOptions(); + public SwaggerOptions SwaggerOptions { get; set; } = new SwaggerOptions(); public DatabaseOptions DatabaseOptions { get; set; } = new DatabaseOptions(); + public ODataFunctions ODataOptions { get; set; } = new ODataFunctions(); public string MetadataRoute { get; set; } = "odata"; } + + public class APIOptions + { + public bool UseXMLComments { get; set; } = false; + public string XMLCommentsFile { get; set; } = string.Empty; + } + public class CacheOptions { public bool Enabled { get; set; } = true; @@ -61,6 +74,7 @@ public class DatabaseOptions public class ODataFunctions { + public bool EnableOData = false; public bool EnableSelect { get; set; } = true; public bool EnableFilter { get; set; } = true; public bool EnableSort { get; set; } = true; diff --git a/src/TCDev.APIGenerator/Extension/ApiGeneratorExtension.cs b/src/TCDev.APIGenerator/Extension/ApiGeneratorExtension.cs index 1760972..d008096 100644 --- a/src/TCDev.APIGenerator/Extension/ApiGeneratorExtension.cs +++ b/src/TCDev.APIGenerator/Extension/ApiGeneratorExtension.cs @@ -87,19 +87,31 @@ public static class ApiGeneratorExtension }); c.DocumentFilter(); - //c.IncludeXmlComments($"{assembly.GetName().Name}.xml", true); + if(ApiGeneratorConfig.APIOptions.UseXMLComments) + { + if (!string.IsNullOrEmpty(ApiGeneratorConfig.APIOptions.XMLCommentsFile)) + { + throw new Exception("You need to set XMLCommentsFile option when using XMl Comments"); + } else { + c.IncludeXmlComments(ApiGeneratorConfig.APIOptions.XMLCommentsFile, true); + } + } + }); - services.AddControllers().AddOData(opt => + if(ApiGeneratorConfig.ODataOptions.EnableOData) + { + services.AddControllers().AddOData(opt => { opt.AddRouteComponents("odata", GenericDbContext.EdmModel); opt.EnableNoDollarQueryOptions = true; opt.EnableQueryFeatures(20000); opt.Select().Expand().Filter(); - } - ); - + }); + } else { + services.AddControllers(); + } return services; } diff --git a/src/TCDev.APIGenerator/TCDev.APIGenerator.csproj b/src/TCDev.APIGenerator/TCDev.APIGenerator.csproj index c5a54c4..b148216 100644 --- a/src/TCDev.APIGenerator/TCDev.APIGenerator.csproj +++ b/src/TCDev.APIGenerator/TCDev.APIGenerator.csproj @@ -3,7 +3,7 @@ net6.0 TCDev.APIGenerator - 0.0.5-alpha + 0.0.8-alpha Tim Cadenbach TCDev Creates fully working CRUD Apis from just class files