tribally report logic
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package tribally
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -8,6 +9,7 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func BindTribally(apiKey, userId string) (string, error) {
|
||||
@@ -92,3 +94,61 @@ func VerifyTribally(token string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type UserChapter struct {
|
||||
Email string `json:"email"`
|
||||
Chapter int `json:"chapter"`
|
||||
}
|
||||
|
||||
func PostUserChapter(apiKey string, chapters ...UserChapter) error {
|
||||
var players []map[string]any
|
||||
for _, c := range chapters {
|
||||
players = append(players, map[string]any{
|
||||
"playerId": c.Email,
|
||||
"isWinner": true,
|
||||
"chapter": c.Chapter,
|
||||
})
|
||||
}
|
||||
arg := map[string]any{
|
||||
"activityId": "abc1234",
|
||||
"gameStartedAt": time.Now().Format(time.DateTime),
|
||||
"players": players,
|
||||
}
|
||||
|
||||
body, err := json.Marshal(arg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
url := "https://api.tribally.games/activity/create"
|
||||
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
req.Header.Add("Content-Type", "application/json")
|
||||
req.Header.Add("Accept", "application/json")
|
||||
req.Header.Add("x-api-key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
if res.StatusCode != http.StatusOK {
|
||||
return errors.New(res.Status)
|
||||
}
|
||||
result := struct {
|
||||
Error string `json:"error"`
|
||||
Code string `json:"code"`
|
||||
}{}
|
||||
data, _ := io.ReadAll(res.Body)
|
||||
fmt.Println(string(data))
|
||||
return nil
|
||||
err = json.NewDecoder(res.Body).Decode(&result)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if result.Error != "" {
|
||||
return fmt.Errorf("error: %s, code: %s", result.Error, result.Code)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
25
internal/pkg/tribally/tribally_test.go
Normal file
25
internal/pkg/tribally/tribally_test.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package tribally
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const (
|
||||
apiKey = "088847b7172bdffa1eb564a581bcf903"
|
||||
)
|
||||
|
||||
func TestBindTribally(t *testing.T) {
|
||||
url, err := BindTribally(apiKey, "lhj168os@gmail.com")
|
||||
require.Nil(t, err)
|
||||
fmt.Println(url)
|
||||
}
|
||||
|
||||
func TestPostUserChapter(t *testing.T) {
|
||||
err := PostUserChapter(apiKey, UserChapter{
|
||||
Email: "lhj168os@gmail.com",
|
||||
Chapter: 3,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
}
|
||||
Reference in New Issue
Block a user