@@ -79,7 +79,7 @@ public class AspectModelOpenApiGenerator {
79
79
private static final String NOT_FOUND_ERROR = "NotFoundError" ;
80
80
private static final String OPERATIONS_SERVER_PATH = "/rpc-api/%s" ;
81
81
private static final String TENANT_ID = "/{tenant-id}" ;
82
- private static final String OPERATIONS_ENDPOINT_PATH = TENANT_ID + "/ %s/operations" ;
82
+ private static final String OPERATIONS_ENDPOINT_PATH = " %s/operations" ;
83
83
private static final String PARAMETER_CONVENTION = "^[a-zA-Z][a-zA-Z0-9-_]*" ;
84
84
private static final String QUERY_SERVER_PATH = "/query-api/%s" ;
85
85
private static final String READ_SERVER_PATH = "/api/%s" ;
@@ -348,21 +348,25 @@ private ObjectNode getPathsNode( final Aspect aspect, final String baseUrl, fina
348
348
final Optional <JsonNode > jsonProperties , final boolean includeQueryApi , final Optional <PagingOption > selectedPagingOption ) throws IOException {
349
349
final ObjectNode endpointPathsNode = factory .objectNode ();
350
350
final ObjectNode pathNode = factory .objectNode ();
351
- final String finalResourcePath = resourcePath .orElse ( deriveResourcePathFromAspectName ( aspect .getName () ) );
352
351
final ObjectNode propertiesNode = getPropertiesNode ( resourcePath , jsonProperties );
353
- endpointPathsNode .set ( TENANT_ID + "/" + finalResourcePath , pathNode );
352
+ // If resource path is provided then use it as the complete path and don't prefix tenant-id to it.
353
+ final String finalResourcePath = resourcePath
354
+ .map ( path -> path .startsWith ( "/" ) ? path : "/" + path )
355
+ .orElse ( TENANT_ID + "/" + deriveResourcePathFromAspectName ( aspect .getName () ) );
356
+
357
+ endpointPathsNode .set ( finalResourcePath , pathNode );
354
358
355
359
if ( includePaging ( aspect , selectedPagingOption ) ) {
356
360
pagingGenerator .setPagingProperties ( aspect , selectedPagingOption , propertiesNode );
357
361
}
358
362
359
- pathNode .set ( FIELD_GET , getRequestEndpointsRead ( aspect , propertiesNode ) );
363
+ pathNode .set ( FIELD_GET , getRequestEndpointsRead ( aspect , propertiesNode , resourcePath ) );
360
364
361
365
if ( includeQueryApi ) {
362
- pathNode .set ( FIELD_POST , getRequestEndpointFilter ( aspect , propertiesNode , baseUrl , apiVersion ) );
366
+ pathNode .set ( FIELD_POST , getRequestEndpointFilter ( aspect , propertiesNode , baseUrl , apiVersion , resourcePath ) );
363
367
}
364
368
365
- final Optional <ObjectNode > operationsNode = getRequestEndpointOperations ( aspect , propertiesNode , baseUrl , apiVersion );
369
+ final Optional <ObjectNode > operationsNode = getRequestEndpointOperations ( aspect , propertiesNode , baseUrl , apiVersion , resourcePath );
366
370
operationsNode .ifPresent (
367
371
jsonNodes -> endpointPathsNode
368
372
.set ( String .format ( OPERATIONS_ENDPOINT_PATH , finalResourcePath ), jsonNodes ) );
@@ -374,14 +378,14 @@ private String deriveResourcePathFromAspectName( final String aspectName ) {
374
378
}
375
379
376
380
private Optional <ObjectNode > getRequestEndpointOperations ( final Aspect aspect , final ObjectNode parameterNode , final String baseUrl ,
377
- final String apiVersion ) {
381
+ final String apiVersion , final Optional < String > resourcePath ) {
378
382
if ( !aspect .getOperations ().isEmpty () ) {
379
383
final ObjectNode postNode = factory .objectNode ();
380
384
final ObjectNode objectNode = factory .objectNode ();
381
385
setServers ( objectNode , baseUrl , apiVersion , OPERATIONS_SERVER_PATH );
382
386
objectNode .set ( "tags" , factory .arrayNode ().add ( aspect .getName () ) );
383
387
objectNode .put ( FIELD_OPERATION_ID , FIELD_POST + FIELD_OPERATION + aspect .getName () );
384
- objectNode .set ( FIELD_PARAMETERS , getRequiredParameters ( parameterNode ) );
388
+ objectNode .set ( FIELD_PARAMETERS , getRequiredParameters ( parameterNode , resourcePath . isEmpty () ) );
385
389
objectNode .set ( "requestBody" , factory .objectNode ().put ( REF , COMPONENTS_REQUESTS + FIELD_OPERATION ) );
386
390
final ObjectNode responseNode = factory .objectNode ();
387
391
objectNode .set ( FIELD_RESPONSES , responseNode );
@@ -445,12 +449,13 @@ private ObjectNode getResponseSchemaForOperation( final Optional<Property> prope
445
449
return schemaNode ;
446
450
}
447
451
448
- private ObjectNode getRequestEndpointFilter ( final Aspect aspect , final ObjectNode parameterNode , final String baseUrl , final String apiVersion ) {
452
+ private ObjectNode getRequestEndpointFilter ( final Aspect aspect , final ObjectNode parameterNode , final String baseUrl , final String apiVersion ,
453
+ final Optional <String > resourcePath ) {
449
454
final ObjectNode objectNode = factory .objectNode ();
450
455
setServers ( objectNode , baseUrl , apiVersion , QUERY_SERVER_PATH );
451
456
objectNode .set ( "tags" , factory .arrayNode ().add ( aspect .getName () ) );
452
457
objectNode .put ( FIELD_OPERATION_ID , FIELD_POST + aspect .getName () );
453
- objectNode .set ( FIELD_PARAMETERS , getRequiredParameters ( parameterNode ) );
458
+ objectNode .set ( FIELD_PARAMETERS , getRequiredParameters ( parameterNode , resourcePath . isEmpty () ) );
454
459
objectNode .set ( "requestBody" , getRequestBodyForFilter () );
455
460
objectNode .set ( FIELD_RESPONSES , getResponsesForGet ( aspect ) );
456
461
return objectNode ;
@@ -460,11 +465,11 @@ private ObjectNode getRequestBodyForFilter() {
460
465
return factory .objectNode ().put ( REF , COMPONENTS_REQUESTS + FIELD_FILTER );
461
466
}
462
467
463
- private ObjectNode getRequestEndpointsRead ( final Aspect aspect , final ObjectNode parameterNode ) {
468
+ private ObjectNode getRequestEndpointsRead ( final Aspect aspect , final ObjectNode parameterNode , final Optional < String > resourcePath ) {
464
469
final ObjectNode objectNode = factory .objectNode ();
465
470
objectNode .set ( "tags" , factory .arrayNode ().add ( aspect .getName () ) );
466
471
objectNode .put ( FIELD_OPERATION_ID , FIELD_GET + aspect .getName () );
467
- objectNode .set ( FIELD_PARAMETERS , getRequiredParameters ( parameterNode ) );
472
+ objectNode .set ( FIELD_PARAMETERS , getRequiredParameters ( parameterNode , resourcePath . isEmpty () ) );
468
473
objectNode .set ( FIELD_RESPONSES , getResponsesForGet ( aspect ) );
469
474
return objectNode ;
470
475
}
@@ -491,9 +496,11 @@ private ObjectNode getSuccessfulNode( final Aspect aspect ) {
491
496
return factory .objectNode ().put ( REF , COMPONENTS_RESPONSES + aspect .getName () );
492
497
}
493
498
494
- private ArrayNode getRequiredParameters ( final ObjectNode parameterNode ) {
499
+ private ArrayNode getRequiredParameters ( final ObjectNode parameterNode , final boolean includeTenantIdNode ) {
495
500
final ArrayNode parameters = factory .arrayNode ();
496
- parameters .add ( getTenantIdNode () );
501
+ if (includeTenantIdNode ) {
502
+ parameters .add ( getTenantIdNode () );
503
+ }
497
504
parameterNode .forEach ( parameters ::add );
498
505
return parameters ;
499
506
}
@@ -538,4 +545,4 @@ private void handleRecursiveSchemas( final ObjectNode aspectSchema, final Object
538
545
}
539
546
}
540
547
}
541
- }
548
+ }
0 commit comments