init
This commit is contained in:
commit
a93595abdd
9
go.mod
Normal file
9
go.mod
Normal file
|
@ -0,0 +1,9 @@
|
|||
module github.com/tribalwarshelp/golang-sdk
|
||||
|
||||
go 1.14
|
||||
|
||||
require (
|
||||
github.com/Kichiyaki/gqlgen-client v0.0.0-20200604145848-274796c104f4
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/tribalwarshelp/shared v0.0.0-20200604161459-deeeccf99815
|
||||
)
|
27
go.sum
Normal file
27
go.sum
Normal file
|
@ -0,0 +1,27 @@
|
|||
github.com/Kichiyaki/gqlgen-client v0.0.0-20200604145848-274796c104f4 h1:QiOarkkKHdFYI+0m6F1H3rRzP6DqJsKJVLirGXEHGSU=
|
||||
github.com/Kichiyaki/gqlgen-client v0.0.0-20200604145848-274796c104f4/go.mod h1:weCVl47ZANyeX60sdsSl0bWHf8HWXyVFmlGHHCR/i5M=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.6.0 h1:jlIyCplCJFULU/01vCkhKuTyc3OorI3bJFuw6obfgho=
|
||||
github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20200604161459-deeeccf99815 h1:c+BTJgJyif/HDt8bRxqNaK7zQReI59ho9yWdk7a/gNo=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20200604161459-deeeccf99815/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8 h1:jL/vaozO53FMfZLySWM+4nulF3gQEC6q5jH90LPomDo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
161
main.go
Normal file
161
main.go
Normal file
|
@ -0,0 +1,161 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/tribalwarshelp/golang-sdk/sdk"
|
||||
"github.com/tribalwarshelp/shared/models"
|
||||
)
|
||||
|
||||
func main() {
|
||||
api := sdk.New("http://localhost:8080/graphql")
|
||||
|
||||
langVersion, err := api.LangVersions.Read(models.LanguageTagPL)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(langVersion.Name, langVersion.Tag, langVersion.Host, langVersion.Timezone)
|
||||
|
||||
langVersionsList, err := api.LangVersions.Browse(&models.LangVersionFilter{
|
||||
HostMATCH: "plemiona%",
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for _, langVersion := range langVersionsList.Items {
|
||||
log.Println(langVersion.Name, langVersion.Tag, langVersion.Host, langVersion.Timezone)
|
||||
}
|
||||
|
||||
server, err := api.Servers.Read("pl151")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(server.Key, server.Status)
|
||||
|
||||
serversList, err := api.Servers.Browse(nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for _, server := range serversList.Items {
|
||||
log.Print()
|
||||
log.Println(server.Key, server.Status)
|
||||
}
|
||||
|
||||
player, err := api.Players.Read("pl151", 699813215, nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(player.ID, player.Name, player.RankAtt, player.RankDef, player.RankSup)
|
||||
|
||||
playersList, err := api.Players.Browse("pl151", &models.PlayerFilter{
|
||||
Sort: "rank ASC",
|
||||
Limit: 10,
|
||||
}, &sdk.PlayerInclude{
|
||||
Tribe: true,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for _, player := range playersList.Items {
|
||||
log.Print()
|
||||
log.Println(player.ID, player.Name, player.RankAtt, player.RankDef, player.RankSup)
|
||||
if player.Tribe != nil {
|
||||
log.Println(player.Tribe.ID, player.Tribe.Tag)
|
||||
}
|
||||
}
|
||||
|
||||
tribe, err := api.Tribes.Read("pl151", 894)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(tribe.ID, tribe.Name, tribe.Tag, tribe.RankAtt, tribe.RankDef)
|
||||
|
||||
tribesList, err := api.Tribes.Browse("pl151", &models.TribeFilter{
|
||||
TagIEQ: ":.+.:",
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for _, tribe := range tribesList.Items {
|
||||
log.Println(tribe.ID, tribe.Name, tribe.Tag, tribe.RankAtt, tribe.RankDef)
|
||||
}
|
||||
|
||||
village, err := api.Villages.Read("pl151", 28299, &sdk.VillageInclude{
|
||||
Player: true,
|
||||
PlayerInclude: sdk.PlayerInclude{
|
||||
Tribe: true,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(village.ID, village.Name)
|
||||
if village.Player != nil {
|
||||
log.Println(village.Player.ID, village.Player.Name)
|
||||
if village.Player.Tribe != nil {
|
||||
log.Println(village.Player.Tribe.ID, village.Player.Tribe.Tag)
|
||||
}
|
||||
}
|
||||
|
||||
villageslist, err := api.Villages.Browse("pl151", &models.VillageFilter{
|
||||
PlayerID: []int{699270453},
|
||||
Sort: "id ASC",
|
||||
Limit: 10,
|
||||
}, &sdk.VillageInclude{
|
||||
Player: true,
|
||||
PlayerInclude: sdk.PlayerInclude{
|
||||
Tribe: true,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
for _, village := range villageslist.Items {
|
||||
fmt.Print("\n\n")
|
||||
log.Println(village.ID, village.Name)
|
||||
if village.Player != nil {
|
||||
log.Println(village.Player.ID, village.Player.Name)
|
||||
if village.Player.Tribe != nil {
|
||||
log.Println(village.Player.Tribe.ID, village.Player.Tribe.Tag)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ennoblements, err := api.Ennoblements.Browse("pl151", &sdk.EnnoblementInclude{
|
||||
NewOwner: true,
|
||||
NewOwnerInclude: sdk.PlayerInclude{
|
||||
Tribe: true,
|
||||
},
|
||||
OldOwner: true,
|
||||
OldOwnerInclude: sdk.PlayerInclude{
|
||||
Tribe: true,
|
||||
},
|
||||
Village: true,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for _, ennoblement := range ennoblements {
|
||||
fmt.Print("\n\n")
|
||||
if ennoblement.NewOwner != nil {
|
||||
log.Println(ennoblement.NewOwner.ID, ennoblement.NewOwner.Name)
|
||||
if ennoblement.NewOwner.Tribe != nil {
|
||||
log.Println(ennoblement.NewOwner.Tribe.ID, ennoblement.NewOwner.Tribe.Tag)
|
||||
}
|
||||
}
|
||||
if ennoblement.OldOwner != nil {
|
||||
log.Println(ennoblement.OldOwner.ID, ennoblement.OldOwner.Name)
|
||||
if ennoblement.OldOwner.Tribe != nil {
|
||||
log.Println(ennoblement.OldOwner.Tribe.ID, ennoblement.OldOwner.Tribe.Tag)
|
||||
}
|
||||
}
|
||||
if ennoblement.Village != nil {
|
||||
log.Println(ennoblement.Village.ID, ennoblement.Village.Name)
|
||||
}
|
||||
}
|
||||
}
|
513
sdk/sdk.go
Normal file
513
sdk/sdk.go
Normal file
|
@ -0,0 +1,513 @@
|
|||
package sdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/Kichiyaki/gqlgen-client/client"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/tribalwarshelp/shared/models"
|
||||
)
|
||||
|
||||
const (
|
||||
commonODFields = `rankAtt
|
||||
scoreAtt
|
||||
rankDef
|
||||
scoreDef
|
||||
rankTotal
|
||||
scoreTotal`
|
||||
)
|
||||
|
||||
var (
|
||||
ErrServerNameIsEmpty = fmt.Errorf("twhelp sdk: Server name is empty")
|
||||
playerODFields = fmt.Sprintf(`
|
||||
%s
|
||||
rankSup
|
||||
scoreSup
|
||||
`, commonODFields)
|
||||
playerFields = fmt.Sprintf(`
|
||||
id
|
||||
name
|
||||
totalVillages
|
||||
points
|
||||
rank
|
||||
exist
|
||||
%s
|
||||
`, playerODFields)
|
||||
tribeFields = fmt.Sprintf(`
|
||||
id
|
||||
name
|
||||
tag
|
||||
totalMembers
|
||||
totalVillages
|
||||
points
|
||||
allPoints
|
||||
rank
|
||||
exist
|
||||
%s
|
||||
`, commonODFields)
|
||||
villageFields = `
|
||||
id
|
||||
name
|
||||
bonus
|
||||
points
|
||||
x
|
||||
y
|
||||
`
|
||||
)
|
||||
|
||||
type SDK struct {
|
||||
uri string
|
||||
client *client.Client
|
||||
httpClient *http.Client
|
||||
LangVersions *LangVersions
|
||||
Servers *Servers
|
||||
Players *Players
|
||||
Tribes *Tribes
|
||||
Villages *Villages
|
||||
Ennoblements *Ennoblements
|
||||
}
|
||||
|
||||
func New(uri string) *SDK {
|
||||
sdk := &SDK{
|
||||
uri: uri,
|
||||
httpClient: &http.Client{},
|
||||
}
|
||||
sdk.client = client.New(http.HandlerFunc(sdk.handler))
|
||||
sdk.LangVersions = &LangVersions{sdk}
|
||||
sdk.Servers = &Servers{sdk}
|
||||
sdk.Players = &Players{sdk}
|
||||
sdk.Tribes = &Tribes{sdk}
|
||||
sdk.Villages = &Villages{sdk}
|
||||
sdk.Ennoblements = &Ennoblements{sdk}
|
||||
return sdk
|
||||
}
|
||||
|
||||
func (sdk *SDK) handler(w http.ResponseWriter, r *http.Request) {
|
||||
resp, err := sdk.httpClient.Post(sdk.uri, "application/json", r.Body)
|
||||
if err != nil {
|
||||
w.WriteHeader(400)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
w.WriteHeader(400)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
w.WriteHeader(resp.StatusCode)
|
||||
w.Write(body)
|
||||
}
|
||||
|
||||
type LangVersions struct {
|
||||
sdk *SDK
|
||||
}
|
||||
|
||||
func (lv *LangVersions) Read(tag models.LanguageTag) (*models.LangVersion, error) {
|
||||
resp := struct {
|
||||
LangVersion *models.LangVersion `json:"langVersion" gqlgen:"langVersion"`
|
||||
}{}
|
||||
query := `
|
||||
query langVersion($tag: LanguageTag!) {
|
||||
langVersion(tag: $tag) {
|
||||
tag
|
||||
name
|
||||
host
|
||||
timezone
|
||||
}
|
||||
}
|
||||
`
|
||||
err := lv.sdk.client.Post(minify(query), &resp, client.Var("tag", tag))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.LangVersion, nil
|
||||
}
|
||||
|
||||
type LangVersionsList struct {
|
||||
Items []*models.LangVersion `json:"items" gqlgen:"items"`
|
||||
Total int `json:"total" gqlgen:"total"`
|
||||
}
|
||||
|
||||
func (lv *LangVersions) Browse(filter *models.LangVersionFilter) (*LangVersionsList, error) {
|
||||
if filter == nil {
|
||||
filter = &models.LangVersionFilter{}
|
||||
}
|
||||
resp := struct {
|
||||
LangVersions *LangVersionsList `json:"langVersions" gqlgen:"langVersions"`
|
||||
}{}
|
||||
query := `
|
||||
query langVersions($filter: LangVersionFilter) {
|
||||
langVersions(filter: $filter) {
|
||||
items {
|
||||
tag
|
||||
name
|
||||
host
|
||||
timezone
|
||||
}
|
||||
total
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
err := lv.sdk.client.Post(minify(query), &resp, client.Var("filter", filter))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.LangVersions, nil
|
||||
}
|
||||
|
||||
type Servers struct {
|
||||
sdk *SDK
|
||||
}
|
||||
|
||||
func (ss *Servers) Read(key string) (*models.Server, error) {
|
||||
resp := struct {
|
||||
Server *models.Server `json:"server" gqlgen:"server"`
|
||||
}{}
|
||||
query := `
|
||||
query server($key: String!) {
|
||||
server(key: $key) {
|
||||
id
|
||||
key
|
||||
status
|
||||
langVersionTag
|
||||
}
|
||||
}
|
||||
`
|
||||
err := ss.sdk.client.Post(minify(query), &resp, client.Var("key", key))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Server, nil
|
||||
}
|
||||
|
||||
type ServersList struct {
|
||||
Items []*models.Server `json:"items" gqlgen:"items"`
|
||||
Total int `json:"total" gqlgen:"total"`
|
||||
}
|
||||
|
||||
func (ss *Servers) Browse(filter *models.ServerFilter) (*ServersList, error) {
|
||||
if filter == nil {
|
||||
filter = &models.ServerFilter{}
|
||||
}
|
||||
resp := struct {
|
||||
Servers *ServersList `json:"servers" gqlgen:"servers"`
|
||||
}{}
|
||||
|
||||
query := `
|
||||
query servers($filter: ServerFilter) {
|
||||
servers(filter: $filter) {
|
||||
items {
|
||||
id
|
||||
key
|
||||
status
|
||||
langVersionTag
|
||||
}
|
||||
total
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
err := ss.sdk.client.Post(minify(query), &resp, client.Var("filter", filter))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Servers, nil
|
||||
}
|
||||
|
||||
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(minify(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(minify(query), &resp, client.Var("filter", filter), client.Var("server", server))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Players, nil
|
||||
}
|
||||
|
||||
type Tribes struct {
|
||||
sdk *SDK
|
||||
}
|
||||
|
||||
func (ss *Tribes) Read(server string, id int) (*models.Tribe, error) {
|
||||
resp := struct {
|
||||
Tribe *models.Tribe `json:"tribe" gqlgen:"tribe"`
|
||||
}{}
|
||||
query := fmt.Sprintf(`
|
||||
query tribe($server: String!, $id: Int!) {
|
||||
tribe(server: $server, id: $id) {
|
||||
%s
|
||||
}
|
||||
}
|
||||
`, tribeFields)
|
||||
err := ss.sdk.client.Post(minify(query), &resp, client.Var("server", server), client.Var("id", id))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Tribe, nil
|
||||
}
|
||||
|
||||
type TribesList struct {
|
||||
Items []*models.Tribe `json:"items" gqlgen:"items"`
|
||||
Total int `json:"total" gqlgen:"total"`
|
||||
}
|
||||
|
||||
func (ss *Tribes) Browse(server string, filter *models.TribeFilter) (*TribesList, error) {
|
||||
if filter == nil {
|
||||
filter = &models.TribeFilter{}
|
||||
}
|
||||
resp := struct {
|
||||
Tribes *TribesList `json:"tribes" gqlgen:"tribes"`
|
||||
}{}
|
||||
query := fmt.Sprintf(`
|
||||
query tribes($server: String!, $filter: TribeFilter) {
|
||||
tribes(server: $server, filter: $filter) {
|
||||
items {
|
||||
%s
|
||||
}
|
||||
total
|
||||
}
|
||||
}
|
||||
`, tribeFields)
|
||||
|
||||
err := ss.sdk.client.Post(minify(query), &resp, client.Var("server", server), client.Var("filter", filter))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Tribes, nil
|
||||
}
|
||||
|
||||
type Villages struct {
|
||||
sdk *SDK
|
||||
}
|
||||
|
||||
type VillageInclude struct {
|
||||
Player bool
|
||||
PlayerInclude PlayerInclude
|
||||
}
|
||||
|
||||
func (incl VillageInclude) String() string {
|
||||
i := ""
|
||||
if incl.Player {
|
||||
i += fmt.Sprintf(`
|
||||
player {
|
||||
%s
|
||||
%s
|
||||
}
|
||||
`, playerFields, incl.PlayerInclude.String())
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
func (ps *Villages) Read(server string, id int, include *VillageInclude) (*models.Village, error) {
|
||||
if server == "" {
|
||||
return nil, ErrServerNameIsEmpty
|
||||
}
|
||||
if include == nil {
|
||||
include = &VillageInclude{}
|
||||
}
|
||||
resp := struct {
|
||||
Village *models.Village `json:"village" gqlgen:"village"`
|
||||
}{}
|
||||
|
||||
query := fmt.Sprintf(`
|
||||
query village($server: String!, $id: Int!) {
|
||||
village(server: $server, id: $id) {
|
||||
%s
|
||||
%s
|
||||
}
|
||||
}
|
||||
`, villageFields, include.String())
|
||||
err := ps.sdk.client.Post(minify(query), &resp, client.Var("server", server), client.Var("id", id))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Village, nil
|
||||
}
|
||||
|
||||
type VillagesList struct {
|
||||
Items []*models.Village `json:"items" gqlgen:"items"`
|
||||
Total int `json:"total" gqlgen:"total"`
|
||||
}
|
||||
|
||||
func (ps *Villages) Browse(server string, filter *models.VillageFilter, include *VillageInclude) (*VillagesList, error) {
|
||||
if server == "" {
|
||||
return nil, ErrServerNameIsEmpty
|
||||
}
|
||||
if filter == nil {
|
||||
filter = &models.VillageFilter{}
|
||||
}
|
||||
if include == nil {
|
||||
include = &VillageInclude{}
|
||||
}
|
||||
resp := struct {
|
||||
Villages *VillagesList
|
||||
}{}
|
||||
query := fmt.Sprintf(`
|
||||
query villages($server: String!, $filter: VillageFilter) {
|
||||
villages(server: $server, filter: $filter) {
|
||||
items {
|
||||
%s
|
||||
%s
|
||||
}
|
||||
total
|
||||
}
|
||||
}
|
||||
`, villageFields, include.String())
|
||||
|
||||
err := ps.sdk.client.Post(minify(query), &resp, client.Var("filter", filter), client.Var("server", server))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Villages, nil
|
||||
}
|
||||
|
||||
type Ennoblements struct {
|
||||
sdk *SDK
|
||||
}
|
||||
|
||||
type EnnoblementInclude struct {
|
||||
NewOwner bool
|
||||
NewOwnerInclude PlayerInclude
|
||||
OldOwner bool
|
||||
OldOwnerInclude PlayerInclude
|
||||
Village bool
|
||||
}
|
||||
|
||||
func (incl EnnoblementInclude) String() string {
|
||||
i := ""
|
||||
if incl.NewOwner {
|
||||
i += fmt.Sprintf(`
|
||||
newOwner {
|
||||
%s
|
||||
%s
|
||||
}
|
||||
`, playerFields, incl.NewOwnerInclude.String())
|
||||
}
|
||||
if incl.OldOwner {
|
||||
i += fmt.Sprintf(`
|
||||
oldOwner {
|
||||
%s
|
||||
%s
|
||||
}
|
||||
`, playerFields, incl.OldOwnerInclude.String())
|
||||
}
|
||||
if incl.Village {
|
||||
i += fmt.Sprintf(`
|
||||
village {
|
||||
%s
|
||||
}
|
||||
`, villageFields)
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
type ennoblementsResponse struct {
|
||||
Ennoblements []*models.Ennoblement `json:"ennoblements" gqlgen:"ennoblements"`
|
||||
}
|
||||
|
||||
func (ps *Ennoblements) Browse(server string, include *EnnoblementInclude) ([]*models.Ennoblement, error) {
|
||||
if server == "" {
|
||||
return nil, ErrServerNameIsEmpty
|
||||
}
|
||||
if include == nil {
|
||||
include = &EnnoblementInclude{}
|
||||
}
|
||||
resp := &ennoblementsResponse{}
|
||||
query := fmt.Sprintf(`
|
||||
query ennoblements($server: String!) {
|
||||
ennoblements(server: $server) {
|
||||
ennobledAt
|
||||
%s
|
||||
}
|
||||
}
|
||||
`, include.String())
|
||||
err := ps.sdk.client.Post(minify(query), &resp, client.Var("server", server))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "twhelp sdk")
|
||||
}
|
||||
return resp.Ennoblements, nil
|
||||
}
|
||||
|
||||
func minify(str string) string {
|
||||
return strings.Join(strings.Fields(str), " ")
|
||||
}
|
Reference in New Issue
Block a user