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

133 lines
2.1 KiB
Go

package sdk
import (
"fmt"
"github.com/Kichiyaki/goutil/strutil"
"io/ioutil"
"net/http"
"time"
"github.com/Kichiyaki/gqlgen-client/client"
)
var (
ErrServerNameIsEmpty = fmt.Errorf("twhelp sdk: Server name is empty")
commonODFields = `
rankAtt
scoreAtt
rankDef
scoreDef
rankTotal
scoreTotal
`
playerODFields = fmt.Sprintf(`
%s
rankSup
scoreSup
`, commonODFields)
playerFields = fmt.Sprintf(`
id
name
totalVillages
points
rank
exists
dailyGrowth
joinedAt
deletedAt
bestRank
bestRankAt
mostPoints
mostPointsAt
mostVillages
mostVillagesAt
%s
`, playerODFields)
tribeFields = fmt.Sprintf(`
id
name
tag
totalMembers
totalVillages
points
allPoints
rank
exists
dominance
createdAt
deletedAt
bestRank
bestRankAt
mostPoints
mostPointsAt
mostVillages
mostVillagesAt
%s
`, commonODFields)
villageFields = `
id
name
bonus
points
x
y
`
versionFields = `
code
name
host
timezone
`
)
type SDK struct {
url string
client *client.Client
httpClient *http.Client
Version *Version
Server *Server
Player *Player
Tribe *Tribe
Village *Village
Ennoblement *Ennoblement
}
func New(url string) *SDK {
sdk := &SDK{
url: url,
httpClient: &http.Client{
Timeout: 10 * time.Second,
},
}
sdk.client = client.New(http.HandlerFunc(sdk.doRequest))
sdk.Version = &Version{sdk}
sdk.Server = &Server{sdk}
sdk.Player = &Player{sdk}
sdk.Tribe = &Tribe{sdk}
sdk.Village = &Village{sdk}
sdk.Ennoblement = &Ennoblement{sdk}
return sdk
}
func (sdk *SDK) Post(query string, response interface{}, options ...client.Option) error {
return sdk.client.Post(strutil.Minify(query, " "), response, options...)
}
func (sdk *SDK) doRequest(w http.ResponseWriter, r *http.Request) {
resp, err := sdk.httpClient.Post(sdk.url, "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)
}