2020-06-04 15:45:56 +00:00
|
|
|
package resolvers
|
|
|
|
|
2020-06-21 10:26:57 +00:00
|
|
|
import (
|
|
|
|
"context"
|
2021-05-05 17:32:45 +00:00
|
|
|
"github.com/tribalwarshelp/shared/tw/twmodel"
|
2020-06-04 15:45:56 +00:00
|
|
|
|
2020-06-21 10:26:57 +00:00
|
|
|
"github.com/99designs/gqlgen/graphql"
|
2021-05-05 17:32:45 +00:00
|
|
|
|
2020-06-21 10:26:57 +00:00
|
|
|
"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
|
2020-06-07 14:53:32 +00:00
|
|
|
for rctx != nil {
|
|
|
|
server, ok = rctx.Args["server"].(string)
|
2020-06-04 15:45:56 +00:00
|
|
|
if ok {
|
|
|
|
break
|
|
|
|
}
|
2020-06-07 14:53:32 +00:00
|
|
|
rctx = rctx.Parent
|
2020-06-04 15:45:56 +00:00
|
|
|
}
|
|
|
|
return server, ok
|
|
|
|
}
|
2020-06-21 10:26:57 +00:00
|
|
|
|
2021-05-05 17:32:45 +00:00
|
|
|
func getPlayer(ctx context.Context, id int) *twmodel.Player {
|
2020-06-21 10:26:57 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2021-05-05 17:32:45 +00:00
|
|
|
func getVillage(ctx context.Context, id int) *twmodel.Village {
|
2020-06-21 10:26:57 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2021-05-05 17:32:45 +00:00
|
|
|
func getTribe(ctx context.Context, id int) *twmodel.Tribe {
|
2020-06-21 10:26:57 +00:00
|
|
|
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
|
|
|
|
}
|
2020-12-25 11:07:54 +00:00
|
|
|
|
2021-03-21 12:03:39 +00:00
|
|
|
func findField(ctx context.Context, name string) bool {
|
2020-12-25 11:07:54 +00:00
|
|
|
for _, field := range graphql.CollectFieldsCtx(ctx, nil) {
|
2021-03-21 12:03:39 +00:00
|
|
|
if field.Name == name {
|
2020-12-25 11:13:12 +00:00
|
|
|
return true
|
2020-12-25 11:07:54 +00:00
|
|
|
}
|
|
|
|
}
|
2020-12-25 11:13:12 +00:00
|
|
|
return false
|
2020-12-25 11:07:54 +00:00
|
|
|
}
|
2021-03-21 12:03:39 +00:00
|
|
|
|
|
|
|
func shouldCount(ctx context.Context) bool {
|
|
|
|
return findField(ctx, countField)
|
|
|
|
}
|
|
|
|
|
|
|
|
func shouldSelectItems(ctx context.Context) bool {
|
|
|
|
return findField(ctx, itemsField)
|
|
|
|
}
|