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/villages.go
2020-06-07 17:04:57 +02:00

95 lines
2.0 KiB
Go

package sdk
import (
"fmt"
"github.com/Kichiyaki/gqlgen-client/client"
"github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models"
)
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 (vs *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 := vs.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.Village, nil
}
type VillagesList struct {
Items []*models.Village `json:"items" gqlgen:"items"`
Total int `json:"total" gqlgen:"total"`
}
func (vs *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 := vs.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.Villages, nil
}