93 lines
2.6 KiB
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
|
|
}
|