_examples/deferexample/schema.resolvers.go (38 lines of code) (raw):
package deferexample
// This file will be automatically regenerated based on the schema, any resolver implementations
// will be copied through when generating and any unknown code will be moved to the end.
// Code generated by github.com/99designs/gqlgen version v0.17.56
import (
"context"
"crypto/rand"
"fmt"
"math/big"
"time"
)
// CreateTodo is the resolver for the createTodo field.
func (r *mutationResolver) CreateTodo(_ context.Context, input NewTodo) (*Todo, error) {
randNumber, _ := rand.Int(rand.Reader, big.NewInt(100))
todo := &Todo{
Text: input.Text,
ID: fmt.Sprintf("T%d", randNumber),
userID: input.UserID,
}
r.mu.Lock()
r.todos = append(r.todos, todo)
r.mu.Unlock()
return todo, nil
}
// Todos is the resolver for the todos field.
func (r *queryResolver) Todos(_ context.Context) ([]*Todo, error) {
r.mu.RLock()
defer r.mu.RUnlock()
return r.todos, nil
}
// User is the resolver for the user field on Todos. Having this
// separate resolver makes the field "deferrable," ie GQLGen will handle
// an operation with an @defer directive applied to the given field as a
// separately-delivered response, and depending on the logic applied in
// the transport can deliver them in the same response or serially.
func (r *todoResolver) User(_ context.Context, t *Todo) (*User, error) {
time.Sleep(time.Millisecond * 10)
return &User{
ID: t.userID,
Name: fmt.Sprintf("User %v", t.userID),
}, nil
}
// Mutation returns MutationResolver implementation.
func (r *Resolver) Mutation() MutationResolver { return &mutationResolver{r} }
// Query returns QueryResolver implementation.
func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
// Todo returns TodoResolver implementation.
func (r *Resolver) Todo() TodoResolver { return &todoResolver{r} }
type mutationResolver struct{ *Resolver }
type queryResolver struct{ *Resolver }
type todoResolver struct{ *Resolver }