bump github.com/tribalwarshelp/shared + refactor liveenoblement repository

This commit is contained in:
Dawid Wysokiński 2020-10-31 12:33:01 +01:00
parent 84983c8d1e
commit ad2f56ad73
8 changed files with 41 additions and 111 deletions

3
go.mod
View File

@ -16,8 +16,9 @@ require (
github.com/pkg/errors v0.9.1
github.com/segmentio/encoding v0.1.14 // indirect
github.com/tribalwarshelp/map-generator v0.0.0-20200801113621-fb8892ceb243
github.com/tribalwarshelp/shared v0.0.0-20200824102353-ef15dea9c1a3
github.com/tribalwarshelp/shared v0.0.0-20201031105753-5d4d8b307747
github.com/vektah/gqlparser/v2 v2.0.1
go.opentelemetry.io/otel v0.9.0 // indirect
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect
google.golang.org/protobuf v1.25.0 // indirect

9
go.sum
View File

@ -176,8 +176,10 @@ github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJ
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@ -191,10 +193,8 @@ github.com/tribalwarshelp/map-generator v0.0.0-20200801113621-fb8892ceb243 h1:ke
github.com/tribalwarshelp/map-generator v0.0.0-20200801113621-fb8892ceb243/go.mod h1:hVGbToOex7CV5+DAV6QfVMx1XDgp30DOoyOapbr+Vj4=
github.com/tribalwarshelp/shared v0.0.0-20200622084436-3a768c8bf574 h1:y2EoH6zRK9Uc0AeswnJRYUUIQYcSLZB5VDFuxPCKxNM=
github.com/tribalwarshelp/shared v0.0.0-20200622084436-3a768c8bf574/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/tribalwarshelp/shared v0.0.0-20200809125423-2bc2e8dfde95 h1:mO3ZR+o5UlYN8uGX4L32H5HNpB0uHpLdZ3YiDA6ciW4=
github.com/tribalwarshelp/shared v0.0.0-20200809125423-2bc2e8dfde95/go.mod h1:SSWchTkQdgeIDr0C68C7zopEIcBLCUa8Ic2CHenUaac=
github.com/tribalwarshelp/shared v0.0.0-20200824102353-ef15dea9c1a3 h1:KNH15DdQLxZAahSfX+4U4KUhsqRWj7uxjuOkxxhrQZk=
github.com/tribalwarshelp/shared v0.0.0-20200824102353-ef15dea9c1a3/go.mod h1:SSWchTkQdgeIDr0C68C7zopEIcBLCUa8Ic2CHenUaac=
github.com/tribalwarshelp/shared v0.0.0-20201031105753-5d4d8b307747 h1:ef1VuyVNNxa6ALTPS5X8dPEsAI7KuA3/umNNkrI4fIk=
github.com/tribalwarshelp/shared v0.0.0-20201031105753-5d4d8b307747/go.mod h1:Lxk6zaQhPTPrgz9ksMgg51m8XgflrCo/kRBx2cM3yfk=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
@ -280,6 +280,7 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

View File

@ -5,8 +5,8 @@ import (
"github.com/tribalwarshelp/api/graphql/generated"
"github.com/tribalwarshelp/api/middleware"
"github.com/tribalwarshelp/api/utils"
"github.com/tribalwarshelp/shared/models"
"github.com/tribalwarshelp/shared/tw"
)
func (r *playerResolver) Tribe(ctx context.Context, obj *models.Player) (*models.Tribe, error) {
@ -21,7 +21,7 @@ func (r *playerResolver) Servers(ctx context.Context, obj *models.Player) ([]str
langVersionDataLoaders := middleware.LangVersionDataLoadersFromContext(ctx)
if langVersionDataLoaders != nil {
serverKey, _ := getServer(ctx)
if loaders, ok := langVersionDataLoaders[utils.LanguageTagFromServerKey(serverKey)]; ok {
if loaders, ok := langVersionDataLoaders[tw.LanguageTagFromServerKey(serverKey)]; ok {
servers, err := loaders.PlayerServersByID.Load(obj.ID)
if err == nil {
return servers, nil
@ -35,7 +35,7 @@ func (r *playerResolver) NameChanges(ctx context.Context, obj *models.Player) ([
langVersionDataLoaders := middleware.LangVersionDataLoadersFromContext(ctx)
if langVersionDataLoaders != nil {
serverKey, _ := getServer(ctx)
if loaders, ok := langVersionDataLoaders[utils.LanguageTagFromServerKey(serverKey)]; ok {
if loaders, ok := langVersionDataLoaders[tw.LanguageTagFromServerKey(serverKey)]; ok {
servers, err := loaders.PlayerNameChangesByID.Load(obj.ID)
if err == nil {
return servers, nil

View File

@ -1,20 +1,18 @@
package repository
import (
"encoding/csv"
"net/http"
"time"
"github.com/tribalwarshelp/shared/models"
)
var client = &http.Client{
Timeout: 20 * time.Second,
}
func getCSVData(url string) ([][]string, error) {
resp, err := client.Get(url)
if err != nil {
return nil, err
func convertToLiveEnnoblements(ennoblements []*models.Ennoblement) []*models.LiveEnnoblement {
lv := []*models.LiveEnnoblement{}
for _, e := range ennoblements {
lv = append(lv, &models.LiveEnnoblement{
VillageID: e.VillageID,
NewOwnerID: e.NewOwnerID,
OldOwnerID: e.OldOwnerID,
EnnobledAt: e.EnnobledAt,
})
}
defer resp.Body.Close()
return csv.NewReader(resp.Body).ReadAll()
return lv
}

View File

@ -1,45 +0,0 @@
package repository
import (
"fmt"
"strconv"
"time"
"github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models"
)
type lineParser struct {
location *time.Location
}
func newLineParser() *lineParser {
return &lineParser{}
}
func (parser *lineParser) parse(line []string) (*models.LiveEnnoblement, error) {
if len(line) != 4 {
return nil, fmt.Errorf("Invalid line format (should be village_id,timestamp,new_owner,old_owner)")
}
var err error
e := &models.LiveEnnoblement{}
e.VillageID, err = strconv.Atoi(line[0])
if err != nil {
return nil, errors.Wrap(err, "*models.LiveEnnoblement.VillageID")
}
timestamp, err := strconv.Atoi(line[1])
if err != nil {
return nil, errors.Wrap(err, "timestamp")
}
e.EnnobledAt = time.Unix(int64(timestamp), 0)
e.NewOwnerID, err = strconv.Atoi(line[2])
if err != nil {
return nil, errors.Wrap(err, "*models.LiveEnnoblement.NewOwnerID")
}
e.OldOwnerID, err = strconv.Atoi(line[3])
if err != nil {
return nil, errors.Wrap(err, "*models.LiveEnnoblement.OldOwnerID")
}
return e, nil
}

View File

@ -13,6 +13,7 @@ import (
"github.com/go-pg/pg/v10"
"github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models"
"github.com/tribalwarshelp/shared/tw/dataloader"
)
var (
@ -44,33 +45,29 @@ func (repo *pgRepository) Fetch(ctx context.Context, server string) ([]*models.L
}
if s.Status == models.ServerStatusClosed {
return nil, fmt.Errorf("Server is " + models.ServerStatusClosed.String())
return []*models.LiveEnnoblement{}, nil
}
url := "https://" + s.Key + "." + s.LangVersion.Host +
fmt.Sprintf(liveennoblement.EndpointGetConquer, time.Now().Add(-1*time.Hour).Unix())
lines, err := getCSVData(url)
dl := dataloader.New(&dataloader.Config{
BaseURL: "https://" + s.Key + "." + s.LangVersion.Host,
})
ennoblements, err := dl.LoadEnnoblements(&dataloader.LoadEnnoblementsConfig{
EnnobledAtGTE: time.Now().Add(-1 * time.Hour),
})
if err != nil {
return nil, errors.Wrap(err, "Cannot fetch ennoblements")
return nil, err
}
e := []*models.LiveEnnoblement{}
lineParser := newLineParser()
for _, line := range lines {
ennoblement, err := lineParser.parse(line)
if err != nil {
continue
}
e = append(e, ennoblement)
}
go repo.cacheLiveEnnoblements(server, e)
return e, nil
liveEnnoblements := convertToLiveEnnoblements(ennoblements)
go repo.cacheLiveEnnoblements(server, liveEnnoblements)
return liveEnnoblements, nil
}
func (repo *pgRepository) loadLiveEnnoblementsFromCache(server string) ([]*models.LiveEnnoblement, bool) {
ennoblementsJSON, err := repo.cache.Get(context.Background(), fmt.Sprintf(cacheKey, server)).Result()
ennoblementsJSON, err := repo.
cache.
Get(context.Background(), fmt.Sprintf(cacheKey, server)).
Result()
if err != nil || ennoblementsJSON == "" {
return nil, false
}
@ -86,7 +83,10 @@ func (repo *pgRepository) cacheLiveEnnoblements(server string, ennoblements []*m
if err != nil {
return errors.Wrap(err, "cacheLiveEnnoblements")
}
if err := repo.cache.Set(context.Background(), fmt.Sprintf(cacheKey, server), ennoblementsJSON, expiration).Err(); err != nil {
if err := repo.
cache.
Set(context.Background(), fmt.Sprintf(cacheKey, server), ennoblementsJSON, expiration).
Err(); err != nil {
return errors.Wrap(err, "cacheLiveEnnoblements")
}
return nil

View File

@ -1,13 +0,0 @@
package utils
import (
"time"
)
func GetLocation(timezone string) *time.Location {
loc, err := time.LoadLocation(timezone)
if err == nil {
return loc
}
return time.UTC
}

View File

@ -1,12 +0,0 @@
package utils
import (
"github.com/tribalwarshelp/shared/models"
)
func LanguageTagFromServerKey(key string) models.LanguageTag {
if len(key) < 2 {
return ""
}
return models.LanguageTag(key[0:2])
}