...
1
2
3 package server
4
5 import (
6 "context"
7 "fmt"
8 "time"
9
10 models "github.com/99designs/gqlgen/integration/server/models-go"
11 "github.com/99designs/gqlgen/integration/server/remote_api"
12 )
13
14 type CustomError struct {
15 UserMessage string
16 InternalError string
17 }
18
19 func (e *CustomError) Error() string {
20 return e.InternalError
21 }
22
23 type Resolver struct{}
24
25 func (r *Resolver) User() UserResolver {
26 return &userResolver{r}
27 }
28
29 func (r *Resolver) Element() ElementResolver {
30 return &elementResolver{r}
31 }
32
33 func (r *Resolver) Query() QueryResolver {
34 return &queryResolver{r}
35 }
36
37 type elementResolver struct{ *Resolver }
38
39 func (r *elementResolver) Error(ctx context.Context, obj *models.Element) (bool, error) {
40
41 time.Sleep(time.Duration(obj.ID) * 10 * time.Millisecond)
42
43 return false, fmt.Errorf("boom")
44 }
45
46 func (r *elementResolver) Mismatched(ctx context.Context, obj *models.Element) ([]bool, error) {
47 return []bool{true}, nil
48 }
49
50 func (r *elementResolver) Child(ctx context.Context, obj *models.Element) (*models.Element, error) {
51 return &models.Element{ID: obj.ID * 10}, nil
52 }
53
54 type queryResolver struct{ *Resolver }
55
56 func (r *queryResolver) Error(ctx context.Context, typeArg *models.ErrorType) (bool, error) {
57 if *typeArg == models.ErrorTypeCustom {
58 return false, &CustomError{"User message", "Internal Message"}
59 }
60
61 return false, fmt.Errorf("normal error")
62 }
63
64 func (r *queryResolver) Path(ctx context.Context) ([]*models.Element, error) {
65 return []*models.Element{{ID: 1}, {ID: 2}, {ID: 3}, {ID: 4}}, nil
66 }
67
68 func (r *queryResolver) Coercion(ctx context.Context, input []*models.ListCoercion) (bool, error) {
69 return true, nil
70 }
71
72 func (r *queryResolver) Date(ctx context.Context, filter models.DateFilter) (bool, error) {
73 if filter.Value != "asdf" {
74 return false, fmt.Errorf("value must be asdf")
75 }
76
77 if *filter.Timezone != "UTC" {
78 return false, fmt.Errorf("timezone must be utc")
79 }
80
81 if *filter.Op != models.DateFilterOpEq {
82 return false, fmt.Errorf("unknown op %s", *filter.Op)
83 }
84
85 return true, nil
86 }
87
88 func (r *queryResolver) Viewer(ctx context.Context) (*models.Viewer, error) {
89 return &models.Viewer{
90 User: &remote_api.User{Name: "Bob", Likes: []string{"Alice"}, PhoneNumber: "1234567890"},
91 }, nil
92 }
93
94 func (r *queryResolver) JSONEncoding(ctx context.Context) (string, error) {
95 return "\U000fe4ed", nil
96 }
97
98 func (r *queryResolver) Complexity(ctx context.Context, value int) (bool, error) {
99 return true, nil
100 }
101
102 type userResolver struct{ *Resolver }
103
104 func (r *userResolver) Likes(ctx context.Context, obj *remote_api.User) ([]string, error) {
105 return obj.Likes, nil
106 }
107
View as plain text