move models and mode package to other repo

This commit is contained in:
Dawid Wysokiński 2020-06-02 08:26:51 +02:00
parent febf4f3f81
commit 9041745d61
12 changed files with 78 additions and 366 deletions

View File

@ -8,7 +8,7 @@ import (
"runtime"
"sync"
"github.com/tribalwarshelp/twcron/models"
"github.com/tribalwarshelp/shared/models"
phpserialize "github.com/Kichiyaki/go-php-serialize"
"github.com/robfig/cron/v3"
@ -176,11 +176,10 @@ func (h *handler) updateData() {
baseURL: url,
}
count++
log.Println("COUNT", count)
go func(server *models.Server, sh *serverHandler) {
wg.Add(1)
if err := sh.updateData(); err != nil {
log.Println(err.Error())
log.Println(errors.Wrap(err, server.Key))
} else {
log.Printf("%s updated", server.Key)
}

View File

@ -5,7 +5,7 @@ import (
"net/url"
"strconv"
"github.com/tribalwarshelp/twcron/models"
"github.com/tribalwarshelp/shared/models"
"github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm"
@ -311,71 +311,79 @@ func (h *serverHandler) updateData() error {
if err != nil {
return err
}
if _, err := tx.Model(&tribes).
OnConflict("(id) DO UPDATE").
Set("name = EXCLUDED.name").
Set("tag = EXCLUDED.tag").
Set("total_members = EXCLUDED.total_members").
Set("total_villages = EXCLUDED.total_villages").
Set("points = EXCLUDED.points").
Set("rank = EXCLUDED.rank").
Set("exist = EXCLUDED.exist").
Apply(attachODSetClauses).
Insert(); err != nil {
return errors.Wrap(err, "cannot insert tribes")
}
if _, err := tx.Model(&players).
OnConflict("(id) DO UPDATE").
Set("name = EXCLUDED.name").
Set("total_villages = EXCLUDED.total_villages").
Set("points = EXCLUDED.points").
Set("rank = EXCLUDED.rank").
Set("exist = EXCLUDED.exist").
Set("tribe_id = EXCLUDED.tribe_id").
Apply(attachODSetClauses).
Insert(); err != nil {
return errors.Wrap(err, "cannot insert players")
}
if _, err := tx.Model(&villages).
OnConflict("(id) DO UPDATE").
Set("name = EXCLUDED.name").
Set("points = EXCLUDED.points").
Set("x = EXCLUDED.x").
Set("y = EXCLUDED.y").
Set("bonus = EXCLUDED.bonus").
Set("player_id = EXCLUDED.player_id").
Insert(); err != nil {
return errors.Wrap(err, "cannot insert villages")
}
if len(tribes) > 0 {
if _, err := tx.Model(&tribes).
OnConflict("(id) DO UPDATE").
Set("name = EXCLUDED.name").
Set("tag = EXCLUDED.tag").
Set("total_members = EXCLUDED.total_members").
Set("total_villages = EXCLUDED.total_villages").
Set("points = EXCLUDED.points").
Set("rank = EXCLUDED.rank").
Set("exist = EXCLUDED.exist").
Apply(attachODSetClauses).
Insert(); err != nil {
return errors.Wrap(err, "cannot insert tribes")
}
ids := []int{}
for _, tribe := range tribes {
ids = append(ids, tribe.ID)
ids := []int{}
for _, tribe := range tribes {
ids = append(ids, tribe.ID)
}
if _, err := tx.Model(&models.Tribe{}).
Where("id NOT IN (?)", pg.In(ids)).
Set("exist = false").
Update(); err != nil && err != pg.ErrNoRows {
return errors.Wrap(err, "cannot update not existed tribes")
}
}
if _, err := tx.Model(&models.Tribe{}).
Where("id NOT IN (?)", pg.In(ids)).
Set("exist = false").
Update(); err != nil {
return fmt.Errorf("cannot update not existed tribes")
if len(players) > 0 {
if _, err := tx.Model(&players).
OnConflict("(id) DO UPDATE").
Set("name = EXCLUDED.name").
Set("total_villages = EXCLUDED.total_villages").
Set("points = EXCLUDED.points").
Set("rank = EXCLUDED.rank").
Set("exist = EXCLUDED.exist").
Set("tribe_id = EXCLUDED.tribe_id").
Apply(attachODSetClauses).
Insert(); err != nil {
return errors.Wrap(err, "cannot insert players")
}
ids := []int{}
for _, player := range players {
ids = append(ids, player.ID)
}
if _, err := tx.Model(&models.Player{}).
Where("id NOT IN (?)", pg.In(ids)).
Set("exist = false").
Update(); err != nil && err != pg.ErrNoRows {
return errors.Wrap(err, "cannot update not existed players")
}
}
ids = []int{}
for _, player := range players {
ids = append(ids, player.ID)
}
if _, err := tx.Model(&models.Player{}).
Where("id NOT IN (?)", pg.In(ids)).
Set("exist = false").
Update(); err != nil {
return fmt.Errorf("cannot update not existed players")
}
ids = []int{}
for _, village := range villages {
ids = append(ids, village.ID)
}
if _, err := tx.Model(&models.Village{}).
Where("id NOT IN (?)", pg.In(ids)).
Delete(); err != nil {
return fmt.Errorf("cannot delete not existed villages")
if len(villages) > 0 {
if _, err := tx.Model(&villages).
OnConflict("(id) DO UPDATE").
Set("name = EXCLUDED.name").
Set("points = EXCLUDED.points").
Set("x = EXCLUDED.x").
Set("y = EXCLUDED.y").
Set("bonus = EXCLUDED.bonus").
Set("player_id = EXCLUDED.player_id").
Insert(); err != nil {
return errors.Wrap(err, "cannot insert villages")
}
ids := []int{}
for _, village := range villages {
ids = append(ids, village.ID)
}
if _, err := tx.Model(&models.Village{}).
Where("id NOT IN (?)", pg.In(ids)).
Delete(); err != nil && err != pg.ErrNoRows {
return errors.Wrap(err, "cannot delete not existed villages")
}
}
return tx.Commit()

1
go.mod
View File

@ -8,5 +8,6 @@ require (
github.com/joho/godotenv v1.3.0
github.com/pkg/errors v0.9.1
github.com/robfig/cron/v3 v3.0.1
github.com/tribalwarshelp/shared v0.0.0-20200602060635-0b3cb090edc5
golang.org/x/net v0.0.0-20200528225125-3c3fba18258b // indirect
)

2
go.sum
View File

@ -88,6 +88,8 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo=
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs=
github.com/tribalwarshelp/shared v0.0.0-20200602060635-0b3cb090edc5 h1:LeReuMU2zNi7tftm8nytrmkuD4BtLFUYZ3nlSZLE6ow=
github.com/tribalwarshelp/shared v0.0.0-20200602060635-0b3cb090edc5/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/vmihailenco/bufpool v0.1.5/go.mod h1:fL9i/PRTuS7AELqAHwSU1Zf1c70xhkhGe/cD5ud9pJk=
github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94=
github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ=

View File

@ -6,8 +6,9 @@ import (
"os/signal"
"syscall"
"github.com/tribalwarshelp/shared/mode"
_cron "github.com/tribalwarshelp/twcron/cron"
"github.com/tribalwarshelp/twcron/mode"
"github.com/go-pg/pg/v10"
"github.com/joho/godotenv"

View File

@ -1,35 +0,0 @@
package mode
import "os"
const (
EnvMode = "mode"
DevelopmentMode = "development"
ProductionMode = "production"
TestMode = "test"
)
var mode = DevelopmentMode
func init() {
Set(os.Getenv(EnvMode))
}
func Set(value string) {
if value == "" {
value = DevelopmentMode
}
switch value {
case DevelopmentMode,
ProductionMode,
TestMode:
mode = value
default:
panic("unknown mode: " + value)
}
}
func Get() string {
return mode
}

View File

@ -1,10 +0,0 @@
package models
type LanguageTag string
type LangVersion struct {
Tag LanguageTag `pg:",pk" json:"tag" gqlgen:"tag"`
Name string `json:"name" gqlgen:"name" pg:",unique"`
Host string `json:"host" gqlgen:"host"`
Timezone string `json:"timezone" gqlgen:"timezone"`
}

View File

@ -1,55 +0,0 @@
package models
type OpponentsDefeated struct {
RankAtt int `json:"rankAtt" pg:",use_zero" gqlgen:"rankAtt"`
ScoreAtt int `pg:",use_zero" json:"scoreAtt" gqlgen:"scoreAtt"`
RankDef int `pg:",use_zero" json:"rankDef" gqlgen:"rankDef"`
ScoreDef int `pg:",use_zero" json:"scoreDef" gqlgen:"scoreDef"`
RankTotal int `pg:",use_zero" json:"rankTotal" gqlgen:"rankTotal"`
ScoreTotal int `pg:",use_zero" json:"scoreTotal" gqlgen:"scoreTotal"`
RankSup int `pg:",use_zero" json:"rankSup" gqlgen:"rankSup"`
ScoreSup int `pg:",use_zero" json:"scoreSup" gqlgen:"scoreSup"`
}
type OpponentsDefeatedFilter struct {
RankAtt int `json:"rankAtt" gqlgen:"rankAtt"`
RankAttGT int `json:"rankAttGT" gqlgen:"rankAttGT"`
RankAttGTE int `json:"rankAttGTE" gqlgen:"rankAttGTE"`
RankAttLT int `json:"rankAttLT" gqlgen:"rankAttLT"`
RankAttLTE int `json:"rankAttLTE" gqlgen:"rankAttLTE"`
ScoreAtt int `json:"scoreAtt" gqlgen:"scoreAtt"`
ScoreAttGT int `json:"scoreAttGT" gqlgen:"scoreAttGT"`
ScoreAttGTE int `json:"scoreAttGTE" gqlgen:"scoreAttGTE"`
ScoreAttLT int `json:"scoreAttLT" gqlgen:"scoreAttLT"`
ScoreAttLTE int `json:"scoreAttLTE" gqlgen:"scoreAttLTE"`
RankDef int `json:"rankDef" gqlgen:"rankDef"`
RankDefGT int `json:"rankDefGT" gqlgen:"rankDefGT"`
RankDefGTE int `json:"rankDefGTE" gqlgen:"rankDefGTE"`
RankDefLT int `json:"rankDefLT" gqlgen:"rankDefLT"`
RankDefLTE int `json:"rankDefLTE" gqlgen:"rankDefLTE"`
ScoreDef int `json:"scoreDef" gqlgen:"scoreDef"`
ScoreDefGT int `json:"scoreDefGT" gqlgen:"scoreDefGT"`
ScoreDefGTE int `json:"scoreDefGTE" gqlgen:"scoreDefGTE"`
ScoreDefLT int `json:"scoreDefLT" gqlgen:"scoreDefLT"`
ScoreDefLTE int `json:"scoreDefLTE" gqlgen:"scoreDefLTE"`
RankTotal int `json:"rankTotal" gqlgen:"rankTotal"`
RankTotalGT int `json:"rankTotalGT" gqlgen:"rankTotalGT"`
RankTotalGTE int `json:"rankTotalGTE" gqlgen:"rankTotalGTE"`
RankTotalLT int `json:"rankTotalLT" gqlgen:"rankTotalLT"`
RankTotalLTE int `json:"rankTotalLTE" gqlgen:"rankTotalLTE"`
ScoreTotal int `json:"scoreTotal" gqlgen:"scoreTotal"`
ScoreTotalGT int `json:"scoreTotalGT" gqlgen:"scoreTotalGT"`
ScoreTotalGTE int `json:"scoreTotalGTE" gqlgen:"scoreTotalGTE"`
ScoreTotalLT int `json:"scoreTotalLT" gqlgen:"scoreTotalLT"`
ScoreTotalLTE int `json:"scoreTotalLTE" gqlgen:"scoreTotalLTE"`
ScoreSup int `json:"scoreSup" gqlgen:"scoreSup"`
ScoreSupGT int `json:"scoreSupGT" gqlgen:"scoreSupGT"`
ScoreSupGTE int `json:"scoreSupGTE" gqlgen:"scoreSupGTE"`
ScoreSupLT int `json:"scoreSupLT" gqlgen:"scoreSupLT"`
ScoreSupLTE int `json:"scoreSupLTE" gqlgen:"scoreSupLTE"`
RankSup int `json:"rankSup" gqlgen:"rankSup"`
RankSupGT int `json:"rankSupGT" gqlgen:"rankSupGT"`
RankSupGTE int `json:"rankSupGTE" gqlgen:"rankSupGTE"`
RankSupLT int `json:"rankSupLT" gqlgen:"rankSupLT"`
RankSupLTE int `json:"rankSupLTE" gqlgen:"rankSupLTE"`
}

View File

@ -1,48 +0,0 @@
package models
type Player struct {
tableName struct{} `pg:"?SERVER.players,alias:player"`
ID int `json:"id" pg:",pk" gqlgen:"id"`
Name string `json:"name" gqlgen:"name"`
TotalVillages int `json:"total_villages" pg:",use_zero" gqlgen:"totalVillages"`
Points int `json:"points" pg:",use_zero" gqlgen:"points"`
Rank int `json:"rank" pg:",use_zero" gqlgen:"rank"`
Exist *bool `json:"exist" pg:",use_zero" gqlgen:"exist"`
TribeID int `json:"-" pg:",use_zero" gqlgen:"tribeID"`
Tribe *Tribe `json:"tribe,omitempty" gqlgen:"-"`
OpponentsDefeated
}
type PlayerFilter struct {
tableName struct{} `urlstruct:"player"`
ID []int `json:"id" gqlgen:"id"`
IdNEQ []int `json:"idNEQ" gqlgen:"idNEQ"`
Exist *bool `urlstruct:",nowhere" json:"exist" gqlgen:"exist"`
Name []string `json:"name" gqlgen:"name"`
NameNEQ []string `json:"nameNEQ" gqlgen:"nameNEQ"`
NameMATCH string `json:"nameMATCH" gqlgen:"nameMATCH"`
NameIEQ string `json:"nameIEQ" gqlgen:"nameIEQ"`
TotalVillages int `json:"totalVillages" gqlgen:"totalVillages"`
TotalVillagesGT int `json:"totalVillagesGT" gqlgen:"totalVillagesGT"`
TotalVillagesLT int `json:"totalVillagesLT" gqlgen:"totalVillagesLT"`
TotalVillagesLTE int `json:"totalVillagesLTE" gqlgen:"totalVillagesLTE"`
Points int `json:"points" gqlgen:"points"`
PointsGT int `json:"pointsGT" gqlgen:"pointsGT"`
PointsLT int `json:"pointsLT" gqlgen:"pointsLT"`
PointsLTE int `json:"pointsLTE" gqlgen:"pointsLTE"`
Rank int `json:"rank" gqlgen:"rank"`
RankGT int `json:"rankGT" gqlgen:"rankGT"`
RankLT int `json:"rankLT" gqlgen:"rankLT"`
RankLTE int `json:"rankLTE" gqlgen:"rankLTE"`
TribeID []int `json:"tribe" gqlgen:"tribe"`
OpponentsDefeatedFilter
}

View File

@ -1,41 +0,0 @@
package models
type ServerStatus string
const (
ServerStatusOpen = "open"
ServerStatusClose = "close"
)
type Server struct {
tableName struct{} `pg:"alias:server"`
ID int `json:"id" gqlgen:"id"`
Key string `json:"key" gqlgen:"key" pg:",unique"`
Status ServerStatus `json:"status" gqlgen:"status"`
LangVersionTag LanguageTag `json:"langVersionTag" gqlgen:"langVersionTag"`
LangVersion *LangVersion `json:"langVersion,omitempty" gqlgen:"-"`
}
type ServerFilter struct {
tableName struct{} `urlstruct:"server"`
ID []int `json:"id" gqlgen:"id"`
IdNEQ []int `json:"idNEQ" gqlgen:"idNEQ"`
Key []string `json:"key" gqlgen:"key"`
KeyNEQ []string `json:"keyNEQ" gqlgen:"keyNEQ"`
KeyMATCH string `json:"keyMATCH" gqlgen:"keyMATCH"`
KeyIEQ string `json:"keyIEQ" gqlgen:"keyIEQ"`
Status []string `json:"status" gqlgen:"status"`
StatusNIN []string `json:"statusNIN" gqlgen:"statusNIN"`
LangVersionTag []string `json:"langVersionTag" gqlgen:"langVersionTag"`
LangVersionTagNIN []string `json:"langVersionTagNIN" gqlgen:"langVersionTagNIN"`
Offset int `urlstruct:",nowhere" json:"offset" gqlgen:"offset"`
Limit int `urlstruct:",nowhere" json:"limit" gqlgen:"limit"`
Sort string `urlstruct:",nowhere" json:"sort" gqlgen:"sort"`
}

View File

@ -1,67 +0,0 @@
package models
type Tribe struct {
tableName struct{} `pg:"?SERVER.tribes,alias:tribe"`
ID int `json:"id" gqlgen:"id"`
Name string `json:"name" gqlgen:"name"`
Tag string `json:"tag" gqlgen:"tag"`
TotalMembers int `json:"totalMembers" gqlgen:"totalMembers" pg:",use_zero"`
TotalVillages int `json:"totalVillages" gqlgen:"totalVillages" pg:",use_zero"`
Points int `json:"points" gqlgen:"points" pg:",use_zero"`
AllPoints int `json:"allPoints" gqlgen:"allPoints" pg:",use_zero"`
Rank int `json:"rank" gqlgen:"rank" pg:",use_zero"`
Exist *bool `json:"exist" gqlgen:"exist" pg:",use_zero"`
OpponentsDefeated
}
type TribeFilter struct {
tableName struct{} `urlstruct:"tribe"`
ID []int `json:"id" gqlgen:"id"`
IdNEQ []int `json:"idNEQ" gqlgen:"idNEQ"`
Exist *bool `urlstruct:",nowhere" json:"exist" gqlgen:"exist"`
Tag []string `json:"tag" gqlgen:"tag"`
TagNEQ []string `json:"tagNEQ" gqlgen:"tagNEQ"`
TagMATCH string `json:"tagMATCH" gqlgen:"tagMATCH"`
TagIEQ string `json:"tagIEQ" gqlgen:"tagIEQ"`
Name []string `json:"name" gqlgen:"name"`
NameNEQ []string `json:"nameNEQ" gqlgen:"nameNEQ"`
NameMATCH string `json:"nameMATCH" gqlgen:"nameMATCH"`
NameIEQ string `json:"nameIEQ" gqlgen:"nameIEQ"`
TotalMembers int `json:"totalMembers" gqlgen:"totalMembers"`
TotalMembersGT int `json:"totalMembersGT" gqlgen:"totalMembersGT"`
TotalMembersLT int `json:"totalMembersLT" gqlgen:"totalMembersLT"`
TotalMembersLTE int `json:"totalMembersLTE" gqlgen:"totalMembersLTE"`
TotalVillages int `json:"totalVillages" gqlgen:"totalVillages"`
TotalVillagesGT int `json:"totalVillagesGT" gqlgen:"totalVillagesGT"`
TotalVillagesLT int `json:"totalVillagesLT" gqlgen:"totalVillagesLT"`
TotalVillagesLTE int `json:"totalVillagesLTE" gqlgen:"totalVillagesLTE"`
Points int `json:"points" gqlgen:"points"`
PointsGT int `json:"pointsGT" gqlgen:"pointsGT"`
PointsLT int `json:"pointsLT" gqlgen:"pointsLT"`
PointsLTE int `json:"pointsLTE" gqlgen:"pointsLTE"`
AllPoints int `json:"allPoints" gqlgen:"allPoints"`
AllPointsGT int `json:"allPointsGT" gqlgen:"allPointsGT"`
AllPointsLT int `json:"allPointsLT" gqlgen:"allPointsLT"`
AllPointsLTE int `json:"allPointsLTE" gqlgen:"allPointsLTE"`
Rank int `json:"rank" gqlgen:"rank"`
RankGT int `json:"rankGT" gqlgen:"rankGT"`
RankLT int `json:"rankLT" gqlgen:"rankLT"`
RankLTE int `json:"rankLTE" gqlgen:"rankLTE"`
Offset int `urlstruct:",nowhere" json:"offset" gqlgen:"offset"`
Limit int `urlstruct:",nowhere" json:"limit" gqlgen:"limit"`
Sort string `urlstruct:",nowhere" json:"sort" gqlgen:"sort"`
OpponentsDefeatedFilter
}

View File

@ -1,43 +0,0 @@
package models
type Village struct {
tableName struct{} `pg:"?SERVER.villages,alias:village"`
ID int `json:"id" pg:",pk" gqlgen:"id"`
Name string `json:"name" gqlgen:"name"`
Points int `json:"points" pg:",use_zero" gqlgen:"points"`
X int `json:"x" pg:",use_zero" gqlgen:"x"`
Y int `json:"y" pg:",use_zero" gqlgen:"y"`
Bonus int `json:"bonus" pg:",use_zero" gqlgen:"bonus"`
PlayerID int `json:"-" pg:",use_zero" gqlgen:"playerID"`
Player *Player `json:"player,omitempty" gqlgen:"-"`
}
type VillageFilter struct {
tableName struct{} `urlstruct:"village"`
ID []int `json:"id" gqlgen:"id"`
IdNEQ []int `json:"idNEQ" gqlgen:"idNEQ"`
Name []string `json:"name" gqlgen:"name"`
NameNEQ []string `json:"nameNEQ" gqlgen:"nameNEQ"`
NameMATCH string `json:"nameMATCH" gqlgen:"nameMATCH"`
NameIEQ string `json:"nameIEQ" gqlgen:"nameIEQ"`
Points int `json:"points" gqlgen:"points"`
PointsGT int `json:"pointsGT" gqlgen:"pointsGT"`
PointsLT int `json:"pointsLT" gqlgen:"pointsLT"`
PointsLTE int `json:"pointsLTE" gqlgen:"pointsLTE"`
Bonus int `json:"bonus" gqlgen:"bonus"`
BonusGT int `json:"bonusGT" gqlgen:"bonusGT"`
BonusLT int `json:"bonusLT" gqlgen:"bonusLT"`
BonusLTE int `json:"bonusLTE" gqlgen:"bonusLTE"`
PlayerID []int `json:"playerID" gqlgen:"playerID"`
Offset int `urlstruct:",nowhere" json:"offset" gqlgen:"offset"`
Limit int `urlstruct:",nowhere" json:"limit" gqlgen:"limit"`
Sort string `urlstruct:",nowhere" json:"sort" gqlgen:"sort"`
}