bump github.com/tribalwarshelp/shared + refactor liveenoblement repository
This commit is contained in:
parent
84983c8d1e
commit
ad2f56ad73
3
go.mod
3
go.mod
|
@ -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
9
go.sum
|
@ -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=
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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])
|
||||
}
|
Reference in New Issue