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

104 lines
2.1 KiB
Go

package sdk
import (
"fmt"
"github.com/tribalwarshelp/shared/tw/twmodel"
"github.com/Kichiyaki/gqlgen-client/client"
"github.com/pkg/errors"
)
type Player struct {
sdk *SDK
}
type PlayerInclude struct {
Tribe bool
}
func (incl PlayerInclude) String() string {
i := ""
if incl.Tribe {
i += fmt.Sprintf(`
tribe {
%s
}
`, tribeFields)
}
return i
}
func (p *Player) Read(server string, id int, include *PlayerInclude) (*twmodel.Player, error) {
if server == "" {
return nil, ErrServerNameIsEmpty
}
if include == nil {
include = &PlayerInclude{}
}
resp := struct {
Player twmodel.Player `json:"player" gqlgen:"player"`
}{}
query := fmt.Sprintf(`
query player($server: String!, $id: Int!) {
player(server: $server, id: $id) {
%s
%s
}
}
`, playerFields, include.String())
err := p.sdk.Post(query, &resp, client.Var("server", server), client.Var("id", id))
if err != nil {
return nil, errors.Wrap(err, "twhelp sdk")
}
return &resp.Player, nil
}
type PlayerList struct {
Items []*twmodel.Player `json:"items" gqlgen:"items"`
Total int `json:"total" gqlgen:"total"`
}
func (p *Player) Browse(server string,
limit,
offset int,
sort []string,
filter *twmodel.PlayerFilter,
include *PlayerInclude) (*PlayerList, error) {
if server == "" {
return nil, ErrServerNameIsEmpty
}
if filter == nil {
filter = &twmodel.PlayerFilter{}
}
if include == nil {
include = &PlayerInclude{}
}
resp := struct {
Players PlayerList `json:"players" gqlgen:"players"`
}{}
query := fmt.Sprintf(`
query players($server: String!, $filter: PlayerFilter, $limit: Int, $offset: Int, $sort: [String!]) {
players(server: $server, filter: $filter, limit: $limit, offset: $offset, sort: $sort) {
items {
%s
%s
}
total
}
}
`, playerFields, include.String())
err := p.sdk.Post(query,
&resp,
client.Var("filter", filter),
client.Var("server", server),
client.Var("limit", limit),
client.Var("offset", offset),
client.Var("sort", sort))
if err != nil {
return nil, errors.Wrap(err, "twhelp sdk")
}
return &resp.Players, nil
}