133 lines
2.1 KiB
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)
|
|
}
|