github.com/Capventis/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  }