Skip to content

Commit 40cb269

Browse files
committed
feat: use settings.[X]Namespace for Server[X]Generator
1 parent 1a9c105 commit 40cb269

File tree

7 files changed

+97
-36
lines changed

7 files changed

+97
-36
lines changed

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

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,11 @@ public void GenerateParameters()
150150
{
151151
var apiGroupName = openApiPath.GetApiGroupName();
152152

153-
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
153+
var contractsNamespace = NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsNamespace);
154+
155+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
154156

155-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
157+
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
156158

157159
foreach (var openApiOperation in openApiPath.Value.Operations)
158160
{
@@ -196,9 +198,11 @@ public void GenerateResults()
196198
{
197199
var apiGroupName = openApiPath.GetApiGroupName();
198200

199-
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
201+
var contractsNamespace = NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
202+
203+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
200204

201-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
205+
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
202206

203207
foreach (var openApiOperation in openApiPath.Value.Operations)
204208
{
@@ -236,9 +240,11 @@ public void GenerateInterfaces()
236240
{
237241
var apiGroupName = openApiPath.GetApiGroupName();
238242

239-
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
243+
var contractsNamespace = NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
240244

241-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
245+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
246+
247+
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
242248

243249
foreach (var openApiOperation in openApiPath.Value.Operations)
244250
{
@@ -274,9 +280,11 @@ public void GenerateEndpoints()
274280
{
275281
foreach (var apiGroupName in openApiDocument.GetApiGroupNames())
276282
{
277-
var endpointsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.EndpointsLocation);
283+
var endpointsNamespace = NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.EndpointsNamespace);
278284

279-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, endpointsLocation);
285+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, endpointsNamespace);
286+
287+
var endpointsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.EndpointsLocation);
280288

281289
var endpointParameters = ContentGeneratorServerEndpointParametersFactory.Create(
282290
operationSchemaMappings,
@@ -352,7 +360,7 @@ public void MaintainGlobalUsings(
352360
{
353361
var requiredUsing = NamespaceFactory.Create(
354362
settings.ProjectName,
355-
LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation));
363+
LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace));
356364

357365
if (!requiredUsings.Contains(requiredUsing, StringComparer.CurrentCulture))
358366
{
@@ -362,7 +370,7 @@ public void MaintainGlobalUsings(
362370

363371
var apiGroupNames = openApiDocument.GetApiGroupNames();
364372

365-
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(settings.ProjectName, LocationFactory.CreateWithApiGroupName(x, settings.ContractsLocation))));
373+
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(settings.ProjectName, NamespaceFactory.CreateWithApiGroupName(x, settings.ContractsNamespace))));
366374

367375
GlobalUsingsHelper.CreateOrUpdate(
368376
logger,
@@ -378,7 +386,11 @@ private string GetRouteByApiGroupName(
378386
var (key, _) = openApiDocument.Paths.FirstOrDefault(x => x.IsPathStartingSegmentName(apiGroupName));
379387
if (key is null)
380388
{
381-
throw new NotSupportedException($"{nameof(apiGroupName)} was not found in any route.");
389+
(key, _) = openApiDocument.Paths.FirstOrDefault(x => x.IsPathStartingApiGroupName(apiGroupName));
390+
if (key is null)
391+
{
392+
throw new NotSupportedException($"{nameof(apiGroupName)} was not found in any route.");
393+
}
382394
}
383395

384396
var routeSuffix = key
@@ -392,9 +404,11 @@ private void GenerateEnumerationType(
392404
string enumerationName,
393405
OpenApiSchema openApiSchemaEnumeration)
394406
{
395-
var contractsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation);
407+
var contractsNamespace = NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace);
396408

397-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
409+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
410+
411+
var contractsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation);
398412

399413
var enumParameters = ContentGeneratorServerClientEnumParametersFactory.Create(
400414
codeGeneratorContentHeader,
@@ -423,12 +437,16 @@ private void GenerateModel(
423437
string apiGroupName,
424438
bool isSharedContract)
425439
{
440+
var contractsNamespace = isSharedContract
441+
? NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace)
442+
: NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsNamespace);
443+
444+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
445+
426446
var contractsLocation = isSharedContract
427447
? LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation)
428448
: LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
429449

430-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
431-
432450
var parameters = ContentGeneratorServerClientModelParametersFactory.CreateForRecord(
433451
codeGeneratorContentHeader,
434452
fullNamespace,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public void MaintainGlobalUsings(
257257

258258
var apiGroupNames = openApiDocument.GetApiGroupNames();
259259

260-
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(apiProjectName, LocationFactory.CreateWithApiGroupName(x, settings.ContractsLocation))));
260+
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(apiProjectName, NamespaceFactory.CreateWithApiGroupName(x, settings.ContractsLocation))));
261261

262262
GlobalUsingsHelper.CreateOrUpdate(
263263
logger,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public void MaintainGlobalUsings(
275275

276276
if (operationSchemaMappings.Any(apiOperation => apiOperation.Model.IsShared))
277277
{
278-
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation)));
278+
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation)));
279279
}
280280

281281
var apiGroupNames = openApiDocument.GetApiGroupNames();
@@ -287,7 +287,7 @@ public void MaintainGlobalUsings(
287287
continue;
288288
}
289289

290-
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation)));
290+
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation)));
291291
}
292292

293293
GlobalUsingsHelper.CreateOrUpdate(

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

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,11 @@ public void GenerateParameters()
166166
{
167167
var apiGroupName = openApiPath.GetApiGroupName();
168168

169-
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
169+
var contractsNamespace = NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsNamespace);
170+
171+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
170172

171-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
173+
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
172174

173175
foreach (var openApiOperation in openApiPath.Value.Operations)
174176
{
@@ -212,9 +214,11 @@ public void GenerateResults()
212214
{
213215
var apiGroupName = openApiPath.GetApiGroupName();
214216

215-
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
217+
var contractsNamespace = NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
218+
219+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
216220

217-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
221+
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
218222

219223
foreach (var openApiOperation in openApiPath.Value.Operations)
220224
{
@@ -252,9 +256,11 @@ public void GenerateInterfaces()
252256
{
253257
var apiGroupName = openApiPath.GetApiGroupName();
254258

255-
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
259+
var contractsNamespace = NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
256260

257-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
261+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
262+
263+
var contractsLocation = LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
258264

259265
foreach (var openApiOperation in openApiPath.Value.Operations)
260266
{
@@ -290,9 +296,11 @@ public void GenerateEndpoints()
290296
{
291297
foreach (var apiGroupName in openApiDocument.GetApiGroupNames())
292298
{
293-
var endpointsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.EndpointsLocation);
299+
var endpointsNamespace = NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.EndpointsNamespace);
294300

295-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, endpointsLocation);
301+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, endpointsNamespace);
302+
303+
var endpointsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.EndpointsLocation);
296304

297305
var controllerParameters = ContentGeneratorServerEndpointParametersFactory.Create(
298306
operationSchemaMappings,
@@ -364,7 +372,7 @@ public void MaintainGlobalUsings(
364372
{
365373
var requiredUsing = NamespaceFactory.Create(
366374
settings.ProjectName,
367-
LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation));
375+
LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace));
368376

369377
if (!requiredUsings.Contains(requiredUsing, StringComparer.CurrentCulture))
370378
{
@@ -374,7 +382,7 @@ public void MaintainGlobalUsings(
374382

375383
var apiGroupNames = openApiDocument.GetApiGroupNames();
376384

377-
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(settings.ProjectName, LocationFactory.CreateWithApiGroupName(x, settings.ContractsLocation))));
385+
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(settings.ProjectName, NamespaceFactory.CreateWithApiGroupName(x, settings.ContractsNamespace))));
378386

379387
GlobalUsingsHelper.CreateOrUpdate(
380388
logger,
@@ -390,7 +398,11 @@ private string GetRouteByApiGroupName(
390398
var (key, _) = openApiDocument.Paths.FirstOrDefault(x => x.IsPathStartingSegmentName(apiGroupName));
391399
if (key is null)
392400
{
393-
throw new NotSupportedException($"{nameof(apiGroupName)} was not found in any route.");
401+
(key, _) = openApiDocument.Paths.FirstOrDefault(x => x.IsPathStartingApiGroupName(apiGroupName));
402+
if (key is null)
403+
{
404+
throw new NotSupportedException($"{nameof(apiGroupName)} was not found in any route.");
405+
}
394406
}
395407

396408
var routeSuffix = key
@@ -404,9 +416,11 @@ private void GenerateEnumerationType(
404416
string enumerationName,
405417
OpenApiSchema openApiSchemaEnumeration)
406418
{
407-
var contractsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation);
419+
var contractsNamespace = NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace);
408420

409-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
421+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
422+
423+
var contractsLocation = LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation);
410424

411425
var enumParameters = ContentGeneratorServerClientEnumParametersFactory.Create(
412426
codeGeneratorContentHeader,
@@ -435,12 +449,16 @@ private void GenerateModel(
435449
string apiGroupName,
436450
bool isSharedContract)
437451
{
452+
var contractsNamespace = isSharedContract
453+
? NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsNamespace)
454+
: NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsNamespace);
455+
456+
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsNamespace);
457+
438458
var contractsLocation = isSharedContract
439459
? LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation)
440460
: LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation);
441461

442-
var fullNamespace = NamespaceFactory.Create(settings.ProjectName, contractsLocation);
443-
444462
var parameters = ContentGeneratorServerClientModelParametersFactory.CreateForClass(
445463
codeGeneratorContentHeader,
446464
fullNamespace,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public void MaintainGlobalUsings(
154154

155155
var apiGroupNames = openApiDocument.GetApiGroupNames();
156156

157-
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(apiProjectName, LocationFactory.CreateWithApiGroupName(x, settings.ContractsLocation))));
157+
requiredUsings.AddRange(apiGroupNames.Select(x => NamespaceFactory.Create(apiProjectName, NamespaceFactory.CreateWithApiGroupName(x, settings.ContractsLocation))));
158158

159159
GlobalUsingsHelper.CreateOrUpdate(
160160
logger,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ public void MaintainGlobalUsings(
277277

278278
if (operationSchemaMappings.Any(apiOperation => apiOperation.Model.IsShared))
279279
{
280-
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, LocationFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation)));
280+
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, NamespaceFactory.CreateWithoutTemplateForApiGroupName(settings.ContractsLocation)));
281281
}
282282

283283
requiredUsings.Add("AutoFixture");
@@ -292,7 +292,7 @@ public void MaintainGlobalUsings(
292292
continue;
293293
}
294294

295-
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, LocationFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation)));
295+
requiredUsings.Add(NamespaceFactory.Create(apiProjectName, NamespaceFactory.CreateWithApiGroupName(apiGroupName, settings.ContractsLocation)));
296296
}
297297

298298
GlobalUsingsHelper.CreateOrUpdate(

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,31 @@ public static string GetApiGroupName(
1616
};
1717
}
1818

19+
public static bool IsPathStartingApiGroupName(
20+
this KeyValuePair<string, OpenApiPathItem> urlPath, string segmentName)
21+
{
22+
if (segmentName is null)
23+
{
24+
throw new ArgumentNullException(nameof(segmentName));
25+
}
26+
27+
var sa = urlPath.Key.Split('/', StringSplitOptions.RemoveEmptyEntries);
28+
if (string.IsNullOrEmpty(segmentName) && sa.Length == 0)
29+
{
30+
return true;
31+
}
32+
33+
if (sa.Length == 0)
34+
{
35+
return false;
36+
}
37+
38+
var apiGroupName = urlPath.GetApiGroupName();
39+
40+
return segmentName.Equals(apiGroupName, StringComparison.OrdinalIgnoreCase) ||
41+
segmentName.Equals(apiGroupName.EnsureSingular(), StringComparison.OrdinalIgnoreCase);
42+
}
43+
1944
public static ApiAuthorizeModel? ExtractApiPathAuthorization(
2045
this OpenApiPathItem apiPath)
2146
{

0 commit comments

Comments
 (0)