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
Raw Normal View History

2020-06-04 16:33:14 +00:00
package sdk
import (
"fmt"
2021-05-02 14:07:54 +00:00
"github.com/Kichiyaki/goutil/strutil"
2020-06-04 16:33:14 +00:00
"io/ioutil"
"net/http"
2020-06-21 15:21:40 +00:00
"time"
2020-06-04 16:33:14 +00:00
"github.com/Kichiyaki/gqlgen-client/client"
)
var (
ErrServerNameIsEmpty = fmt.Errorf("twhelp sdk: Server name is empty")
2020-06-04 16:38:17 +00:00
commonODFields = `
rankAtt
scoreAtt
rankDef
scoreDef
rankTotal
scoreTotal
`
playerODFields = fmt.Sprintf(`
2020-06-04 16:33:14 +00:00
%s
rankSup
scoreSup
`, commonODFields)
playerFields = fmt.Sprintf(`
id
name
totalVillages
points
rank
exists
2020-06-23 14:56:13 +00:00
dailyGrowth
joinedAt
deletedAt
bestRank
bestRankAt
mostPoints
mostPointsAt
mostVillages
mostVillagesAt
2020-06-04 16:33:14 +00:00
%s
`, playerODFields)
tribeFields = fmt.Sprintf(`
id
name
tag
totalMembers
totalVillages
points
allPoints
rank
exists
2020-06-23 14:56:13 +00:00
dominance
createdAt
deletedAt
bestRank
bestRankAt
mostPoints
mostPointsAt
mostVillages
mostVillagesAt
2020-06-04 16:33:14 +00:00
%s
`, commonODFields)
villageFields = `
id
name
bonus
points
x
y
`
versionFields = `
code
2020-06-18 15:48:23 +00:00
name
host
timezone
`
2020-06-04 16:33:14 +00:00
)
type SDK struct {
url string
client *client.Client
httpClient *http.Client
Version *Version
Server *Server
Player *Player
Tribe *Tribe
Village *Village
Ennoblement *Ennoblement
2020-06-04 16:33:14 +00:00
}
2020-06-07 15:04:57 +00:00
func New(url string) *SDK {
2020-06-04 16:33:14 +00:00
sdk := &SDK{
2020-06-21 15:21:40 +00:00
url: url,
httpClient: &http.Client{
Timeout: 10 * time.Second,
},
2020-06-04 16:33:14 +00:00
}
2020-06-18 15:16:32 +00:00
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}
2020-06-04 16:33:14 +00:00
return sdk
}
2020-07-27 15:24:43 +00:00
func (sdk *SDK) Post(query string, response interface{}, options ...client.Option) error {
2021-05-02 14:07:54 +00:00
return sdk.client.Post(strutil.Minify(query, " "), response, options...)
2020-07-27 15:24:43 +00:00
}
2020-06-18 15:16:32 +00:00
func (sdk *SDK) doRequest(w http.ResponseWriter, r *http.Request) {
2020-06-07 15:04:57 +00:00
resp, err := sdk.httpClient.Post(sdk.url, "application/json", r.Body)
2020-06-04 16:33:14 +00:00
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)
}