This repository has been archived on 2022-09-04. You can view files and clone it, but cannot push or open issues or pull requests.
api/graphql/resolvers/helpers.go

87 lines
1.8 KiB
Go
Raw Normal View History

2020-06-04 15:45:56 +00:00
package resolvers
import (
"context"
"github.com/tribalwarshelp/shared/tw/twmodel"
2020-06-04 15:45:56 +00:00
"github.com/99designs/gqlgen/graphql"
"github.com/tribalwarshelp/api/middleware"
)
func getServer(ctx context.Context) (string, bool) {
rctx := graphql.GetFieldContext(ctx)
2020-06-04 15:45:56 +00:00
server := ""
ok := false
for rctx != nil {
server, ok = rctx.Args["server"].(string)
2020-06-04 15:45:56 +00:00
if ok {
break
}
rctx = rctx.Parent
2020-06-04 15:45:56 +00:00
}
return server, ok
}
func getPlayer(ctx context.Context, id int) *twmodel.Player {
if server, ok := getServer(ctx); ok {
dataloaders := middleware.ServerDataLoadersFromContext(ctx)
if dataloaders != nil {
if dataloader, ok := dataloaders[server]; ok {
player, _ := dataloader.PlayerByID.Load(id)
if player != nil {
return player
}
}
}
}
return nil
}
func getVillage(ctx context.Context, id int) *twmodel.Village {
if server, ok := getServer(ctx); ok {
dataloaders := middleware.ServerDataLoadersFromContext(ctx)
if dataloaders != nil {
if dataloader, ok := dataloaders[server]; ok {
player, _ := dataloader.VillageByID.Load(id)
if player != nil {
return player
}
}
}
}
return nil
}
func getTribe(ctx context.Context, id int) *twmodel.Tribe {
if server, ok := getServer(ctx); ok {
dataloaders := middleware.ServerDataLoadersFromContext(ctx)
if dataloaders != nil {
if dataloader, ok := dataloaders[server]; ok {
player, _ := dataloader.TribeByID.Load(id)
if player != nil {
return player
}
}
}
}
return nil
}
func findField(ctx context.Context, name string) bool {
for _, field := range graphql.CollectFieldsCtx(ctx, nil) {
if field.Name == name {
return true
}
}
return false
}
func shouldCount(ctx context.Context) bool {
return findField(ctx, countField)
}
func shouldSelectItems(ctx context.Context) bool {
return findField(ctx, itemsField)
}