Skip to content

Commit

Permalink
Merge pull request #30 from eoussama/develop
Browse files Browse the repository at this point in the history
Patch `0.0.3`
  • Loading branch information
eoussama authored May 21, 2024
2 parents d3ac327 + 7ea44c5 commit 405cb7e
Show file tree
Hide file tree
Showing 9 changed files with 91 additions and 44 deletions.
10 changes: 8 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
FREEGO_WEBHOOK_PORT=
FREEGO_WEBHOOK_ROUTE=
# Global
GLOBAL_VERSION=0.0.3

# Webhook
FREEGO_WEBHOOK_PORT=8080
FREEGO_WEBHOOK_ROUTE=/webhook
FREEGO_WEBHOOK_SECRET=

# FreeStuff
FREEGO_FREESTUFF_API_KEY=
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func main() {
}

// Get information on the first free game
resp_game_info, err := client.GetGame(enums.FilterInfo, resp_games_free[0])
resp_game_info, err := client.GetGame(enums.FilterInfo, resp_games_free...)
if err != nil {
panic(fmt.Sprintf("[Game Info Error] %s", err))
}
Expand All @@ -100,6 +100,10 @@ func main() {
fmt.Println("approved games:", len(resp_games_approved))
fmt.Println("game details info:", resp_game_info)

for i, game_info := range resp_game_info {
fmt.Println("game details info", i, ":", game_info)
}

// Event listener for free games
go func() {
err = client.On(enums.EventFreeGames, func(e *models.Event, err error) {
Expand Down
7 changes: 5 additions & 2 deletions cmd/freego/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func main() {
panic(fmt.Sprintf("[Approved Games Error] %s", err))
}

resp_game_info, err := client.GetGame(enums.FilterInfo, resp_games_free[0])
resp_game_info, err := client.GetGame(enums.FilterInfo, resp_games_free...)
if err != nil {
panic(fmt.Sprintf("[Game Info Error] %s", err))
}
Expand All @@ -46,7 +46,10 @@ func main() {
fmt.Println("all games:", len(resp_games_all))
fmt.Println("free games:", len(resp_games_free))
fmt.Println("approved games:", len(resp_games_approved))
fmt.Println("game details info:", resp_game_info)

for i, game_info := range resp_game_info {
fmt.Println("game details info", i, ":", game_info)
}

go func() {
err = client.On(enums.EventFreeGames, func(e *models.Event, err error) {
Expand Down
7 changes: 1 addition & 6 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,7 @@ ENV GO111MODULE=on
ENV PRJECT_PATH=$GOPATH/src/github.com/eoussama/freego
WORKDIR $PRJECT_PATH

COPY .env .
COPY ./src .
COPY ./go.* .
COPY ./main.go .
COPY ./scripts/smee.sh .
COPY ./scripts/entrypoint.sh .
COPY . .

RUN go mod tidy
RUN source .env
Expand Down
63 changes: 42 additions & 21 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ import (
)

type Client struct {
Config models.Config
Config *models.Config
}

func Config(options *models.Options) models.Config {
func Config(options *models.Options) *models.Config {
return models.Config{}.Build(options)
}

func Init(config ...models.Config) (*Client, error) {
func Init(config ...*models.Config) (*Client, error) {
switch len(config) {
case 0:
var config = models.Config{}.Build(&models.Options{})
Expand Down Expand Up @@ -79,32 +79,53 @@ func (c Client) GetGames(filter types.TFilter) ([]int, error) {
return make([]int, 0), errors.New("data is not of type []int")
}

func (c Client) GetGame(filter types.TFilter, gameId int) (*models.GameInfo, error) {
endpoint, err := consts.EndpointGame.Prepend(c.Config.Url).Append(filter).Build(gameId)
if err != nil {
return nil, err
}
func (c Client) GetGame(filter types.TFilter, gameIds ...int) ([]*models.GameInfo, error) {
const batchSize = 5
var allResults []*models.GameInfo

response, err := helpers.MakeRequest(endpoint, c.Config)
if err != nil {
return nil, err
} else if !response.Success {
return nil, errors.New(response.Error)
}
for i := 0; i < len(gameIds); i += batchSize {
end := i + batchSize
if end > len(gameIds) {
end = len(gameIds)
}

if responseData, ok := response.Data.(map[string]interface{}); ok {
var key string = strconv.Itoa(gameId)
var data map[string]interface{} = responseData[key].(map[string]interface{})
batch := gameIds[i:end]
idsStr := helpers.JoinNumbers(batch, "+")

result, err := models.GameInfo{}.From(data)
endpoint, err := consts.EndpointGame.Prepend(c.Config.Url).Append(filter).Build(idsStr)
if err != nil {
return nil, err
}

return result, nil
} else {
return nil, errors.New("invalid payload")
response, err := helpers.MakeRequest(endpoint, c.Config)
if err != nil {
return nil, err
} else if !response.Success {
return nil, errors.New(response.Error)
}

if responseData, ok := response.Data.(map[string]interface{}); ok {
for _, id := range batch {
key := strconv.Itoa(id)

data, ok := responseData[key].(map[string]interface{})
if !ok {
return nil, errors.New("invalid payload structure")
}

result, err := models.GameInfo{}.From(data)
if err != nil {
return nil, err
}

allResults = append(allResults, result)
}
} else {
return nil, errors.New("invalid payload")
}
}

return allResults, nil
}

func (c Client) On(event types.TEvent, callback func(*models.Event, error)) error {
Expand Down
4 changes: 3 additions & 1 deletion scripts/start.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/bin/bash

tag="0.0.1"
source .env

tag=$GLOBAL_VERSION
project="freego"
username="eoussama"
image="$username/$project:$tag"
Expand Down
4 changes: 2 additions & 2 deletions src/helpers/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/eoussama/freego/src/models"
)

func MakeRequest(endpoint []interface{}, config models.Config) (*models.Response, error) {
func MakeRequest(endpoint []interface{}, config *models.Config) (*models.Response, error) {
client := &http.Client{}

url := GetPath(endpoint)
Expand Down Expand Up @@ -40,7 +40,7 @@ func MakeRequest(endpoint []interface{}, config models.Config) (*models.Response
return &response, nil
}

func setHeaders(req *http.Request, config models.Config) {
func setHeaders(req *http.Request, config *models.Config) {
var authHeader string

if config.IsPartner {
Expand Down
16 changes: 16 additions & 0 deletions src/helpers/string.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package helpers

import (
"strconv"
"strings"
)

func JoinNumbers(nums []int, separator string) string {
strNums := make([]string, len(nums))

for i, id := range nums {
strNums[i] = strconv.Itoa(id)
}

return strings.Join(strNums, separator)
}
18 changes: 9 additions & 9 deletions src/models/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ type Config struct {
ApiKey string
}

func (c Config) Build(options *Options) Config {
func (c Config) Build(options *Options) *Config {
var resolveOption = func(optionValue string, fallbackValue string) string {
if options != nil && len(optionValue) > 0 {
return optionValue
Expand All @@ -20,14 +20,14 @@ func (c Config) Build(options *Options) Config {
}
}

return Config{
IsPartner: options.FreestuffPartner,
Url: "https://api.freestuffbot.xyz/v1",
Port: resolveOption(options.WebhookPort, c.getEnv("FREEGO_WEBHOOK_PORT", "8080")),
Secret: resolveOption(options.WebhookSecret, c.getEnv("FREEGO_WEBHOOK_SECRET", "")),
ApiKey: resolveOption(options.FreestuffApiKey, c.getEnv("FREEGO_FREESTUFF_API_KEY", "")),
Route: resolveOption(options.WebhookRoute, c.getEnv("FREEGO_WEBHOOK_ROUTE", "/webhook")),
}
c.IsPartner = options.FreestuffPartner
c.Url = "https://api.freestuffbot.xyz/v1"
c.Port = resolveOption(options.WebhookPort, c.getEnv("FREEGO_WEBHOOK_PORT", "8080"))
c.Secret = resolveOption(options.WebhookSecret, c.getEnv("FREEGO_WEBHOOK_SECRET", ""))
c.ApiKey = resolveOption(options.FreestuffApiKey, c.getEnv("FREEGO_FREESTUFF_API_KEY", ""))
c.Route = resolveOption(options.WebhookRoute, c.getEnv("FREEGO_WEBHOOK_ROUTE", "/webhook"))

return &c
}

func (c Config) getEnv(key string, fallback string) string {
Expand Down

0 comments on commit 405cb7e

Please sign in to comment.