93 lines
1.9 KiB
Go
93 lines
1.9 KiB
Go
|
package sdk
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/Kichiyaki/gqlgen-client/client"
|
||
|
"github.com/pkg/errors"
|
||
|
"github.com/tribalwarshelp/shared/models"
|
||
|
)
|
||
|
|
||
|
type Players 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 (ps *Players) Read(server string, id int, include *PlayerInclude) (*models.Player, error) {
|
||
|
if server == "" {
|
||
|
return nil, ErrServerNameIsEmpty
|
||
|
}
|
||
|
if include == nil {
|
||
|
include = &PlayerInclude{}
|
||
|
}
|
||
|
resp := struct {
|
||
|
Player *models.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 := ps.sdk.client.Post(minifyString(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 PlayersList struct {
|
||
|
Items []*models.Player `json:"items" gqlgen:"items"`
|
||
|
Total int `json:"total" gqlgen:"total"`
|
||
|
}
|
||
|
|
||
|
func (ps *Players) Browse(server string, filter *models.PlayerFilter, include *PlayerInclude) (*PlayersList, error) {
|
||
|
if server == "" {
|
||
|
return nil, ErrServerNameIsEmpty
|
||
|
}
|
||
|
if filter == nil {
|
||
|
filter = &models.PlayerFilter{}
|
||
|
}
|
||
|
if include == nil {
|
||
|
include = &PlayerInclude{}
|
||
|
}
|
||
|
resp := struct {
|
||
|
Players *PlayersList `json:"players" gqlgen:"players"`
|
||
|
}{}
|
||
|
query := fmt.Sprintf(`
|
||
|
query players($server: String!, $filter: PlayerFilter) {
|
||
|
players(server: $server, filter: $filter) {
|
||
|
items {
|
||
|
%s
|
||
|
%s
|
||
|
}
|
||
|
total
|
||
|
}
|
||
|
}
|
||
|
`, playerFields, include.String())
|
||
|
|
||
|
err := ps.sdk.client.Post(minifyString(query), &resp, client.Var("filter", filter), client.Var("server", server))
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrap(err, "twhelp sdk")
|
||
|
}
|
||
|
return resp.Players, nil
|
||
|
}
|