代码拉取完成,页面将自动刷新
//go:generate gorunpkg github.com/99designs/gqlgen
package dataloader
import (
"context"
"fmt"
"math/rand"
"time"
)
type Customer struct {
ID int `json:"id"`
Name string `json:"name"`
AddressID int
}
type Order struct {
ID int `json:"id"`
Date time.Time `json:"date"`
Amount float64 `json:"amount"`
}
type Resolver struct{}
func (r *Resolver) Customer() CustomerResolver {
return &customerResolver{r}
}
func (r *Resolver) Order() OrderResolver {
return &orderResolver{r}
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type customerResolver struct{ *Resolver }
func (r *customerResolver) Address(ctx context.Context, obj *Customer) (*Address, error) {
return ctxLoaders(ctx).addressByID.Load(obj.AddressID)
}
func (r *customerResolver) Orders(ctx context.Context, obj *Customer) ([]Order, error) {
return ctxLoaders(ctx).ordersByCustomer.Load(obj.ID)
}
type orderResolver struct{ *Resolver }
func (r *orderResolver) Items(ctx context.Context, obj *Order) ([]Item, error) {
return ctxLoaders(ctx).itemsByOrder.Load(obj.ID)
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Customers(ctx context.Context) ([]Customer, error) {
fmt.Println("SELECT * FROM customer")
time.Sleep(5 * time.Millisecond)
return []Customer{
{ID: 1, Name: "Bob", AddressID: 1},
{ID: 2, Name: "Alice", AddressID: 3},
{ID: 3, Name: "Eve", AddressID: 4},
}, nil
}
// this method is here to test code generation of nested arrays
func (r *queryResolver) Torture1d(ctx context.Context, customerIds []int) ([]Customer, error) {
result := make([]Customer, len(customerIds))
for i, id := range customerIds {
result[i] = Customer{ID: id, Name: fmt.Sprintf("%d", i), AddressID: rand.Int() % 10}
}
return result, nil
}
// this method is here to test code generation of nested arrays
func (r *queryResolver) Torture2d(ctx context.Context, customerIds [][]int) ([][]Customer, error) {
result := make([][]Customer, len(customerIds))
for i := range customerIds {
inner := make([]Customer, len(customerIds[i]))
for j := range customerIds[i] {
inner[j] = Customer{ID: customerIds[i][j], Name: fmt.Sprintf("%d %d", i, j), AddressID: rand.Int() % 10}
}
result[i] = inner
}
return result, nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。