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/player.go

93 lines
2.6 KiB
Go

package resolvers
import (
"context"
"github.com/Kichiyaki/goutil/safeptr"
"github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/tribalwarshelp/api/graphql/generated"
"github.com/tribalwarshelp/api/middleware"
"github.com/tribalwarshelp/api/player"
)
func (r *playerResolver) Tribe(ctx context.Context, obj *twmodel.Player) (*twmodel.Tribe, error) {
if obj.Tribe != nil {
return obj.Tribe, nil
}
return getTribe(ctx, obj.TribeID), nil
}
func (r *playerResolver) Servers(ctx context.Context, obj *twmodel.Player) ([]string, error) {
versionDataLoaders := middleware.VersionDataLoadersFromContext(ctx)
if versionDataLoaders != nil {
serverKey, _ := getServer(ctx)
if loaders, ok := versionDataLoaders[twmodel.VersionCodeFromServerKey(serverKey)]; ok {
servers, err := loaders.PlayerServersByID.Load(obj.ID)
if err == nil {
return servers, nil
}
}
}
return []string{}, nil
}
func (r *playerResolver) NameChanges(ctx context.Context, obj *twmodel.Player) ([]*twmodel.PlayerNameChange, error) {
versionDataLoaders := middleware.VersionDataLoadersFromContext(ctx)
if versionDataLoaders != nil {
serverKey, _ := getServer(ctx)
if loaders, ok := versionDataLoaders[twmodel.VersionCodeFromServerKey(serverKey)]; ok {
servers, err := loaders.PlayerNameChangesByID.Load(obj.ID)
if err == nil {
return servers, nil
}
}
}
return []*twmodel.PlayerNameChange{}, nil
}
func (r *queryResolver) Players(ctx context.Context,
server string,
f *twmodel.PlayerFilter,
limit *int,
offset *int,
sort []string) (*generated.PlayerList, error) {
var err error
list := &generated.PlayerList{}
list.Items, list.Total, err = r.PlayerUcase.Fetch(ctx, player.FetchConfig{
Server: server,
Filter: f,
Sort: sort,
Limit: safeptr.SafeIntPointer(limit, 0),
Offset: safeptr.SafeIntPointer(offset, 0),
Count: shouldCount(ctx),
Select: shouldSelectItems(ctx),
})
return list, err
}
func (r *queryResolver) Player(ctx context.Context, server string, id int) (*twmodel.Player, error) {
return r.PlayerUcase.GetByID(ctx, server, id)
}
func (r *queryResolver) SearchPlayer(ctx context.Context,
version string,
name *string,
id *int,
limit *int,
offset *int,
sort []string) (*generated.FoundPlayerList, error) {
var err error
list := &generated.FoundPlayerList{}
list.Items, list.Total, err = r.PlayerUcase.SearchPlayer(ctx, player.SearchPlayerConfig{
Sort: sort,
Limit: safeptr.SafeIntPointer(limit, 0),
Offset: safeptr.SafeIntPointer(offset, 0),
Version: version,
Name: safeptr.SafeStringPointer(name, ""),
ID: safeptr.SafeIntPointer(id, 0),
Count: shouldCount(ctx),
})
return list, err
}