@@ -390,40 +390,44 @@ func (g *Gateway) generateGraphQLFields(resourceScheme *spec.Schema, typePrefix
390
390
}
391
391
}
392
392
393
- // Add relations field if we have relationship fields
393
+ // Add individual relationship fields if we have them
394
394
if len (relationshipFields ) > 0 && currentGVK != nil {
395
395
g .log .Info ().
396
396
Str ("typePrefix" , typePrefix ).
397
397
Strs ("relationshipFields" , relationshipFields ).
398
398
Str ("currentGVK" , fmt .Sprintf ("%+v" , currentGVK )).
399
- Msg ("Attempting to create relations field" )
400
-
401
- relationsType := g .createRelationsType (typePrefix , relationshipFields )
402
- if relationsType != nil {
403
- g .log .Info ().
404
- Str ("typePrefix" , typePrefix ).
405
- Msg ("Successfully created relations type" )
406
-
407
- relationshipResolver := g .resolver .GetRelationshipResolver ()
408
- if relationshipResolver != nil {
409
- fields ["relations" ] = & graphql.Field {
410
- Type : relationsType ,
411
- Resolve : relationshipResolver .CreateRelationsResolver (* currentGVK , relationshipFields ),
399
+ Msg ("Attempting to create individual relation fields" )
400
+
401
+ relationshipResolver := g .resolver .GetRelationshipResolver ()
402
+ if relationshipResolver != nil {
403
+ for _ , fieldName := range relationshipFields {
404
+ targetKind := g .extractTargetKind (fieldName )
405
+ relationFieldName := strings .ToLower (string (targetKind [0 ])) + targetKind [1 :] + "Relation"
406
+
407
+ relationFieldType := g .createEnhancedRefType (targetKind )
408
+ if relationFieldType != nil {
409
+ fields [relationFieldName ] = & graphql.Field {
410
+ Type : relationFieldType ,
411
+ Resolve : relationshipResolver .CreateSingleRelationResolver (* currentGVK , fieldName ),
412
+ }
413
+ g .log .Info ().
414
+ Str ("typePrefix" , typePrefix ).
415
+ Str ("fieldName" , fieldName ).
416
+ Str ("targetKind" , targetKind ).
417
+ Str ("relationFieldName" , relationFieldName ).
418
+ Msg ("Added individual relation field" )
419
+ } else {
420
+ g .log .Info ().
421
+ Str ("typePrefix" , typePrefix ).
422
+ Str ("fieldName" , fieldName ).
423
+ Str ("targetKind" , targetKind ).
424
+ Msg ("Failed to create relation field type" )
412
425
}
413
-
414
- g .log .Info ().
415
- Str ("typePrefix" , typePrefix ).
416
- Strs ("relationshipFields" , relationshipFields ).
417
- Msg ("Added relations field to type" )
418
- } else {
419
- g .log .Info ().
420
- Str ("typePrefix" , typePrefix ).
421
- Msg ("No relationship resolver available" )
422
426
}
423
427
} else {
424
428
g .log .Info ().
425
429
Str ("typePrefix" , typePrefix ).
426
- Msg ("Failed to create relations type " )
430
+ Msg ("No relationship resolver available " )
427
431
}
428
432
} else {
429
433
if len (relationshipFields ) == 0 {
@@ -735,40 +739,6 @@ func (g *Gateway) getOrCreateTargetResourceType(targetKind string, sourceGVK *sc
735
739
return nil , fmt .Errorf ("could not find or create GraphQL type for target kind: %s" , targetKind )
736
740
}
737
741
738
- // createRelationsType creates a GraphQL type for the relations field
739
- func (g * Gateway ) createRelationsType (typePrefix string , relationshipFields []string ) graphql.Output {
740
- relationFields := graphql.Fields {}
741
-
742
- for _ , fieldName := range relationshipFields {
743
- targetKind := g .extractTargetKind (fieldName )
744
- if targetKind == "" {
745
- continue
746
- }
747
-
748
- // Create field without "Ref" suffix
749
- relationName := strings .TrimSuffix (fieldName , "Ref" )
750
- relationFields [relationName ] = & graphql.Field {
751
- Type : g .createEnhancedRefType (targetKind ),
752
- }
753
-
754
- g .log .Debug ().
755
- Str ("fieldName" , fieldName ).
756
- Str ("relationName" , relationName ).
757
- Str ("targetKind" , targetKind ).
758
- Msg ("Added field to relations type" )
759
- }
760
-
761
- if len (relationFields ) == 0 {
762
- return nil
763
- }
764
-
765
- relationsTypeName := typePrefix + "Relations"
766
- return graphql .NewObject (graphql.ObjectConfig {
767
- Name : relationsTypeName ,
768
- Fields : relationFields ,
769
- })
770
- }
771
-
772
742
// createEnhancedRefType creates a GraphQL type for enhanced references
773
743
func (g * Gateway ) createEnhancedRefType (targetKind string ) graphql.Output {
774
744
typeName := targetKind + "Relation"
0 commit comments