forked from loafle/openapi-generator-original
[aspnetcore] Added parameter to generate models in a seperate csproj (#13024)
* Added parameter to add models in seperate project * Update samples * refactored ELSE
This commit is contained in:
parent
6a3226d004
commit
c81a63fd7a
@ -51,6 +51,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|useDefaultRouting|Use default routing for the ASP.NET Core version.| |true|
|
||||
|useFrameworkReference|Use frameworkReference for ASP.NET Core 3.0+ and PackageReference ASP.NET Core 2.2 or earlier.| |false|
|
||||
|useNewtonsoft|Uses the Newtonsoft JSON library.| |true|
|
||||
|useSeperateModelProject|Create a seperate project for models| |false|
|
||||
|useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |true|
|
||||
|
||||
## IMPORT MAPPING
|
||||
|
@ -44,6 +44,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
|
||||
public static final String USE_SWASHBUCKLE = "useSwashbuckle";
|
||||
public static final String MODEL_POCOMODE = "pocoModels";
|
||||
public static final String USE_MODEL_SEPERATEPROJECT = "useSeperateModelProject";
|
||||
public static final String ASPNET_CORE_VERSION = "aspnetCoreVersion";
|
||||
public static final String SWASHBUCKLE_VERSION = "swashbuckleVersion";
|
||||
public static final String CLASS_MODIFIER = "classModifier";
|
||||
@ -72,6 +73,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
|
||||
private boolean useSwashbuckle = true;
|
||||
private boolean pocoModels = false;
|
||||
private boolean useSeperateModelProject = false;
|
||||
protected int serverPort = 8080;
|
||||
protected String serverHost = "0.0.0.0";
|
||||
protected CliOption swashbuckleVersion = new CliOption(SWASHBUCKLE_VERSION, "Swashbuckle version: 3.0.0 (deprecated), 4.0.0 (deprecated), 5.0.0 (deprecated), 6.4.0");
|
||||
@ -244,6 +246,10 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
"Build POCO Models",
|
||||
pocoModels);
|
||||
|
||||
addSwitch(USE_MODEL_SEPERATEPROJECT,
|
||||
"Create a seperate project for models",
|
||||
useSeperateModelProject);
|
||||
|
||||
addSwitch(IS_LIBRARY,
|
||||
"Is the build a library",
|
||||
isLibrary);
|
||||
@ -367,6 +373,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
setOperationModifier();
|
||||
setModelClassModifier();
|
||||
setPocoModels();
|
||||
setUseSeperateModelProject();
|
||||
setUseSwashbuckle();
|
||||
setOperationIsAsync();
|
||||
|
||||
@ -393,17 +400,30 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
setIsFramework();
|
||||
setUseNewtonsoft();
|
||||
setUseEndpointRouting();
|
||||
|
||||
|
||||
supportingFiles.add(new SupportingFile("build.sh.mustache", "", "build.sh"));
|
||||
supportingFiles.add(new SupportingFile("build.bat.mustache", "", "build.bat"));
|
||||
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
|
||||
supportingFiles.add(new SupportingFile("Solution.mustache", "", packageName + ".sln"));
|
||||
supportingFiles.add(new SupportingFile("gitignore", packageFolder, ".gitignore"));
|
||||
supportingFiles.add(new SupportingFile("validateModel.mustache", packageFolder + File.separator + "Attributes", "ValidateModelStateAttribute.cs"));
|
||||
supportingFiles.add(new SupportingFile("typeConverter.mustache", packageFolder + File.separator + "Converters", "CustomEnumConverter.cs"));
|
||||
|
||||
if (useSeperateModelProject)
|
||||
{
|
||||
supportingFiles.add(new SupportingFile("typeConverter.mustache", sourceFolder + File.separator + modelPackage + File.separator + "Converters", "CustomEnumConverter.cs"));
|
||||
} else {
|
||||
supportingFiles.add(new SupportingFile("typeConverter.mustache", packageFolder + File.separator + "Converters", "CustomEnumConverter.cs"));
|
||||
}
|
||||
|
||||
if (aspnetCoreVersion.getOptValue().startsWith("3.") || aspnetCoreVersion.getOptValue().startsWith("5.0") || aspnetCoreVersion.getOptValue().startsWith("6.")) {
|
||||
supportingFiles.add(new SupportingFile("OpenApi" + File.separator + "TypeExtensions.mustache", packageFolder + File.separator + "OpenApi", "TypeExtensions.cs"));
|
||||
}
|
||||
|
||||
if (useSeperateModelProject)
|
||||
{
|
||||
supportingFiles.add(new SupportingFile("ModelsProject.csproj.mustache", sourceFolder + File.separator + modelPackage, modelPackage + ".csproj"));
|
||||
}
|
||||
|
||||
supportingFiles.add(new SupportingFile("Project.csproj.mustache", packageFolder, packageName + ".csproj"));
|
||||
if (!isLibrary) {
|
||||
supportingFiles.add(new SupportingFile("Dockerfile.mustache", packageFolder, "Dockerfile"));
|
||||
@ -445,7 +465,12 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
|
||||
@Override
|
||||
public String modelFileFolder() {
|
||||
return outputFolder + File.separator + sourceFolder + File.separator + packageName + File.separator + "Models";
|
||||
if (!useSeperateModelProject)
|
||||
{
|
||||
return outputFolder + File.separator + sourceFolder + File.separator + packageName + File.separator + "Models";
|
||||
} else {
|
||||
return outputFolder + File.separator + sourceFolder + File.separator + modelPackage;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -671,6 +696,18 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
}
|
||||
}
|
||||
|
||||
private void setUseSeperateModelProject() {
|
||||
if (additionalProperties.containsKey(USE_MODEL_SEPERATEPROJECT)) {
|
||||
useSeperateModelProject = convertPropertyToBooleanAndWriteBack(USE_MODEL_SEPERATEPROJECT);
|
||||
if (useSeperateModelProject)
|
||||
{
|
||||
LOGGER.info("Using seperate model project");
|
||||
}
|
||||
} else {
|
||||
additionalProperties.put(USE_MODEL_SEPERATEPROJECT, useSeperateModelProject);
|
||||
}
|
||||
}
|
||||
|
||||
private void setUseSwashbuckle() {
|
||||
if (isLibrary) {
|
||||
LOGGER.warn("isLibrary is true so changing default useSwashbuckle to false");
|
||||
|
39
modules/openapi-generator/src/main/resources/aspnetcore/3.0/ModelsProject.csproj.mustache
vendored
Normal file
39
modules/openapi-generator/src/main/resources/aspnetcore/3.0/ModelsProject.csproj.mustache
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<Description>{{packageDescription}}{{^packageDescription}}{{modelPackage}}{{/packageDescription}}</Description>
|
||||
<Copyright>{{packageCopyright}}</Copyright>
|
||||
<Authors>{{packageAuthors}}</Authors>
|
||||
<TargetFramework>{{targetFramework}}</TargetFramework>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<PreserveCompilationContext>true</PreserveCompilationContext>
|
||||
<Version>{{packageVersion}}</Version>
|
||||
{{#nullableReferenceTypes}}
|
||||
<Nullable>annotations</Nullable>
|
||||
{{/nullableReferenceTypes}}
|
||||
<OutputType>Library</OutputType>
|
||||
<AssemblyName>{{modelPackage}}</AssemblyName>
|
||||
<PackageId>{{modelPackage}}</PackageId>
|
||||
<UserSecretsId>{{userSecretsGuid}}</UserSecretsId>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="{{aspnetCoreVersion}}.0"/>
|
||||
{{#useSwashbuckle}}
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
|
||||
{{#useNewtonsoft}}
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="{{swashbuckleVersion}}"/>
|
||||
{{/useNewtonsoft}}
|
||||
{{^useNewtonsoft}}
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="{{swashbuckleVersion}}"/>
|
||||
{{/useNewtonsoft}}
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="{{swashbuckleVersion}}" />
|
||||
{{/useSwashbuckle}}
|
||||
{{^useSwashbuckle}}
|
||||
{{#useNewtonsoft}}
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="{{newtonsoftVersion}}" />
|
||||
{{/useNewtonsoft}}
|
||||
{{/useSwashbuckle}}
|
||||
<PackageReference Include="JsonSubTypes" Version="1.8.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -20,6 +20,9 @@
|
||||
<DockerfileContext>..\..</DockerfileContext>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
{{#useSeperateModelProject}}
|
||||
<ProjectReference Include="../{{modelPackage}}/{{modelPackage}}.csproj"/>
|
||||
{{/useSeperateModelProject}}
|
||||
{{#useFrameworkReference}}
|
||||
{{#isLibrary}}
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
@ -28,7 +31,9 @@
|
||||
{{^useFrameworkReference}}
|
||||
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||
{{/useFrameworkReference}}
|
||||
{{^useSeperateModelProject}}
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="{{aspnetCoreVersion}}.0"/>
|
||||
{{/useSeperateModelProject}}
|
||||
{{#useSwashbuckle}}
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
|
||||
{{#useNewtonsoft}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user