@@ -409,14 +409,17 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
409
409
private generateFilterParameters ( model : DataModel ) {
410
410
const result : OAPI . ParameterObject [ ] = [ ] ;
411
411
412
+ const hasMultipleIds = model . fields . filter ( ( f ) => isIdField ( f ) ) . length > 1 ;
413
+
412
414
for ( const field of model . fields ) {
413
415
if ( isForeignKeyField ( field ) ) {
414
416
// no filtering with foreign keys because one can filter
415
417
// directly on the relationship
416
418
continue ;
417
419
}
418
420
419
- if ( isIdField ( field ) ) {
421
+ // For multiple ids, make each id field filterable like a regular field
422
+ if ( isIdField ( field ) && ! hasMultipleIds ) {
420
423
// id filter
421
424
result . push ( this . makeFilterParameter ( field , 'id' , 'Id filter' ) ) ;
422
425
continue ;
@@ -843,7 +846,9 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
843
846
}
844
847
845
848
private generateModelEntity ( model : DataModel , mode : 'read' | 'create' | 'update' ) : OAPI . SchemaObject {
846
- const fields = model . fields . filter ( ( f ) => ! isIdField ( f ) ) ;
849
+ const idFields = model . fields . filter ( ( f ) => isIdField ( f ) ) ;
850
+ // For compound ids, each component is also exposed as a separate field
851
+ const fields = idFields . length > 1 ? model . fields : model . fields . filter ( ( f ) => ! isIdField ( f ) ) ;
847
852
848
853
const attributes : Record < string , OAPI . SchemaObject > = { } ;
849
854
const relationships : Record < string , OAPI . ReferenceObject | OAPI . SchemaObject > = { } ;
@@ -886,8 +891,8 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
886
891
887
892
if ( mode === 'create' ) {
888
893
// 'id' is required if there's no default value
889
- const idField = model . fields . find ( ( f ) => isIdField ( f ) ) ;
890
- if ( idField && ! hasAttribute ( idField , '@default' ) ) {
894
+ const idFields = model . fields . filter ( ( f ) => isIdField ( f ) ) ;
895
+ if ( idFields . length && idFields . every ( ( f ) => ! hasAttribute ( f , '@default' ) ) ) {
891
896
properties = { id : { type : 'string' } , ...properties } ;
892
897
toplevelRequired . unshift ( 'id' ) ;
893
898
}
0 commit comments