@@ -455,50 +455,58 @@ func orderFields(n *gen.Type) ([]*OrderTerm, error) {
455
455
edgeNamesWithThroughTables := make (map [string ]interface {})
456
456
for _ , e := range n .Edges {
457
457
name := strings .ToUpper (e .Name )
458
- switch ant , err := annotation (e .Annotations ); {
459
- case err != nil :
458
+ ant , err := annotation (e .Annotations )
459
+ if err != nil {
460
460
return nil , err
461
- case ant .Skip .Is (SkipOrderField ), ant .OrderField == "" :
462
- case strings .HasSuffix (ant .OrderField , "_COUNT" ) &&
463
- edgeNamesWithThroughTables [strings .TrimSuffix (ant .OrderField , "_COUNT" )] != nil :
464
- // skip the through table annotations, annotations are applied on the `edge.To` edge instead
465
- case ant .OrderField == fmt .Sprintf ("%s_COUNT" , name ):
466
- // Validate that the edge has a count ordering.
467
- if _ , err := e .OrderCountName (); err != nil {
468
- return nil , fmt .Errorf ("entgql: invalid order field %s defined on edge %s.%s: %w" , ant .OrderField , n .Name , e .Name , err )
469
- }
470
- terms = append (terms , & OrderTerm {
471
- Owner : n ,
472
- GQL : ant .OrderField ,
473
- Type : n ,
474
- Edge : e ,
475
- Count : true ,
476
- })
477
- case strings .HasPrefix (ant .OrderField , name + "_" ):
478
- // Validate that the edge has an edge field ordering.
479
- if _ , err := e .OrderFieldName (); err != nil {
480
- return nil , fmt .Errorf ("entgql: invalid order field %s defined on edge %s.%s: %w" , ant .OrderField , n .Name , e .Name , err )
461
+ }
462
+ if ant .Skip .Is (SkipOrderField ) || ant .OrderField == "" {
463
+ continue
464
+ }
465
+ orderFields := strings .Split (ant .OrderField , "," )
466
+ for _ , orderField := range orderFields {
467
+ switch {
468
+ case ant .Skip .Is (SkipOrderField ), orderField == "" :
469
+ case strings .HasSuffix (orderField , "_COUNT" ) &&
470
+ edgeNamesWithThroughTables [strings .TrimSuffix (orderField , "_COUNT" )] != nil :
471
+ // skip the through table annotations, annotations are applied on the `edge.To` edge instead
472
+ case orderField == fmt .Sprintf ("%s_COUNT" , name ):
473
+ // Validate that the edge has a count ordering.
474
+ if _ , err := e .OrderCountName (); err != nil {
475
+ return nil , fmt .Errorf ("entgql: invalid order field %s defined on edge %s.%s: %w" , orderField , n .Name , e .Name , err )
476
+ }
477
+ terms = append (terms , & OrderTerm {
478
+ Owner : n ,
479
+ GQL : orderField ,
480
+ Type : n ,
481
+ Edge : e ,
482
+ Count : true ,
483
+ })
484
+ case strings .HasPrefix (orderField , name + "_" ):
485
+ // Validate that the edge has an edge field ordering.
486
+ if _ , err := e .OrderFieldName (); err != nil {
487
+ return nil , fmt .Errorf ("entgql: invalid order field %s defined on edge %s.%s: %w" , orderField , n .Name , e .Name , err )
488
+ }
489
+ ef := strings .TrimPrefix (orderField , name + "_" )
490
+ idx := slices .IndexFunc (e .Type .Fields , func (f * gen.Field ) bool {
491
+ ant , err := annotation (f .Annotations )
492
+ return err == nil && ant .OrderField == ef
493
+ })
494
+ if idx == - 1 {
495
+ return nil , fmt .Errorf ("entgql: order field %s defined on edge %s.%s was not found on its reference" , orderField , n .Name , e .Name )
496
+ }
497
+ terms = append (terms , & OrderTerm {
498
+ Owner : n ,
499
+ GQL : orderField ,
500
+ Edge : e ,
501
+ Type : e .Type ,
502
+ Field : e .Type .Fields [idx ],
503
+ })
504
+ default :
505
+ return nil , fmt .Errorf ("entgql: invalid order field defined on edge %s.%s" , n .Name , e .Name )
481
506
}
482
- ef := strings .TrimPrefix (ant .OrderField , name + "_" )
483
- idx := slices .IndexFunc (e .Type .Fields , func (f * gen.Field ) bool {
484
- ant , err := annotation (f .Annotations )
485
- return err == nil && ant .OrderField == ef
486
- })
487
- if idx == - 1 {
488
- return nil , fmt .Errorf ("entgql: order field %s defined on edge %s.%s was not found on its reference" , ant .OrderField , n .Name , e .Name )
507
+ if e .Through != nil {
508
+ edgeNamesWithThroughTables [name ] = true
489
509
}
490
- terms = append (terms , & OrderTerm {
491
- Owner : n ,
492
- GQL : ant .OrderField ,
493
- Edge : e ,
494
- Type : e .Type ,
495
- Field : e .Type .Fields [idx ],
496
- })
497
- default :
498
- return nil , fmt .Errorf ("entgql: invalid order field defined on edge %s.%s" , n .Name , e .Name )
499
- }
500
- if e .Through != nil {
501
- edgeNamesWithThroughTables [name ] = true
502
510
}
503
511
}
504
512
return terms , nil
0 commit comments