github.com/pouriasharifi/gqlgen@v0.7.2/example/selection/selection.go (about) 1 //go:generate gorunpkg github.com/99designs/gqlgen 2 3 package selection 4 5 import ( 6 context "context" 7 "fmt" 8 "time" 9 10 "github.com/99designs/gqlgen/graphql" 11 "github.com/vektah/gqlparser/ast" 12 ) 13 14 type Resolver struct{} 15 16 func (r *Resolver) Query() QueryResolver { 17 return &queryResolver{r} 18 } 19 20 type queryResolver struct{ *Resolver } 21 22 func (r *queryResolver) Events(ctx context.Context) ([]Event, error) { 23 var sels []string 24 25 reqCtx := graphql.GetRequestContext(ctx) 26 fieldSelections := graphql.GetResolverContext(ctx).Field.Selections 27 for _, sel := range fieldSelections { 28 switch sel := sel.(type) { 29 case *ast.Field: 30 sels = append(sels, fmt.Sprintf("%s as %s", sel.Name, sel.Alias)) 31 case *ast.InlineFragment: 32 sels = append(sels, fmt.Sprintf("inline fragment on %s", sel.TypeCondition)) 33 case *ast.FragmentSpread: 34 fragment := reqCtx.Doc.Fragments.ForName(sel.Name) 35 sels = append(sels, fmt.Sprintf("named fragment %s on %s", sel.Name, fragment.TypeCondition)) 36 } 37 } 38 39 var events []Event 40 for i := 0; i < 10; i++ { 41 if i%2 == 0 { 42 events = append(events, &Like{ 43 Selection: sels, 44 Collected: formatCollected(graphql.CollectFieldsCtx(ctx, []string{"Like"})), 45 Reaction: ":=)", 46 Sent: time.Now(), 47 }) 48 } else { 49 events = append(events, &Post{ 50 Selection: sels, 51 Collected: formatCollected(graphql.CollectFieldsCtx(ctx, []string{"Post"})), 52 Message: "Hey", 53 Sent: time.Now(), 54 }) 55 } 56 } 57 58 return events, nil 59 } 60 61 func formatCollected(cf []graphql.CollectedField) []string { 62 var res []string 63 64 for _, f := range cf { 65 res = append(res, fmt.Sprintf("%s as %s", f.Name, f.Alias)) 66 } 67 return res 68 }