Skip to content

Commit 9872274

Browse files
committed
fix: GetDefaultValueInitializer with contractNamespaceWithoutApiGroupName if needed
1 parent e81074d commit 9872274

File tree

7 files changed

+59
-27
lines changed

7 files changed

+59
-27
lines changed

src/Atc.Rest.ApiGenerator.Client.CSharp/ProjectGenerator/ClientCSharpApiGenerator.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ public void GenerateParameters()
134134

135135
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
136136

137+
var contractNamespaceWithoutApiGroupName = NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace);
138+
137139
foreach (var openApiOperation in openApiPath.Value.Operations)
138140
{
139141
if (openApiOperation.Value.Deprecated && !settings.IncludeDeprecatedOperations)
@@ -150,7 +152,8 @@ public void GenerateParameters()
150152
var parameterParameters = ContentGeneratorClientParameterParametersFactory.Create(
151153
fullNamespace,
152154
openApiOperation.Value,
153-
openApiPath.Value.Parameters);
155+
openApiPath.Value.Parameters,
156+
contractNamespaceWithoutApiGroupName);
154157

155158
var contentGenerator = new ContentGeneratorClientParameter(
156159
new GeneratedCodeHeaderGenerator(new GeneratedCodeGeneratorParameters(settings.Version)),

src/Atc.Rest.ApiGenerator.Framework.Minimal/ProjectGenerator/ServerApiGenerator.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ public void GenerateParameters()
156156

157157
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
158158

159+
var contractNamespaceWithoutApiGroupName = NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace);
160+
159161
foreach (var openApiOperation in openApiPath.Value.Operations)
160162
{
161163
if (openApiOperation.Value.Deprecated && !settings.IncludeDeprecatedOperations)
@@ -172,7 +174,8 @@ public void GenerateParameters()
172174
var parameterParameters = ContentGeneratorServerParameterParametersFactory.CreateForRecord(
173175
fullNamespace,
174176
openApiOperation.Value,
175-
openApiPath.Value.Parameters);
177+
openApiPath.Value.Parameters,
178+
contractNamespaceWithoutApiGroupName);
176179

177180
var contentGenerator = new ContentGenerators.ContentGeneratorServerParameter(
178181
new GeneratedCodeHeaderGenerator(new GeneratedCodeGeneratorParameters(settings.Version)),

src/Atc.Rest.ApiGenerator.Framework.Mvc/ProjectGenerator/ServerApiGenerator.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ public void GenerateParameters()
172172

173173
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
174174

175+
var contractNamespaceWithoutApiGroupName = NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace);
176+
175177
foreach (var openApiOperation in openApiPath.Value.Operations)
176178
{
177179
if (openApiOperation.Value.Deprecated && !settings.IncludeDeprecatedOperations)
@@ -188,7 +190,8 @@ public void GenerateParameters()
188190
var parameterParameters = ContentGeneratorServerParameterParametersFactory.CreateForClass(
189191
fullNamespace,
190192
openApiOperation.Value,
191-
openApiPath.Value.Parameters);
193+
openApiPath.Value.Parameters,
194+
contractNamespaceWithoutApiGroupName);
192195

193196
var contentGenerator = new ContentGenerators.ContentGeneratorServerParameter(
194197
new GeneratedCodeHeaderGenerator(new GeneratedCodeGeneratorParameters(settings.Version)),

src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/Client/ContentGeneratorClientParameterParametersFactory.cs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ public static class ContentGeneratorClientParameterParametersFactory
88
public static ContentGeneratorClientParameterParameters Create(
99
string @namespace,
1010
OpenApiOperation openApiOperation,
11-
IList<OpenApiParameter> globalPathParameters)
11+
IList<OpenApiParameter> globalPathParameters,
12+
string contractNamespaceWithoutApiGroupName)
1213
{
1314
ArgumentNullException.ThrowIfNull(openApiOperation);
1415
ArgumentNullException.ThrowIfNull(globalPathParameters);
@@ -17,8 +18,8 @@ public static ContentGeneratorClientParameterParameters Create(
1718

1819
var parameters = new List<ContentGeneratorClientParameterParametersProperty>();
1920

20-
AppendParameters(parameters, globalPathParameters);
21-
AppendParameters(parameters, openApiOperation.Parameters);
21+
AppendParameters(parameters, globalPathParameters, contractNamespaceWithoutApiGroupName);
22+
AppendParameters(parameters, openApiOperation.Parameters, contractNamespaceWithoutApiGroupName);
2223
AppendParametersFromBody(parameters, openApiOperation.RequestBody);
2324

2425
return new ContentGeneratorClientParameterParameters(
@@ -32,14 +33,13 @@ public static ContentGeneratorClientParameterParameters Create(
3233

3334
private static void AppendParameters(
3435
ICollection<ContentGeneratorClientParameterParametersProperty> parameters,
35-
IEnumerable<OpenApiParameter> openApiParameters)
36+
IEnumerable<OpenApiParameter> openApiParameters,
37+
string contractNamespaceWithoutApiGroupName)
3638
{
3739
foreach (var openApiParameter in openApiParameters)
3840
{
3941
var useListForDataType = openApiParameter.Schema.IsTypeArray();
4042

41-
var parameterName = openApiParameter.Name.EnsureValidFormattedPropertyName();
42-
4343
var dataType = useListForDataType
4444
? openApiParameter.Schema.Items.GetDataType()
4545
: openApiParameter.Schema.GetDataType();
@@ -50,19 +50,11 @@ private static void AppendParameters(
5050

5151
if (parameters.FirstOrDefault(x => x.Name == openApiParameter.Name) is null)
5252
{
53-
var defaultValueInitializer = openApiParameter.Schema.GetDefaultValueAsString();
54-
55-
if (!string.IsNullOrEmpty(defaultValueInitializer) &&
56-
openApiParameter.ContainsEnumInSchemaOrProperties())
57-
{
58-
defaultValueInitializer = dataType.Equals(parameterName, StringComparison.Ordinal)
59-
? $"{ContentGeneratorConstants.Contracts}.{dataType}.{defaultValueInitializer.PascalCase(ApiOperationExtractor.ModelNameSeparators, removeSeparators: true)}"
60-
: $"{dataType}.{defaultValueInitializer.PascalCase(ApiOperationExtractor.ModelNameSeparators, removeSeparators: true)}";
61-
}
53+
var defaultValueInitializer = openApiParameter.GetDefaultValueInitializer(contractNamespaceWithoutApiGroupName);
6254

6355
parameters.Add(new ContentGeneratorClientParameterParametersProperty(
6456
openApiParameter.Name,
65-
parameterName,
57+
openApiParameter.Name.EnsureValidFormattedPropertyName(),
6658
openApiParameter.ExtractDocumentationTags(),
6759
dataType,
6860
isSimpleType,

src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/Server/ContentGeneratorServerParameterParametersFactory.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ public static class ContentGeneratorServerParameterParametersFactory
88
public static ContentGeneratorServerParameterParameters CreateForClass(
99
string @namespace,
1010
OpenApiOperation openApiOperation,
11-
IList<OpenApiParameter> globalPathParameters)
11+
IList<OpenApiParameter> globalPathParameters,
12+
string contractNamespaceWithoutApiGroupName)
1213
{
1314
ArgumentNullException.ThrowIfNull(openApiOperation);
1415
ArgumentNullException.ThrowIfNull(globalPathParameters);
@@ -17,8 +18,8 @@ public static ContentGeneratorServerParameterParameters CreateForClass(
1718

1819
var parameters = new List<ContentGeneratorServerParameterParametersProperty>();
1920

20-
AppendParameters(parameters, globalPathParameters);
21-
AppendParameters(parameters, openApiOperation.Parameters);
21+
AppendParameters(parameters, globalPathParameters, contractNamespaceWithoutApiGroupName);
22+
AppendParameters(parameters, openApiOperation.Parameters, contractNamespaceWithoutApiGroupName);
2223
AppendParametersFromBody(parameters, openApiOperation.RequestBody);
2324

2425
return new ContentGeneratorServerParameterParameters(
@@ -33,7 +34,8 @@ public static ContentGeneratorServerParameterParameters CreateForClass(
3334
public static ContentGeneratorServerParameterParameters CreateForRecord(
3435
string @namespace,
3536
OpenApiOperation openApiOperation,
36-
IList<OpenApiParameter> globalPathParameters)
37+
IList<OpenApiParameter> globalPathParameters,
38+
string contractNamespaceWithoutApiGroupName)
3739
{
3840
ArgumentNullException.ThrowIfNull(openApiOperation);
3941
ArgumentNullException.ThrowIfNull(globalPathParameters);
@@ -42,8 +44,8 @@ public static ContentGeneratorServerParameterParameters CreateForRecord(
4244

4345
var parameters = new List<ContentGeneratorServerParameterParametersProperty>();
4446

45-
AppendParameters(parameters, globalPathParameters);
46-
AppendParameters(parameters, openApiOperation.Parameters);
47+
AppendParameters(parameters, globalPathParameters, contractNamespaceWithoutApiGroupName);
48+
AppendParameters(parameters, openApiOperation.Parameters, contractNamespaceWithoutApiGroupName);
4749
AppendParametersFromBody(parameters, openApiOperation.RequestBody);
4850

4951
return new ContentGeneratorServerParameterParameters(
@@ -57,7 +59,8 @@ public static ContentGeneratorServerParameterParameters CreateForRecord(
5759

5860
private static void AppendParameters(
5961
ICollection<ContentGeneratorServerParameterParametersProperty> parameters,
60-
IEnumerable<OpenApiParameter> openApiParameters)
62+
IEnumerable<OpenApiParameter> openApiParameters,
63+
string contractNamespaceWithoutApiGroupName)
6164
{
6265
foreach (var openApiParameter in openApiParameters)
6366
{
@@ -73,6 +76,8 @@ private static void AppendParameters(
7376

7477
if (parameters.FirstOrDefault(x => x.Name == openApiParameter.Name) is null)
7578
{
79+
var defaultValueInitializer = openApiParameter.GetDefaultValueInitializer(contractNamespaceWithoutApiGroupName);
80+
7681
parameters.Add(new ContentGeneratorServerParameterParametersProperty(
7782
openApiParameter.Name,
7883
openApiParameter.Name.EnsureValidFormattedPropertyName(),
@@ -84,7 +89,7 @@ private static void AppendParameters(
8489
GetIsNullable(openApiParameter),
8590
openApiParameter.Required,
8691
GetAdditionalValidationAttributes(openApiParameter),
87-
openApiParameter.Schema.GetDefaultValueAsString()));
92+
defaultValueInitializer));
8893
}
8994
}
9095
}

src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiParameterExtensions.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,31 @@ public static bool ContainsEnumInSchemaOrProperties(
3232
apiParameter.Schema.OneOf.Any(oneOfSchema => oneOfSchema.IsSchemaEnumOrPropertyEnum()) ||
3333
apiParameter.Schema.AnyOf.Any(anyOfSchema => anyOfSchema.IsSchemaEnumOrPropertyEnum());
3434

35+
public static string? GetDefaultValueInitializer(
36+
this OpenApiParameter openApiParameter,
37+
string contractNamespaceWithoutApiGroupName)
38+
{
39+
var parameterName = openApiParameter.Name.EnsureValidFormattedPropertyName();
40+
41+
var useListForDataType = openApiParameter.Schema.IsTypeArray();
42+
43+
var dataType = useListForDataType
44+
? openApiParameter.Schema.Items.GetDataType()
45+
: openApiParameter.Schema.GetDataType();
46+
47+
var defaultValueInitializer = openApiParameter.Schema.GetDefaultValueAsString();
48+
49+
if (!string.IsNullOrEmpty(defaultValueInitializer) &&
50+
openApiParameter.ContainsEnumInSchemaOrProperties())
51+
{
52+
defaultValueInitializer = dataType.Equals(parameterName, StringComparison.Ordinal)
53+
? $"{contractNamespaceWithoutApiGroupName}.{dataType}.{defaultValueInitializer.PascalCase(ApiOperationExtractor.ModelNameSeparators, removeSeparators: true)}"
54+
: $"{dataType}.{defaultValueInitializer.PascalCase(ApiOperationExtractor.ModelNameSeparators, removeSeparators: true)}";
55+
}
56+
57+
return defaultValueInitializer;
58+
}
59+
3560
public static CodeDocumentationTags ExtractDocumentationTags(
3661
this OpenApiParameter apiParameter)
3762
{

src/Atc.Rest.ApiGenerator.OpenApi/GlobalUsings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
global using System.Text;
77

88
global using Atc.CodeDocumentation.CodeComment;
9+
global using Atc.CodeGeneration.CSharp.Extensions;
910
global using Atc.Data.Models;
1011
global using Atc.Rest.ApiGenerator.Contracts;
1112
global using Atc.Rest.ApiGenerator.Contracts.ContentGeneratorsParameters.Server;

0 commit comments

Comments
 (0)