From e70c73a3fa872c1cd16fae6b99541316b70c7536 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sun, 2 May 2021 09:44:49 +0200 Subject: [PATCH 01/15] refactor, add two new packages tw/urlbuilder and tw/twutil tw/dataloader: - Move endpoints to the new file - use errors.New instead of fmt.Errorf - new error messages --- tw/dataloader/dataloader.go | 120 +++++++----------- tw/dataloader/endpoints.go | 30 +++++ .../version_code_from_server_key.go | 2 +- tw/{urls.go => urlbuilder/build_url.go} | 20 +-- utils/track_execution_time.go | 21 --- 5 files changed, 89 insertions(+), 104 deletions(-) create mode 100644 tw/dataloader/endpoints.go rename tw/{ => twutil}/version_code_from_server_key.go (92%) rename tw/{urls.go => urlbuilder/build_url.go} (52%) delete mode 100644 utils/track_execution_time.go diff --git a/tw/dataloader/dataloader.go b/tw/dataloader/dataloader.go index c35f7f4..c4af55e 100644 --- a/tw/dataloader/dataloader.go +++ b/tw/dataloader/dataloader.go @@ -14,36 +14,8 @@ import ( "time" "github.com/pkg/errors" - "github.com/tribalwarshelp/shared/models" -) -const ( - EndpointConfig = "/interface.php?func=get_config" - EndpointUnitConfig = "/interface.php?func=get_unit_info" - EndpointBuildingConfig = "/interface.php?func=get_building_info" - EndpointPlayer = "/map/player.txt.gz" - EndpointPlayerNotGzipped = "/map/player.txt" - EndpointTribe = "/map/ally.txt.gz" - EndpointTribeNotGzipped = "/map/ally.txt" - EndpointVillage = "/map/village.txt.gz" - EndpointVillageNotGzipped = "/map/village.txt" - EndpointKillAtt = "/map/kill_att.txt.gz" - EndpointKillAttNotGzipped = "/map/kill_att.txt" - EndpointKillDef = "/map/kill_def.txt.gz" - EndpointKillDefNotGzipped = "/map/kill_def.txt" - EndpointKillSup = "/map/kill_sup.txt.gz" - EndpointKillSupNotGzipped = "/map/kill_sup.txt" - EndpointKillAll = "/map/kill_all.txt.gz" - EndpointKillAllNotGzipped = "/map/kill_all.txt" - EndpointKillAttTribe = "/map/kill_att_tribe.txt.gz" - EndpointKillAttTribeNotGzipped = "/map/kill_att_tribe.txt" - EndpointKillDefTribe = "/map/kill_def_tribe.txt.gz" - EndpointKillDefTribeNotGzipped = "/map/kill_def_tribe.txt" - EndpointKillAllTribe = "/map/kill_all_tribe.txt.gz" - EndpointKillAllTribeNotGzipped = "/map/kill_all_tribe.txt" - EndpointConquer = "/map/conquer.txt.gz" - EndpointConquerNotGzipped = "/map/conquer.txt" - EndpointGetConquer = "/interface.php?func=get_conquer&since=%d" + "github.com/tribalwarshelp/shared/models" ) type DataLoader interface { @@ -90,7 +62,7 @@ type parsedODLine struct { func (d *dataLoader) parseODLine(line []string) (*parsedODLine, error) { if len(line) != 3 { - return nil, fmt.Errorf("Invalid line format (should be rank,id,score)") + return nil, errors.New("invalid line format (should be rank,id,score)") } p := &parsedODLine{} var err error @@ -111,51 +83,51 @@ func (d *dataLoader) parseODLine(line []string) (*parsedODLine, error) { func (d *dataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, error) { m := make(map[int]*models.OpponentsDefeated) - urls := []string{ + formattedURLs := []string{ fmt.Sprintf("%s%s", d.baseURL, EndpointKillAll), fmt.Sprintf("%s%s", d.baseURL, EndpointKillAtt), fmt.Sprintf("%s%s", d.baseURL, EndpointKillDef), fmt.Sprintf("%s%s", d.baseURL, EndpointKillSup), } if tribe { - urls = []string{ + formattedURLs = []string{ fmt.Sprintf("%s%s", d.baseURL, EndpointKillAllTribe), fmt.Sprintf("%s%s", d.baseURL, EndpointKillAttTribe), fmt.Sprintf("%s%s", d.baseURL, EndpointKillDefTribe), "", } } - for _, url := range urls { - if url == "" { + for _, formattedURL := range formattedURLs { + if formattedURL == "" { continue } - lines, err := d.getCSVData(url, true) + lines, err := d.getCSVData(formattedURL, true) if err != nil { //fallback to not gzipped file - lines, err = d.getCSVData(strings.ReplaceAll(url, ".gz", ""), false) + lines, err = d.getCSVData(strings.ReplaceAll(formattedURL, ".gz", ""), false) if err != nil { - return nil, errors.Wrapf(err, "cannot get data, url %s", url) + return nil, errors.Wrapf(err, "couldn't load data, formattedURL %s", formattedURL) } } for _, line := range lines { parsed, err := d.parseODLine(line) if err != nil { - return nil, errors.Wrapf(err, "cannot parse line, url %s, line %s", url, strings.Join(line, ",")) + return nil, errors.Wrapf(err, "couldn't parse the line, url %s, line %s", formattedURL, strings.Join(line, ",")) } if _, ok := m[parsed.ID]; !ok { m[parsed.ID] = &models.OpponentsDefeated{} } - switch url { - case urls[0]: + switch formattedURL { + case formattedURLs[0]: m[parsed.ID].RankTotal = parsed.Rank m[parsed.ID].ScoreTotal = parsed.Score - case urls[1]: + case formattedURLs[1]: m[parsed.ID].RankAtt = parsed.Rank m[parsed.ID].ScoreAtt = parsed.Score - case urls[2]: + case formattedURLs[2]: m[parsed.ID].RankDef = parsed.Rank m[parsed.ID].ScoreDef = parsed.Score - case urls[3]: + case formattedURLs[3]: m[parsed.ID].RankSup = parsed.Rank m[parsed.ID].ScoreSup = parsed.Score } @@ -166,7 +138,7 @@ func (d *dataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, erro func (d *dataLoader) parsePlayerLine(line []string) (*models.Player, error) { if len(line) != 6 { - return nil, fmt.Errorf("Invalid line format (should be id,name,tribeid,villages,points,rank)") + return nil, errors.New("Invalid line format (should be id,name,tribeid,villages,points,rank)") } var err error @@ -203,20 +175,20 @@ func (d *dataLoader) parsePlayerLine(line []string) (*models.Player, error) { } func (d *dataLoader) LoadPlayers() ([]*models.Player, error) { - url := d.baseURL + EndpointPlayer - lines, err := d.getCSVData(url, true) + formattedURL := d.baseURL + EndpointPlayer + lines, err := d.getCSVData(formattedURL, true) if err != nil { lines, err = d.getCSVData(d.baseURL+EndpointPlayerNotGzipped, false) if err != nil { - return nil, errors.Wrapf(err, "cannot get data, url %s", url) + return nil, errors.Wrapf(err, "couldn't load data, url %s", formattedURL) } } - players := []*models.Player{} + var players []*models.Player for _, line := range lines { player, err := d.parsePlayerLine(line) if err != nil { - return nil, errors.Wrapf(err, "cannot parse line, url %s, line %s", url, strings.Join(line, ",")) + return nil, errors.Wrapf(err, "couldn't parse the line, url %s, line %s", formattedURL, strings.Join(line, ",")) } players = append(players, player) } @@ -226,7 +198,7 @@ func (d *dataLoader) LoadPlayers() ([]*models.Player, error) { func (d *dataLoader) parseTribeLine(line []string) (*models.Tribe, error) { if len(line) != 8 { - return nil, fmt.Errorf("Invalid line format (should be id,name,tag,members,villages,points,allpoints,rank)") + return nil, errors.New("invalid line format (should be id,name,tag,members,villages,points,allpoints,rank)") } var err error @@ -271,19 +243,19 @@ func (d *dataLoader) parseTribeLine(line []string) (*models.Tribe, error) { } func (d *dataLoader) LoadTribes() ([]*models.Tribe, error) { - url := d.baseURL + EndpointTribe - lines, err := d.getCSVData(url, true) + formattedURL := d.baseURL + EndpointTribe + lines, err := d.getCSVData(formattedURL, true) if err != nil { lines, err = d.getCSVData(d.baseURL+EndpointTribeNotGzipped, false) if err != nil { - return nil, errors.Wrapf(err, "cannot to get data, url %s", url) + return nil, errors.Wrapf(err, "cannot to get data, url %s", formattedURL) } } - tribes := []*models.Tribe{} + var tribes []*models.Tribe for _, line := range lines { tribe, err := d.parseTribeLine(line) if err != nil { - return nil, errors.Wrapf(err, "cannot parse line, url %s, line %s", url, strings.Join(line, ",")) + return nil, errors.Wrapf(err, "couldn't parse the line, url %s, line %s", formattedURL, strings.Join(line, ",")) } tribes = append(tribes, tribe) } @@ -292,7 +264,7 @@ func (d *dataLoader) LoadTribes() ([]*models.Tribe, error) { func (d *dataLoader) parseVillageLine(line []string) (*models.Village, error) { if len(line) != 7 { - return nil, fmt.Errorf("Invalid line format (should be id,name,x,y,playerID,points,bonus)") + return nil, errors.New("invalid line format (should be id,name,x,y,playerID,points,bonus)") } var err error village := &models.Village{} @@ -328,19 +300,19 @@ func (d *dataLoader) parseVillageLine(line []string) (*models.Village, error) { } func (d *dataLoader) LoadVillages() ([]*models.Village, error) { - url := d.baseURL + EndpointVillage - lines, err := d.getCSVData(url, true) + formattedURL := d.baseURL + EndpointVillage + lines, err := d.getCSVData(formattedURL, true) if err != nil { lines, err = d.getCSVData(d.baseURL+EndpointVillageNotGzipped, false) if err != nil { - return nil, errors.Wrapf(err, "cannot get data, url %s", url) + return nil, errors.Wrapf(err, "couldn't load data, formattedURL %s", formattedURL) } } - villages := []*models.Village{} + var villages []*models.Village for _, line := range lines { village, err := d.parseVillageLine(line) if err != nil { - return nil, errors.Wrapf(err, "cannot parse line, url %s, line %s", url, strings.Join(line, ",")) + return nil, errors.Wrapf(err, "couldn't parse the line, formattedURL %s, line %s", formattedURL, strings.Join(line, ",")) } villages = append(villages, village) } @@ -349,7 +321,7 @@ func (d *dataLoader) LoadVillages() ([]*models.Village, error) { func (d *dataLoader) parseEnnoblementLine(line []string) (*models.Ennoblement, error) { if len(line) != 4 { - return nil, fmt.Errorf("Invalid line format (should be village_id,timestamp,new_owner_id,old_owner_id)") + return nil, errors.New("invalid line format (should be village_id,timestamp,new_owner_id,old_owner_id)") } var err error ennoblement := &models.Ennoblement{} @@ -383,25 +355,25 @@ func (d *dataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.En cfg = &LoadEnnoblementsConfig{} } yesterdaysDate := time.Now().Add(-23 * time.Hour) - url := d.baseURL + EndpointConquer + formattedURL := d.baseURL + EndpointConquer compressed := true if cfg.EnnobledAtGT.After(yesterdaysDate) || cfg.EnnobledAtGT.Equal(yesterdaysDate) { - url = d.baseURL + fmt.Sprintf(EndpointGetConquer, cfg.EnnobledAtGT.Unix()) + formattedURL = d.baseURL + fmt.Sprintf(EndpointGetConquer, cfg.EnnobledAtGT.Unix()) compressed = false } - lines, err := d.getCSVData(url, compressed) + lines, err := d.getCSVData(formattedURL, compressed) if err != nil && compressed { lines, err = d.getCSVData(d.baseURL+EndpointConquerNotGzipped, false) } if err != nil { - return nil, errors.Wrapf(err, "cannot get data, url %s", url) + return nil, errors.Wrapf(err, "couldn't load data, formattedURL %s", formattedURL) } - ennoblements := []*models.Ennoblement{} + var ennoblements []*models.Ennoblement for _, line := range lines { ennoblement, err := d.parseEnnoblementLine(line) if err != nil { - return nil, errors.Wrapf(err, "cannot parse line, url %s, line %s", url, strings.Join(line, ",")) + return nil, errors.Wrapf(err, "couldn't parse the line, formattedURL %s, line %s", formattedURL, strings.Join(line, ",")) } if ennoblement.EnnobledAt.After(cfg.EnnobledAtGT) { ennoblements = append(ennoblements, ennoblement) @@ -411,9 +383,9 @@ func (d *dataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.En } func (d *dataLoader) GetConfig() (*models.ServerConfig, error) { - url := d.baseURL + EndpointConfig + formattedURL := d.baseURL + EndpointConfig cfg := &models.ServerConfig{} - err := d.getXML(url, cfg) + err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getConfig") } @@ -421,9 +393,9 @@ func (d *dataLoader) GetConfig() (*models.ServerConfig, error) { } func (d *dataLoader) GetBuildingConfig() (*models.BuildingConfig, error) { - url := d.baseURL + EndpointBuildingConfig + formattedURL := d.baseURL + EndpointBuildingConfig cfg := &models.BuildingConfig{} - err := d.getXML(url, cfg) + err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getBuildingConfig") } @@ -431,9 +403,9 @@ func (d *dataLoader) GetBuildingConfig() (*models.BuildingConfig, error) { } func (d *dataLoader) GetUnitConfig() (*models.UnitConfig, error) { - url := d.baseURL + EndpointUnitConfig + formattedURL := d.baseURL + EndpointUnitConfig cfg := &models.UnitConfig{} - err := d.getXML(url, cfg) + err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getUnitConfig") } diff --git a/tw/dataloader/endpoints.go b/tw/dataloader/endpoints.go new file mode 100644 index 0000000..d623af9 --- /dev/null +++ b/tw/dataloader/endpoints.go @@ -0,0 +1,30 @@ +package dataloader + +const ( + EndpointConfig = "/interface.php?func=get_config" + EndpointUnitConfig = "/interface.php?func=get_unit_info" + EndpointBuildingConfig = "/interface.php?func=get_building_info" + EndpointPlayer = "/map/player.txt.gz" + EndpointPlayerNotGzipped = "/map/player.txt" + EndpointTribe = "/map/ally.txt.gz" + EndpointTribeNotGzipped = "/map/ally.txt" + EndpointVillage = "/map/village.txt.gz" + EndpointVillageNotGzipped = "/map/village.txt" + EndpointKillAtt = "/map/kill_att.txt.gz" + EndpointKillAttNotGzipped = "/map/kill_att.txt" + EndpointKillDef = "/map/kill_def.txt.gz" + EndpointKillDefNotGzipped = "/map/kill_def.txt" + EndpointKillSup = "/map/kill_sup.txt.gz" + EndpointKillSupNotGzipped = "/map/kill_sup.txt" + EndpointKillAll = "/map/kill_all.txt.gz" + EndpointKillAllNotGzipped = "/map/kill_all.txt" + EndpointKillAttTribe = "/map/kill_att_tribe.txt.gz" + EndpointKillAttTribeNotGzipped = "/map/kill_att_tribe.txt" + EndpointKillDefTribe = "/map/kill_def_tribe.txt.gz" + EndpointKillDefTribeNotGzipped = "/map/kill_def_tribe.txt" + EndpointKillAllTribe = "/map/kill_all_tribe.txt.gz" + EndpointKillAllTribeNotGzipped = "/map/kill_all_tribe.txt" + EndpointConquer = "/map/conquer.txt.gz" + EndpointConquerNotGzipped = "/map/conquer.txt" + EndpointGetConquer = "/interface.php?func=get_conquer&since=%d" +) diff --git a/tw/version_code_from_server_key.go b/tw/twutil/version_code_from_server_key.go similarity index 92% rename from tw/version_code_from_server_key.go rename to tw/twutil/version_code_from_server_key.go index ec0d73a..82da302 100644 --- a/tw/version_code_from_server_key.go +++ b/tw/twutil/version_code_from_server_key.go @@ -1,4 +1,4 @@ -package tw +package twutil import ( "github.com/tribalwarshelp/shared/models" diff --git a/tw/urls.go b/tw/urlbuilder/build_url.go similarity index 52% rename from tw/urls.go rename to tw/urlbuilder/build_url.go index 3304245..6ef1394 100644 --- a/tw/urls.go +++ b/tw/urlbuilder/build_url.go @@ -1,4 +1,4 @@ -package tw +package urlbuilder import "fmt" @@ -8,14 +8,18 @@ const ( EndpointVillageProfile = "/game.php?screen=info_village&id=%d" ) -func BuildVillageURL(server, host string, id int) string { - return fmt.Sprintf("https://%s.%s"+EndpointVillageProfile, server, host, id) -} - -func BuildTribeURL(server, host string, id int) string { - return fmt.Sprintf("https://%s.%s"+EndpointTribeProfile, server, host, id) +func BuildServerURL(server, host string) string { + return fmt.Sprintf("https://%s.%s", server, host) } func BuildPlayerURL(server, host string, id int) string { - return fmt.Sprintf("https://%s.%s"+EndpointPlayerProfile, server, host, id) + return BuildServerURL(server, host) + fmt.Sprintf(EndpointPlayerProfile, id) +} + +func BuildVillageURL(server, host string, id int) string { + return BuildServerURL(server, host) + fmt.Sprintf(EndpointVillageProfile, id) +} + +func BuildTribeURL(server, host string, id int) string { + return BuildServerURL(server, host) + fmt.Sprintf(EndpointTribeProfile, id) } diff --git a/utils/track_execution_time.go b/utils/track_execution_time.go deleted file mode 100644 index 99a05af..0000000 --- a/utils/track_execution_time.go +++ /dev/null @@ -1,21 +0,0 @@ -package utils - -import ( - "time" - - "github.com/sirupsen/logrus" -) - -func TrackExecutionTime(log *logrus.Entry, fn func(), fnName string) func() { - return func() { - now := time.Now() - log := log.WithField("fnName", fnName) - log.Infof("%s: called", fnName) - - fn() - - log. - WithField("executionTime", time.Since(now).String()). - Infof("%s: finished executing", fnName) - } -} From 128bb40de436555b9de72d01c6b97333639b48f3 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sun, 2 May 2021 10:05:10 +0200 Subject: [PATCH 02/15] rename dataloader.DataLoader -> dataloader.ServerDataLoader, add a new dataloader to the tw/dataloader package - VersionDataLoader --- go.mod | 2 +- go.sum | 6 +- tw/dataloader/config.go | 19 ++++++ tw/dataloader/endpoints.go | 1 + .../{dataloader.go => server_data_loader.go} | 49 ++++++-------- tw/dataloader/version_data_loader.go | 64 +++++++++++++++++++ 6 files changed, 107 insertions(+), 34 deletions(-) create mode 100644 tw/dataloader/config.go rename tw/dataloader/{dataloader.go => server_data_loader.go} (88%) create mode 100644 tw/dataloader/version_data_loader.go diff --git a/go.mod b/go.mod index fffef83..f3a2fd9 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/tribalwarshelp/shared go 1.16 require ( + github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 github.com/go-pg/pg/v10 v10.9.1 github.com/pkg/errors v0.9.1 - github.com/sirupsen/logrus v1.7.0 github.com/vmihailenco/msgpack/v5 v5.3.1 // indirect go.opentelemetry.io/otel v0.20.0 // indirect golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect diff --git a/go.sum b/go.sum index 308490c..8b13268 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 h1:Oa8Bk4LNcknxw50gZOlvPwEreOlAbOnu7V82lUYNbOM= +github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83/go.mod h1:+iGkf5HfOVeRVd9K7qQDucIl+/Kt3MyenMa90b/O/c4= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -57,10 +59,7 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= -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.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= @@ -118,7 +117,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/tw/dataloader/config.go b/tw/dataloader/config.go new file mode 100644 index 0000000..1f5410e --- /dev/null +++ b/tw/dataloader/config.go @@ -0,0 +1,19 @@ +package dataloader + +import ( + "net/http" + "time" +) + +type Config struct { + BaseURL string + Client *http.Client +} + +func (cfg *Config) Init() { + if cfg.Client == nil { + cfg.Client = &http.Client{ + Timeout: 5 * time.Second, + } + } +} diff --git a/tw/dataloader/endpoints.go b/tw/dataloader/endpoints.go index d623af9..6245217 100644 --- a/tw/dataloader/endpoints.go +++ b/tw/dataloader/endpoints.go @@ -27,4 +27,5 @@ const ( EndpointConquer = "/map/conquer.txt.gz" EndpointConquerNotGzipped = "/map/conquer.txt" EndpointGetConquer = "/interface.php?func=get_conquer&since=%d" + EndpointGetServers = "/backend/get_servers.php" ) diff --git a/tw/dataloader/dataloader.go b/tw/dataloader/server_data_loader.go similarity index 88% rename from tw/dataloader/dataloader.go rename to tw/dataloader/server_data_loader.go index c4af55e..dcb4815 100644 --- a/tw/dataloader/dataloader.go +++ b/tw/dataloader/server_data_loader.go @@ -18,7 +18,7 @@ import ( "github.com/tribalwarshelp/shared/models" ) -type DataLoader interface { +type ServerDataLoader interface { LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, error) LoadPlayers() ([]*models.Player, error) LoadTribes() ([]*models.Tribe, error) @@ -29,26 +29,17 @@ type DataLoader interface { GetUnitConfig() (*models.UnitConfig, error) } -type Config struct { - BaseURL string - Client *http.Client -} - -type dataLoader struct { +type serverDataLoader struct { baseURL string client *http.Client } -func New(cfg *Config) DataLoader { +func NewServerDataLoader(cfg *Config) ServerDataLoader { if cfg == nil { cfg = &Config{} } - if cfg.Client == nil { - cfg.Client = &http.Client{ - Timeout: 5 * time.Second, - } - } - return &dataLoader{ + cfg.Init() + return &serverDataLoader{ cfg.BaseURL, cfg.Client, } @@ -60,7 +51,7 @@ type parsedODLine struct { Score int } -func (d *dataLoader) parseODLine(line []string) (*parsedODLine, error) { +func (d *serverDataLoader) parseODLine(line []string) (*parsedODLine, error) { if len(line) != 3 { return nil, errors.New("invalid line format (should be rank,id,score)") } @@ -81,7 +72,7 @@ func (d *dataLoader) parseODLine(line []string) (*parsedODLine, error) { return p, nil } -func (d *dataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, error) { +func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, error) { m := make(map[int]*models.OpponentsDefeated) formattedURLs := []string{ fmt.Sprintf("%s%s", d.baseURL, EndpointKillAll), @@ -136,7 +127,7 @@ func (d *dataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, erro return m, nil } -func (d *dataLoader) parsePlayerLine(line []string) (*models.Player, error) { +func (d *serverDataLoader) parsePlayerLine(line []string) (*models.Player, error) { if len(line) != 6 { return nil, errors.New("Invalid line format (should be id,name,tribeid,villages,points,rank)") } @@ -174,7 +165,7 @@ func (d *dataLoader) parsePlayerLine(line []string) (*models.Player, error) { return player, nil } -func (d *dataLoader) LoadPlayers() ([]*models.Player, error) { +func (d *serverDataLoader) LoadPlayers() ([]*models.Player, error) { formattedURL := d.baseURL + EndpointPlayer lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -196,7 +187,7 @@ func (d *dataLoader) LoadPlayers() ([]*models.Player, error) { return players, nil } -func (d *dataLoader) parseTribeLine(line []string) (*models.Tribe, error) { +func (d *serverDataLoader) parseTribeLine(line []string) (*models.Tribe, error) { if len(line) != 8 { return nil, errors.New("invalid line format (should be id,name,tag,members,villages,points,allpoints,rank)") } @@ -242,7 +233,7 @@ func (d *dataLoader) parseTribeLine(line []string) (*models.Tribe, error) { return tribe, nil } -func (d *dataLoader) LoadTribes() ([]*models.Tribe, error) { +func (d *serverDataLoader) LoadTribes() ([]*models.Tribe, error) { formattedURL := d.baseURL + EndpointTribe lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -262,7 +253,7 @@ func (d *dataLoader) LoadTribes() ([]*models.Tribe, error) { return tribes, nil } -func (d *dataLoader) parseVillageLine(line []string) (*models.Village, error) { +func (d *serverDataLoader) parseVillageLine(line []string) (*models.Village, error) { if len(line) != 7 { return nil, errors.New("invalid line format (should be id,name,x,y,playerID,points,bonus)") } @@ -299,7 +290,7 @@ func (d *dataLoader) parseVillageLine(line []string) (*models.Village, error) { return village, nil } -func (d *dataLoader) LoadVillages() ([]*models.Village, error) { +func (d *serverDataLoader) LoadVillages() ([]*models.Village, error) { formattedURL := d.baseURL + EndpointVillage lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -319,7 +310,7 @@ func (d *dataLoader) LoadVillages() ([]*models.Village, error) { return villages, nil } -func (d *dataLoader) parseEnnoblementLine(line []string) (*models.Ennoblement, error) { +func (d *serverDataLoader) parseEnnoblementLine(line []string) (*models.Ennoblement, error) { if len(line) != 4 { return nil, errors.New("invalid line format (should be village_id,timestamp,new_owner_id,old_owner_id)") } @@ -350,7 +341,7 @@ type LoadEnnoblementsConfig struct { EnnobledAtGT time.Time } -func (d *dataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.Ennoblement, error) { +func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.Ennoblement, error) { if cfg == nil { cfg = &LoadEnnoblementsConfig{} } @@ -382,7 +373,7 @@ func (d *dataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.En return ennoblements, nil } -func (d *dataLoader) GetConfig() (*models.ServerConfig, error) { +func (d *serverDataLoader) GetConfig() (*models.ServerConfig, error) { formattedURL := d.baseURL + EndpointConfig cfg := &models.ServerConfig{} err := d.getXML(formattedURL, cfg) @@ -392,7 +383,7 @@ func (d *dataLoader) GetConfig() (*models.ServerConfig, error) { return cfg, nil } -func (d *dataLoader) GetBuildingConfig() (*models.BuildingConfig, error) { +func (d *serverDataLoader) GetBuildingConfig() (*models.BuildingConfig, error) { formattedURL := d.baseURL + EndpointBuildingConfig cfg := &models.BuildingConfig{} err := d.getXML(formattedURL, cfg) @@ -402,7 +393,7 @@ func (d *dataLoader) GetBuildingConfig() (*models.BuildingConfig, error) { return cfg, nil } -func (d *dataLoader) GetUnitConfig() (*models.UnitConfig, error) { +func (d *serverDataLoader) GetUnitConfig() (*models.UnitConfig, error) { formattedURL := d.baseURL + EndpointUnitConfig cfg := &models.UnitConfig{} err := d.getXML(formattedURL, cfg) @@ -412,7 +403,7 @@ func (d *dataLoader) GetUnitConfig() (*models.UnitConfig, error) { return cfg, nil } -func (d *dataLoader) getCSVData(url string, compressed bool) ([][]string, error) { +func (d *serverDataLoader) getCSVData(url string, compressed bool) ([][]string, error) { resp, err := d.client.Get(url) if err != nil { return nil, err @@ -424,7 +415,7 @@ func (d *dataLoader) getCSVData(url string, compressed bool) ([][]string, error) return uncompressAndReadCsvLines(resp.Body) } -func (d *dataLoader) getXML(url string, decode interface{}) error { +func (d *serverDataLoader) getXML(url string, decode interface{}) error { resp, err := d.client.Get(url) if err != nil { return err diff --git a/tw/dataloader/version_data_loader.go b/tw/dataloader/version_data_loader.go new file mode 100644 index 0000000..6b446f1 --- /dev/null +++ b/tw/dataloader/version_data_loader.go @@ -0,0 +1,64 @@ +package dataloader + +import ( + "fmt" + phpserialize "github.com/Kichiyaki/go-php-serialize" + "github.com/pkg/errors" + "io/ioutil" + "net/http" +) + +type Server struct { + Key string + URL string +} + +type VersionDataLoader interface { + LoadServers() ([]*Server, error) +} + +type versionDataLoader struct { + baseURL string + client *http.Client +} + +func NewVersionDataLoader(cfg *Config) VersionDataLoader { + if cfg == nil { + cfg = &Config{} + } + cfg.Init() + return &versionDataLoader{ + baseURL: cfg.BaseURL, + client: cfg.Client, + } +} + +func (d *versionDataLoader) LoadServers() ([]*Server, error) { + resp, err := d.client.Get(fmt.Sprintf("https://%s%s", d.baseURL, EndpointGetServers)) + if err != nil { + return nil, errors.Wrap(err, "couldn't load servers") + } + defer resp.Body.Close() + + bodyBytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, errors.Wrap(err, "couldn't read the response body") + } + body, err := phpserialize.Decode(string(bodyBytes)) + if err != nil { + return nil, errors.Wrap(err, "couldn't decode the response body into the go value") + } + + var servers []*Server + for serverKey, url := range body.(map[interface{}]interface{}) { + serverKeyStr := serverKey.(string) + urlStr := url.(string) + if serverKeyStr != "" && urlStr != "" { + servers = append(servers, &Server{ + Key: serverKeyStr, + URL: urlStr, + }) + } + } + return servers, nil +} From 47373e8171fd878721e8afe00366b66b5a0e6073 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sun, 2 May 2021 13:24:03 +0200 Subject: [PATCH 03/15] remove one of the packages - 'Mode' --- mode/mode.go | 37 ------------------- tw/{urlbuilder => }/build_url.go | 2 +- .../version_code_from_server_key.go | 2 +- 3 files changed, 2 insertions(+), 39 deletions(-) delete mode 100644 mode/mode.go rename tw/{urlbuilder => }/build_url.go (97%) rename tw/{twutil => }/version_code_from_server_key.go (92%) diff --git a/mode/mode.go b/mode/mode.go deleted file mode 100644 index cd9f4fc..0000000 --- a/mode/mode.go +++ /dev/null @@ -1,37 +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 -} diff --git a/tw/urlbuilder/build_url.go b/tw/build_url.go similarity index 97% rename from tw/urlbuilder/build_url.go rename to tw/build_url.go index 6ef1394..8b57ab7 100644 --- a/tw/urlbuilder/build_url.go +++ b/tw/build_url.go @@ -1,4 +1,4 @@ -package urlbuilder +package tw import "fmt" diff --git a/tw/twutil/version_code_from_server_key.go b/tw/version_code_from_server_key.go similarity index 92% rename from tw/twutil/version_code_from_server_key.go rename to tw/version_code_from_server_key.go index 82da302..ec0d73a 100644 --- a/tw/twutil/version_code_from_server_key.go +++ b/tw/version_code_from_server_key.go @@ -1,4 +1,4 @@ -package twutil +package tw import ( "github.com/tribalwarshelp/shared/models" From b5464a6da5ab93ed503eecf6225714cf6fcd62b7 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sun, 2 May 2021 15:35:24 +0200 Subject: [PATCH 04/15] huge refactor, rename some of the packages models: - remove most of the helpers and use github.com/Kichiyaki/gopgutil/v10 - remove relationship/sort appenders - add a new model - Coords and a new constructor for this model - ParseCoords --- go.mod | 1 + go.sum | 4 + models/helpers.go | 103 -------- models/opponents_defeated.go | 188 -------------- models/village.go | 232 ------------------ tw/{dataloader => twdataloader}/config.go | 2 +- tw/{dataloader => twdataloader}/endpoints.go | 2 +- .../server_data_loader.go | 70 +++--- .../version_data_loader.go | 2 +- {models => tw/twmodel}/building_config.go | 2 +- tw/twmodel/coords.go | 30 +++ {models => tw/twmodel}/daily_player_stats.go | 63 ++--- {models => tw/twmodel}/daily_tribe_stats.go | 51 ++-- {models => tw/twmodel}/ennoblement.go | 183 ++++++-------- tw/twmodel/helpers.go | 40 +++ tw/twmodel/opponents_defeated.go | 195 +++++++++++++++ {models => tw/twmodel}/player.go | 136 +++++----- {models => tw/twmodel}/player_history.go | 64 ++--- {models => tw/twmodel}/player_name_change.go | 2 +- {models => tw/twmodel}/player_to_server.go | 2 +- {models => tw/twmodel}/server.go | 23 +- {models => tw/twmodel}/server_config.go | 2 +- {models => tw/twmodel}/server_stats.go | 17 +- {models => tw/twmodel}/special_server.go | 2 +- {models => tw/twmodel}/tribe.go | 147 +++++------ {models => tw/twmodel}/tribe_change.go | 119 ++++----- {models => tw/twmodel}/tribe_history.go | 51 ++-- {models => tw/twmodel}/unit_config.go | 2 +- {models => tw/twmodel}/version.go | 26 +- tw/twmodel/village.go | 199 +++++++++++++++ tw/{ => twurlbuilder}/build_url.go | 2 +- tw/version_code_from_server_key.go | 12 - 32 files changed, 887 insertions(+), 1087 deletions(-) delete mode 100644 models/helpers.go delete mode 100644 models/opponents_defeated.go delete mode 100644 models/village.go rename tw/{dataloader => twdataloader}/config.go (91%) rename tw/{dataloader => twdataloader}/endpoints.go (98%) rename tw/{dataloader => twdataloader}/server_data_loader.go (86%) rename tw/{dataloader => twdataloader}/version_data_loader.go (98%) rename {models => tw/twmodel}/building_config.go (99%) create mode 100644 tw/twmodel/coords.go rename {models => tw/twmodel}/daily_player_stats.go (55%) rename {models => tw/twmodel}/daily_tribe_stats.go (64%) rename {models => tw/twmodel}/ennoblement.go (56%) create mode 100644 tw/twmodel/helpers.go create mode 100644 tw/twmodel/opponents_defeated.go rename {models => tw/twmodel}/player.go (59%) rename {models => tw/twmodel}/player_history.go (58%) rename {models => tw/twmodel}/player_name_change.go (97%) rename {models => tw/twmodel}/player_to_server.go (95%) rename {models => tw/twmodel}/server.go (76%) rename {models => tw/twmodel}/server_config.go (99%) rename {models => tw/twmodel}/server_stats.go (79%) rename {models => tw/twmodel}/special_server.go (97%) rename {models => tw/twmodel}/tribe.go (56%) rename {models => tw/twmodel}/tribe_change.go (56%) rename {models => tw/twmodel}/tribe_history.go (64%) rename {models => tw/twmodel}/unit_config.go (99%) rename {models => tw/twmodel}/version.go (76%) create mode 100644 tw/twmodel/village.go rename tw/{ => twurlbuilder}/build_url.go (97%) delete mode 100644 tw/version_code_from_server_key.go diff --git a/go.mod b/go.mod index f3a2fd9..898f16d 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.16 require ( github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 + github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3 // indirect github.com/go-pg/pg/v10 v10.9.1 github.com/pkg/errors v0.9.1 github.com/vmihailenco/msgpack/v5 v5.3.1 // indirect diff --git a/go.sum b/go.sum index 8b13268..8b5b827 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 h1:Oa8Bk4LNcknxw50gZOlvPwEreOlAbOnu7V82lUYNbOM= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83/go.mod h1:+iGkf5HfOVeRVd9K7qQDucIl+/Kt3MyenMa90b/O/c4= +github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3 h1:kF01z5HAcpmn8PeGysegVKWblqV/t+boiZFi+6TIFVM= +github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3/go.mod h1:Ol4iqPU50Ena5DFDOJvGnr17/gVbnhqSW/TuI0mWyo4= +github.com/Kichiyaki/goutil v0.0.0-20210502095630-318d17091eab h1:XFHuFbQQPKkSYw/Z+nQ0ZeOz/Bx3PFWRk0lWtJc7yx8= +github.com/Kichiyaki/goutil v0.0.0-20210502095630-318d17091eab/go.mod h1:+HhI932Xb0xrCodNcCv5GPiCjLYhDxWhCtlEqMIJhB4= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/models/helpers.go b/models/helpers.go deleted file mode 100644 index 9d69b65..0000000 --- a/models/helpers.go +++ /dev/null @@ -1,103 +0,0 @@ -package models - -import ( - "strings" - "time" -) - -func addAliasToColumnName(column, prefix string) string { - if prefix != "" && !strings.HasPrefix(column, prefix+".") { - column = wrapStringInDoubleQuotes(prefix) + "." + wrapStringInDoubleQuotes(column) - } else { - column = wrapStringInDoubleQuotes(column) - } - return column -} - -func wrapStringInDoubleQuotes(str string) string { - return `"` + str + `"` -} - -func buildConditionEquals(column string) string { - return column + " = ?" -} - -func buildConditionLT(column string) string { - return column + " < ?" -} - -func buildConditionLTE(column string) string { - return column + " <= ?" -} - -func buildConditionGT(column string) string { - return column + " > ?" -} - -func buildConditionGTE(column string) string { - return column + " >= ?" -} - -func buildConditionMatch(column string) string { - return column + " LIKE ?" -} - -func buildConditionIEQ(column string) string { - return column + " ILIKE ?" -} - -func buildConditionArray(column string) string { - return column + " = ANY(?)" -} - -func buildConditionNotInArray(column string) string { - return "NOT (" + buildConditionArray(column) + ")" -} - -func isZero(v interface{}) bool { - switch c := v.(type) { - case string: - return c == "" - case *string: - return c == nil - case []string: - return c == nil || len(c) == 0 - case []VersionCode: - return c == nil || len(c) == 0 - case []ServerStatus: - return c == nil || len(c) == 0 - case int: - return c == 0 - case *int: - return c == nil - case []int: - return c == nil || len(c) == 0 - case float64: - return c == 0 - case *float64: - return c == nil - case float32: - return c == 0 - case *float32: - return c == nil - case bool: - return !c - case *bool: - return c == nil - case time.Time: - return c.IsZero() - case *time.Time: - return c == nil - default: - return false - } -} - -func findStringWithPrefix(sl []string, prefix string) string { - for _, s := range sl { - if strings.HasPrefix(s, prefix) { - return s - } - } - return "" -} diff --git a/models/opponents_defeated.go b/models/opponents_defeated.go deleted file mode 100644 index 046f09d..0000000 --- a/models/opponents_defeated.go +++ /dev/null @@ -1,188 +0,0 @@ -package models - -import "github.com/go-pg/pg/v10/orm" - -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"` - RankSup int `pg:",use_zero" json:"rankSup,omitempty" gqlgen:"rankSup"` - ScoreSup int `pg:",use_zero" json:"scoreSup,omitempty" gqlgen:"scoreSup"` - RankTotal int `pg:",use_zero" json:"rankTotal" gqlgen:"rankTotal"` - ScoreTotal int `pg:",use_zero" json:"scoreTotal" gqlgen:"scoreTotal"` -} - -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"` - - RankSup int `json:"rankSup,omitempty" gqlgen:"rankSup"` - RankSupGT int `json:"rankSupGT,omitempty" gqlgen:"rankSupGT"` - RankSupGTE int `json:"rankSupGTE,omitempty" gqlgen:"rankSupGTE"` - RankSupLT int `json:"rankSupLT,omitempty" gqlgen:"rankSupLT"` - RankSupLTE int `json:"rankSupLTE,omitempty" gqlgen:"rankSupLTE"` - ScoreSup int `json:"scoreSup,omitempty" gqlgen:"scoreSup"` - ScoreSupGT int `json:"scoreSupGT,omitempty" gqlgen:"scoreSupGT"` - ScoreSupGTE int `json:"scoreSupGTE,omitempty" gqlgen:"scoreSupGTE"` - ScoreSupLT int `json:"scoreSupLT,omitempty" gqlgen:"scoreSupLT"` - ScoreSupLTE int `json:"scoreSupLTE,omitempty" gqlgen:"scoreSupLTE"` - - 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"` -} - -func (f *OpponentsDefeatedFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { - if !isZero(f.RankAtt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("rank_att", alias)), f.RankAtt) - } - if !isZero(f.RankAttGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("rank_att", alias)), f.RankAttGT) - } - if !isZero(f.RankAttGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("rank_att", alias)), f.RankAttGTE) - } - if !isZero(f.RankAttLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("rank_att", alias)), f.RankAttLT) - } - if !isZero(f.RankAttLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("rank_att", alias)), f.RankAttLTE) - } - if !isZero(f.ScoreAtt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("score_att", alias)), f.ScoreAtt) - } - if !isZero(f.ScoreAttGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("score_att", alias)), f.ScoreAttGT) - } - if !isZero(f.ScoreAttGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("score_att", alias)), f.ScoreAttGTE) - } - if !isZero(f.ScoreAttLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("score_att", alias)), f.ScoreAttLT) - } - if !isZero(f.ScoreAttLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("score_att", alias)), f.ScoreAttLTE) - } - - if !isZero(f.RankDef) { - q = q.Where(buildConditionEquals(addAliasToColumnName("rank_def", alias)), f.RankDef) - } - if !isZero(f.RankDefGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("rank_def", alias)), f.RankDefGT) - } - if !isZero(f.RankDefGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("rank_def", alias)), f.RankDefGTE) - } - if !isZero(f.RankDefLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("rank_def", alias)), f.RankDefLT) - } - if !isZero(f.RankDefLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("rank_def", alias)), f.RankDefLTE) - } - if !isZero(f.ScoreDef) { - q = q.Where(buildConditionEquals(addAliasToColumnName("score_def", alias)), f.ScoreDef) - } - if !isZero(f.ScoreDefGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("score_def", alias)), f.ScoreDefGT) - } - if !isZero(f.ScoreDefGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("score_def", alias)), f.ScoreDefGTE) - } - if !isZero(f.ScoreDefLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("score_def", alias)), f.ScoreDefLT) - } - if !isZero(f.ScoreDefLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("score_def", alias)), f.ScoreDefLTE) - } - - if !isZero(f.RankSup) { - q = q.Where(buildConditionEquals(addAliasToColumnName("rank_sup", alias)), f.RankSup) - } - if !isZero(f.RankSupGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("rank_sup", alias)), f.RankSupGT) - } - if !isZero(f.RankSupGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("rank_sup", alias)), f.RankSupGTE) - } - if !isZero(f.RankSupLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("rank_sup", alias)), f.RankSupLT) - } - if !isZero(f.RankSupLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("rank_sup", alias)), f.RankSupLTE) - } - if !isZero(f.ScoreSup) { - q = q.Where(buildConditionEquals(addAliasToColumnName("score_sup", alias)), f.ScoreSup) - } - if !isZero(f.ScoreSupGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("score_sup", alias)), f.ScoreSupGT) - } - if !isZero(f.ScoreSupGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("score_sup", alias)), f.ScoreSupGTE) - } - if !isZero(f.ScoreSupLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("score_sup", alias)), f.ScoreSupLT) - } - if !isZero(f.ScoreSupLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("score_sup", alias)), f.ScoreSupLTE) - } - - if !isZero(f.RankTotal) { - q = q.Where(buildConditionEquals(addAliasToColumnName("rank_total", alias)), f.RankTotal) - } - if !isZero(f.RankTotalGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("rank_total", alias)), f.RankTotalGT) - } - if !isZero(f.RankTotalGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("rank_total", alias)), f.RankTotalGTE) - } - if !isZero(f.RankTotalLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("rank_total", alias)), f.RankTotalLT) - } - if !isZero(f.RankTotalLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("rank_total", alias)), f.RankTotalLTE) - } - if !isZero(f.ScoreTotal) { - q = q.Where(buildConditionEquals(addAliasToColumnName("score_total", alias)), f.ScoreTotal) - } - if !isZero(f.ScoreTotalGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("score_total", alias)), f.ScoreTotalGT) - } - if !isZero(f.ScoreTotalGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("score_total", alias)), f.ScoreTotalGTE) - } - if !isZero(f.ScoreTotalLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("score_total", alias)), f.ScoreTotalLT) - } - if !isZero(f.ScoreTotalLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("score_total", alias)), f.ScoreTotalLTE) - } - - return q, nil -} diff --git a/models/village.go b/models/village.go deleted file mode 100644 index a823fef..0000000 --- a/models/village.go +++ /dev/null @@ -1,232 +0,0 @@ -package models - -import ( - "fmt" - "strconv" - "strings" - - "github.com/go-pg/pg/v10" - "github.com/go-pg/pg/v10/orm" -) - -type Village struct { - tableName struct{} `pg:"?SERVER.villages,alias:village"` - - ID int `json:"id" pg:"type:bigint,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:"-" pg:"rel:has-one"` -} - -func (v *Village) Continent() string { - if v == nil { - return "" - } - return fmt.Sprintf("K%c%c", strconv.FormatInt(int64(v.Y), 10)[0], strconv.FormatInt(int64(v.X), 10)[0]) -} - -func (v *Village) FullName() string { - return fmt.Sprintf("%s (%d|%d) %s", - v.Name, - v.X, - v.Y, - v.Continent()) -} - -type VillageFilter struct { - 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"` - - XGT int `json:"xGT" gqlgen:"xGT"` - XGTE int `json:"xGTE" gqlgen:"xGTE"` - XLT int `json:"xLT" gqlgen:"xLT"` - XLTE int `json:"xLTE" gqlgen:"xLTE"` - YGT int `json:"yGT" gqlgen:"yGT"` - YGTE int `json:"yGTE" gqlgen:"yGTE"` - YLT int `json:"yLT" gqlgen:"yLT"` - YLTE int `json:"yLTE" gqlgen:"yLTE"` - XY []string `json:"xy" gqlgen:"xy"` - - Points int `json:"points" gqlgen:"points"` - PointsGT int `json:"pointsGT" gqlgen:"pointsGT"` - PointsGTE int `json:"pointsGTE" gqlgen:"pointsGTE"` - PointsLT int `json:"pointsLT" gqlgen:"pointsLT"` - PointsLTE int `json:"pointsLTE" gqlgen:"pointsLTE"` - - Bonus int `json:"bonus" gqlgen:"bonus"` - BonusGT int `json:"bonusGT" gqlgen:"bonusGT"` - BonusGTE int `json:"bonusGTE" gqlgen:"bonusGTE"` - BonusLT int `json:"bonusLT" gqlgen:"bonusLT"` - BonusLTE int `json:"bonusLTE" gqlgen:"bonusLTE"` - - PlayerID []int `json:"playerID" gqlgen:"playerID"` - PlayerIDNEQ []int `json:"playerIDNEQ" gqlgen:"playerIDNEQ"` - PlayerFilter *PlayerFilter `json:"playerFilter" gqlgen:"playerFilter"` -} - -func (f *VillageFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { - if !isZero(f.ID) { - q = q.Where(buildConditionArray(addAliasToColumnName("id", alias)), pg.Array(f.ID)) - } - if !isZero(f.IDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) - } - - if !isZero(f.Name) { - q = q.Where(buildConditionArray(addAliasToColumnName("name", alias)), pg.Array(f.Name)) - } - if !isZero(f.NameNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) - } - if !isZero(f.NameMATCH) { - q = q.Where(buildConditionMatch(addAliasToColumnName("name", alias)), f.NameMATCH) - } - if !isZero(f.NameIEQ) { - q = q.Where(buildConditionIEQ(addAliasToColumnName("name", alias)), f.NameIEQ) - } - - if !isZero(f.XGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("x", alias)), f.XGT) - } - if !isZero(f.XGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("x", alias)), f.XGTE) - } - if !isZero(f.XLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("x", alias)), f.XLT) - } - if !isZero(f.XLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("x", alias)), f.XLTE) - } - - if !isZero(f.YGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("y", alias)), f.YGT) - } - if !isZero(f.YGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("y", alias)), f.YGTE) - } - if !isZero(f.YLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("y", alias)), f.YLT) - } - if !isZero(f.YLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("y", alias)), f.YLTE) - } - - if !isZero(f.XY) { - q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { - for _, xy := range f.XY { - splitted := strings.Split(xy, "|") - if len(splitted) != 2 { - continue - } - x, err := strconv.Atoi(splitted[0]) - if err != nil { - continue - } - y, err := strconv.Atoi(splitted[1]) - if err != nil { - continue - } - q = q.WhereOrGroup(func(q *orm.Query) (*orm.Query, error) { - q = q.Where("x = ?", x) - q = q.Where("y = ?", y) - return q, nil - }) - } - return q, nil - }) - } - - if !isZero(f.Points) { - q = q.Where(buildConditionEquals(addAliasToColumnName("points", alias)), f.Points) - } - if !isZero(f.PointsGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("points", alias)), f.PointsGT) - } - if !isZero(f.PointsGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("points", alias)), f.PointsGTE) - } - if !isZero(f.PointsLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("points", alias)), f.PointsLT) - } - if !isZero(f.PointsLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("points", alias)), f.PointsLTE) - } - - if !isZero(f.Bonus) { - q = q.Where(buildConditionEquals(addAliasToColumnName("bonus", alias)), f.Bonus) - } - if !isZero(f.BonusGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("bonus", alias)), f.BonusGT) - } - if !isZero(f.BonusGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("bonus", alias)), f.BonusGTE) - } - if !isZero(f.BonusLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("bonus", alias)), f.BonusLT) - } - if !isZero(f.BonusLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("bonus", alias)), f.BonusLTE) - } - - if !isZero(f.PlayerID) { - q = q.Where(buildConditionArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) - } - if !isZero(f.PlayerIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) - } - - return q, nil -} - -func (f *VillageFilter) Where(q *orm.Query) (*orm.Query, error) { - return f.WhereWithAlias(q, "village") -} - -type VillageRelationshipAndSortAppender struct { - Filter *VillageFilter - Sort []string -} - -func (a *VillageRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - playerRequired := findStringWithPrefix(a.Sort, "player.") != "" - playerTribeRequired := findStringWithPrefix(a.Sort, "player.tribe.") != "" - if a.Filter.PlayerFilter != nil { - q, err = a.Filter.PlayerFilter.WhereWithAlias(q, "player") - if err != nil { - return q, err - } - playerRequired = true - if a.Filter.PlayerFilter.TribeFilter != nil { - q, err = a.Filter.PlayerFilter.WhereWithAlias(q, "tribe") - if err != nil { - return q, err - } - playerTribeRequired = true - } - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if playerRequired { - q = q.Relation("Player._") - } - - if playerTribeRequired { - q = q.Join("LEFT JOIN ?SERVER.tribes AS tribe ON tribe.id = player.tribe_id") - } - - return q, nil -} diff --git a/tw/dataloader/config.go b/tw/twdataloader/config.go similarity index 91% rename from tw/dataloader/config.go rename to tw/twdataloader/config.go index 1f5410e..502eb1e 100644 --- a/tw/dataloader/config.go +++ b/tw/twdataloader/config.go @@ -1,4 +1,4 @@ -package dataloader +package twdataloader import ( "net/http" diff --git a/tw/dataloader/endpoints.go b/tw/twdataloader/endpoints.go similarity index 98% rename from tw/dataloader/endpoints.go rename to tw/twdataloader/endpoints.go index 6245217..d06f771 100644 --- a/tw/dataloader/endpoints.go +++ b/tw/twdataloader/endpoints.go @@ -1,4 +1,4 @@ -package dataloader +package twdataloader const ( EndpointConfig = "/interface.php?func=get_config" diff --git a/tw/dataloader/server_data_loader.go b/tw/twdataloader/server_data_loader.go similarity index 86% rename from tw/dataloader/server_data_loader.go rename to tw/twdataloader/server_data_loader.go index dcb4815..dc86f37 100644 --- a/tw/dataloader/server_data_loader.go +++ b/tw/twdataloader/server_data_loader.go @@ -1,4 +1,4 @@ -package dataloader +package twdataloader import ( "compress/gzip" @@ -15,18 +15,18 @@ import ( "github.com/pkg/errors" - "github.com/tribalwarshelp/shared/models" + models2 "github.com/tribalwarshelp/shared/tw/twmodel" ) type ServerDataLoader interface { - LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, error) - LoadPlayers() ([]*models.Player, error) - LoadTribes() ([]*models.Tribe, error) - LoadVillages() ([]*models.Village, error) - LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.Ennoblement, error) - GetConfig() (*models.ServerConfig, error) - GetBuildingConfig() (*models.BuildingConfig, error) - GetUnitConfig() (*models.UnitConfig, error) + LoadOD(tribe bool) (map[int]*models2.OpponentsDefeated, error) + LoadPlayers() ([]*models2.Player, error) + LoadTribes() ([]*models2.Tribe, error) + LoadVillages() ([]*models2.Village, error) + LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models2.Ennoblement, error) + GetConfig() (*models2.ServerConfig, error) + GetBuildingConfig() (*models2.BuildingConfig, error) + GetUnitConfig() (*models2.UnitConfig, error) } type serverDataLoader struct { @@ -72,8 +72,8 @@ func (d *serverDataLoader) parseODLine(line []string) (*parsedODLine, error) { return p, nil } -func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, error) { - m := make(map[int]*models.OpponentsDefeated) +func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models2.OpponentsDefeated, error) { + m := make(map[int]*models2.OpponentsDefeated) formattedURLs := []string{ fmt.Sprintf("%s%s", d.baseURL, EndpointKillAll), fmt.Sprintf("%s%s", d.baseURL, EndpointKillAtt), @@ -106,7 +106,7 @@ func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated return nil, errors.Wrapf(err, "couldn't parse the line, url %s, line %s", formattedURL, strings.Join(line, ",")) } if _, ok := m[parsed.ID]; !ok { - m[parsed.ID] = &models.OpponentsDefeated{} + m[parsed.ID] = &models2.OpponentsDefeated{} } switch formattedURL { case formattedURLs[0]: @@ -127,14 +127,14 @@ func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated return m, nil } -func (d *serverDataLoader) parsePlayerLine(line []string) (*models.Player, error) { +func (d *serverDataLoader) parsePlayerLine(line []string) (*models2.Player, error) { if len(line) != 6 { return nil, errors.New("Invalid line format (should be id,name,tribeid,villages,points,rank)") } var err error ex := true - player := &models.Player{ + player := &models2.Player{ Exists: &ex, } player.ID, err = strconv.Atoi(line[0]) @@ -165,7 +165,7 @@ func (d *serverDataLoader) parsePlayerLine(line []string) (*models.Player, error return player, nil } -func (d *serverDataLoader) LoadPlayers() ([]*models.Player, error) { +func (d *serverDataLoader) LoadPlayers() ([]*models2.Player, error) { formattedURL := d.baseURL + EndpointPlayer lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -175,7 +175,7 @@ func (d *serverDataLoader) LoadPlayers() ([]*models.Player, error) { } } - var players []*models.Player + var players []*models2.Player for _, line := range lines { player, err := d.parsePlayerLine(line) if err != nil { @@ -187,14 +187,14 @@ func (d *serverDataLoader) LoadPlayers() ([]*models.Player, error) { return players, nil } -func (d *serverDataLoader) parseTribeLine(line []string) (*models.Tribe, error) { +func (d *serverDataLoader) parseTribeLine(line []string) (*models2.Tribe, error) { if len(line) != 8 { return nil, errors.New("invalid line format (should be id,name,tag,members,villages,points,allpoints,rank)") } var err error ex := true - tribe := &models.Tribe{ + tribe := &models2.Tribe{ Exists: &ex, } tribe.ID, err = strconv.Atoi(line[0]) @@ -233,7 +233,7 @@ func (d *serverDataLoader) parseTribeLine(line []string) (*models.Tribe, error) return tribe, nil } -func (d *serverDataLoader) LoadTribes() ([]*models.Tribe, error) { +func (d *serverDataLoader) LoadTribes() ([]*models2.Tribe, error) { formattedURL := d.baseURL + EndpointTribe lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -242,7 +242,7 @@ func (d *serverDataLoader) LoadTribes() ([]*models.Tribe, error) { return nil, errors.Wrapf(err, "cannot to get data, url %s", formattedURL) } } - var tribes []*models.Tribe + var tribes []*models2.Tribe for _, line := range lines { tribe, err := d.parseTribeLine(line) if err != nil { @@ -253,12 +253,12 @@ func (d *serverDataLoader) LoadTribes() ([]*models.Tribe, error) { return tribes, nil } -func (d *serverDataLoader) parseVillageLine(line []string) (*models.Village, error) { +func (d *serverDataLoader) parseVillageLine(line []string) (*models2.Village, error) { if len(line) != 7 { return nil, errors.New("invalid line format (should be id,name,x,y,playerID,points,bonus)") } var err error - village := &models.Village{} + village := &models2.Village{} village.ID, err = strconv.Atoi(line[0]) if err != nil { return nil, errors.Wrap(err, "village.ID") @@ -290,7 +290,7 @@ func (d *serverDataLoader) parseVillageLine(line []string) (*models.Village, err return village, nil } -func (d *serverDataLoader) LoadVillages() ([]*models.Village, error) { +func (d *serverDataLoader) LoadVillages() ([]*models2.Village, error) { formattedURL := d.baseURL + EndpointVillage lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -299,7 +299,7 @@ func (d *serverDataLoader) LoadVillages() ([]*models.Village, error) { return nil, errors.Wrapf(err, "couldn't load data, formattedURL %s", formattedURL) } } - var villages []*models.Village + var villages []*models2.Village for _, line := range lines { village, err := d.parseVillageLine(line) if err != nil { @@ -310,12 +310,12 @@ func (d *serverDataLoader) LoadVillages() ([]*models.Village, error) { return villages, nil } -func (d *serverDataLoader) parseEnnoblementLine(line []string) (*models.Ennoblement, error) { +func (d *serverDataLoader) parseEnnoblementLine(line []string) (*models2.Ennoblement, error) { if len(line) != 4 { return nil, errors.New("invalid line format (should be village_id,timestamp,new_owner_id,old_owner_id)") } var err error - ennoblement := &models.Ennoblement{} + ennoblement := &models2.Ennoblement{} ennoblement.VillageID, err = strconv.Atoi(line[0]) if err != nil { return nil, errors.Wrap(err, "ennoblement.VillageID") @@ -341,7 +341,7 @@ type LoadEnnoblementsConfig struct { EnnobledAtGT time.Time } -func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.Ennoblement, error) { +func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models2.Ennoblement, error) { if cfg == nil { cfg = &LoadEnnoblementsConfig{} } @@ -360,7 +360,7 @@ func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*mod return nil, errors.Wrapf(err, "couldn't load data, formattedURL %s", formattedURL) } - var ennoblements []*models.Ennoblement + var ennoblements []*models2.Ennoblement for _, line := range lines { ennoblement, err := d.parseEnnoblementLine(line) if err != nil { @@ -373,9 +373,9 @@ func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*mod return ennoblements, nil } -func (d *serverDataLoader) GetConfig() (*models.ServerConfig, error) { +func (d *serverDataLoader) GetConfig() (*models2.ServerConfig, error) { formattedURL := d.baseURL + EndpointConfig - cfg := &models.ServerConfig{} + cfg := &models2.ServerConfig{} err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getConfig") @@ -383,9 +383,9 @@ func (d *serverDataLoader) GetConfig() (*models.ServerConfig, error) { return cfg, nil } -func (d *serverDataLoader) GetBuildingConfig() (*models.BuildingConfig, error) { +func (d *serverDataLoader) GetBuildingConfig() (*models2.BuildingConfig, error) { formattedURL := d.baseURL + EndpointBuildingConfig - cfg := &models.BuildingConfig{} + cfg := &models2.BuildingConfig{} err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getBuildingConfig") @@ -393,9 +393,9 @@ func (d *serverDataLoader) GetBuildingConfig() (*models.BuildingConfig, error) { return cfg, nil } -func (d *serverDataLoader) GetUnitConfig() (*models.UnitConfig, error) { +func (d *serverDataLoader) GetUnitConfig() (*models2.UnitConfig, error) { formattedURL := d.baseURL + EndpointUnitConfig - cfg := &models.UnitConfig{} + cfg := &models2.UnitConfig{} err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getUnitConfig") diff --git a/tw/dataloader/version_data_loader.go b/tw/twdataloader/version_data_loader.go similarity index 98% rename from tw/dataloader/version_data_loader.go rename to tw/twdataloader/version_data_loader.go index 6b446f1..067d5ac 100644 --- a/tw/dataloader/version_data_loader.go +++ b/tw/twdataloader/version_data_loader.go @@ -1,4 +1,4 @@ -package dataloader +package twdataloader import ( "fmt" diff --git a/models/building_config.go b/tw/twmodel/building_config.go similarity index 99% rename from models/building_config.go rename to tw/twmodel/building_config.go index fb409dc..daa93c2 100644 --- a/models/building_config.go +++ b/tw/twmodel/building_config.go @@ -1,4 +1,4 @@ -package models +package twmodel import "encoding/xml" diff --git a/tw/twmodel/coords.go b/tw/twmodel/coords.go new file mode 100644 index 0000000..73aac9c --- /dev/null +++ b/tw/twmodel/coords.go @@ -0,0 +1,30 @@ +package twmodel + +import ( + "github.com/pkg/errors" + "strconv" + "strings" +) + +const CoordsSeparator = "|" + +type Coords struct { + X int + Y int +} + +func ParseCoords(coords string) (*Coords, error) { + splitted := strings.Split(coords, CoordsSeparator) + if len(splitted) != 2 { + return nil, errors.Errorf("%s: invalid format (should be number|number)", coords) + } + x, err := strconv.Atoi(splitted[0]) + if err != nil { + return nil, errors.Wrapf(err, "%s: the part before | isn't a number", coords) + } + y, err := strconv.Atoi(splitted[1]) + if err != nil { + return nil, errors.Wrapf(err, "%s: the part after | isn't a number", coords) + } + return &Coords{x, y}, nil +} diff --git a/models/daily_player_stats.go b/tw/twmodel/daily_player_stats.go similarity index 55% rename from models/daily_player_stats.go rename to tw/twmodel/daily_player_stats.go index 82c3979..a64c28f 100644 --- a/models/daily_player_stats.go +++ b/tw/twmodel/daily_player_stats.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -34,27 +35,34 @@ type DailyPlayerStatsFilter struct { } func (f *DailyPlayerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.CreateDate) { - q = q.Where(buildConditionEquals(addAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) } if !isZero(f.PlayerID) { - q = q.Where(buildConditionArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + } + if f.PlayerFilter != nil { + return f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") } return q, nil @@ -63,42 +71,3 @@ func (f *DailyPlayerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*or func (f *DailyPlayerStatsFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "daily_player_stats") } - -type DailyPlayerStatsRelationshipAndSortAppender struct { - Filter *DailyPlayerStatsFilter - Sort []string -} - -func (a *DailyPlayerStatsRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - playerRequired := findStringWithPrefix(a.Sort, "player.") != "" - playerTribeRequired := findStringWithPrefix(a.Sort, "player.tribe.") != "" - if a.Filter.PlayerFilter != nil { - q, err = a.Filter.PlayerFilter.WhereWithAlias(q, "player") - if err != nil { - return q, err - } - playerRequired = true - if a.Filter.PlayerFilter.TribeFilter != nil { - q, err = a.Filter.PlayerFilter.WhereWithAlias(q, "tribe") - if err != nil { - return q, err - } - playerTribeRequired = true - } - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if playerRequired { - q = q.Relation("Player._") - } - - if playerTribeRequired { - q = q.Join("LEFT JOIN ?SERVER.tribes AS tribe ON tribe.id = player.tribe_id") - } - - return q, nil -} diff --git a/models/daily_tribe_stats.go b/tw/twmodel/daily_tribe_stats.go similarity index 64% rename from models/daily_tribe_stats.go rename to tw/twmodel/daily_tribe_stats.go index eca35ea..2581c98 100644 --- a/models/daily_tribe_stats.go +++ b/tw/twmodel/daily_tribe_stats.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -37,27 +38,34 @@ type DailyTribeStatsFilter struct { } func (f *DailyTribeStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.CreateDate) { - q = q.Where(buildConditionEquals(addAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) } if !isZero(f.TribeID) { - q = q.Where(buildConditionArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) } if !isZero(f.TribeIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + } + if f.TribeFilter != nil { + return f.TribeFilter.WhereWithAlias(q.Relation("Tribe._"), "tribe") } return q, nil @@ -66,30 +74,3 @@ func (f *DailyTribeStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm func (f *DailyTribeStatsFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "daily_tribe_stats") } - -type DailyTribeStatsRelationshipAndSortAppender struct { - Filter *DailyTribeStatsFilter - Sort []string -} - -func (a *DailyTribeStatsRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - tribeRequired := findStringWithPrefix(a.Sort, "tribe.") != "" - if a.Filter.TribeFilter != nil { - q, err = a.Filter.TribeFilter.WhereWithAlias(q, "tribe") - if err != nil { - return q, err - } - tribeRequired = true - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if tribeRequired { - q = q.Relation("Tribe._") - } - - return q, nil -} diff --git a/models/ennoblement.go b/tw/twmodel/ennoblement.go similarity index 56% rename from models/ennoblement.go rename to tw/twmodel/ennoblement.go index 30514c9..85d4b35 100644 --- a/models/ennoblement.go +++ b/tw/twmodel/ennoblement.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -32,21 +33,23 @@ type EnnoblementFilterOr struct { } func (f *EnnoblementFilterOr) WhereWithAlias(q *orm.Query, alias string) *orm.Query { - q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { - if !isZero(f.NewOwnerID) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerID)) - } - if !isZero(f.NewOwnerTribeID) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeID)) - } - if !isZero(f.OldOwnerID) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerID)) - } - if !isZero(f.OldOwnerTribeID) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeID)) - } - return q, nil - }) + if f != nil { + q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { + if !isZero(f.NewOwnerID) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerID)) + } + if !isZero(f.NewOwnerTribeID) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeID)) + } + if !isZero(f.OldOwnerID) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerID)) + } + if !isZero(f.OldOwnerTribeID) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeID)) + } + return q, nil + }) + } return q } @@ -79,135 +82,107 @@ type EnnoblementFilter struct { } func (f *EnnoblementFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.EnnobledAt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("ennobled_at", alias)), f.EnnobledAt) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAt) } if !isZero(f.EnnobledAtGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("ennobled_at", alias)), f.EnnobledAtGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtGT) } if !isZero(f.EnnobledAtGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("ennobled_at", alias)), f.EnnobledAtGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtGTE) } if !isZero(f.EnnobledAtLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("ennobled_at", alias)), f.EnnobledAtLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtLT) } if !isZero(f.EnnobledAtLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("ennobled_at", alias)), f.EnnobledAtLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtLTE) } if !isZero(f.VillageID) { - q = q.Where(buildConditionArray(addAliasToColumnName("village_id", alias)), pg.Array(f.VillageID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("village_id", alias)), pg.Array(f.VillageID)) } if !isZero(f.VillageIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("village_id", alias)), pg.Array(f.VillageIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("village_id", alias)), pg.Array(f.VillageIDNEQ)) } if !isZero(f.NewOwnerID) { - q = q.Where(buildConditionArray(addAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerID)) } if !isZero(f.NewOwnerIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerIDNEQ)) } if !isZero(f.NewOwnerTribeID) { - q = q.Where(buildConditionArray(addAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeID)) } if !isZero(f.NewOwnerTribeIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeIDNEQ)) } if !isZero(f.OldOwnerID) { - q = q.Where(buildConditionArray(addAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerID)) } if !isZero(f.OldOwnerIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerIDNEQ)) } if !isZero(f.OldOwnerTribeID) { - q = q.Where(buildConditionArray(addAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeID)) } if !isZero(f.OldOwnerTribeIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeIDNEQ)) } if f.Or != nil { q = f.Or.WhereWithAlias(q, alias) } + var err error + if f.NewOwnerFilter != nil { + q, err = f.NewOwnerFilter.WhereWithAlias(q.Relation("NewOwner._"), "new_owner", "NewOwner.Tribe._", "new_owner__tribe") + if err != nil { + return q, err + } + } + if f.NewOwnerTribeFilter != nil { + q, err = f.NewOwnerTribeFilter.WhereWithAlias(q.Relation("NewOwnerTribe._"), "new_owner_tribe") + if err != nil { + return q, err + } + } + if f.OldOwnerFilter != nil { + q, err = f.OldOwnerFilter.WhereWithAlias(q.Relation("OldOwner._"), "old_owner", "OldOwner.Tribe._", "old_owner__tribe") + if err != nil { + return q, err + } + } + if f.OldOwnerTribeFilter != nil { + q, err = f.OldOwnerTribeFilter.WhereWithAlias(q.Relation("OldOwnerTribe._"), "old_owner_tribe") + if err != nil { + return q, err + } + } + if f.VillageFilter != nil { + q, err = f. + VillageFilter. + WhereWithAlias( + q.Relation("Village._"), + "village", + "Village.Player._", + "village__player", + "Village.Player.Tribe._", + "village__player__tribe", + ) + if err != nil { + return q, err + } + } + return q, nil } func (f *EnnoblementFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "ennoblement") } - -type EnnoblementRelationshipAndSortAppender struct { - Filter *EnnoblementFilter - Sort []string -} - -func (a *EnnoblementRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - villageRequired := findStringWithPrefix(a.Sort, "village.") != "" - if a.Filter.VillageFilter != nil { - q, err = a.Filter.VillageFilter.WhereWithAlias(q, "village") - if err != nil { - return q, err - } - villageRequired = true - } - - oldOwnerRequired := findStringWithPrefix(a.Sort, "old_owner.") != "" - if a.Filter.OldOwnerFilter != nil { - q, err = a.Filter.OldOwnerFilter.WhereWithAlias(q, "old_owner") - if err != nil { - return q, err - } - oldOwnerRequired = true - } - oldOwnerTribeRequired := findStringWithPrefix(a.Sort, "old_owner_tribe.") != "" - if a.Filter.OldOwnerTribeFilter != nil { - q, err = a.Filter.OldOwnerTribeFilter.WhereWithAlias(q, "old_owner_tribe") - if err != nil { - return q, err - } - oldOwnerTribeRequired = true - } - - newOwnerRequired := findStringWithPrefix(a.Sort, "new_owner.") != "" - if a.Filter.NewOwnerFilter != nil { - q, err = a.Filter.NewOwnerFilter.WhereWithAlias(q, "new_owner") - if err != nil { - return q, err - } - newOwnerRequired = true - } - newOwnerTribeRequired := findStringWithPrefix(a.Sort, "new_owner_tribe.") != "" - if a.Filter.NewOwnerTribeFilter != nil { - q, err = a.Filter.NewOwnerTribeFilter.WhereWithAlias(q, "new_owner_tribe") - if err != nil { - return q, err - } - newOwnerTribeRequired = true - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if villageRequired { - q = q.Relation("Village._") - } - if oldOwnerRequired { - q = q.Relation("OldOwner._") - } - if oldOwnerTribeRequired { - q = q.Relation("OldOwnerTribe._") - } - if newOwnerRequired { - q = q.Relation("NewOwner._") - } - if newOwnerTribeRequired { - q = q.Relation("NewOwnerTribe._") - } - - return q, nil -} diff --git a/tw/twmodel/helpers.go b/tw/twmodel/helpers.go new file mode 100644 index 0000000..a9ffd19 --- /dev/null +++ b/tw/twmodel/helpers.go @@ -0,0 +1,40 @@ +package twmodel + +import ( + "time" +) + +func isZero(v interface{}) bool { + switch c := v.(type) { + case string: + return c == "" + case *string, + []string, + []VersionCode, + []ServerStatus, + *int: + return c == nil + case int: + return c == 0 + case []int: + return c == nil + case float64: + return c == 0 + case *float64: + return c == nil + case float32: + return c == 0 + case *float32: + return c == nil + case bool: + return !c + case *bool: + return c == nil + case time.Time: + return c.IsZero() + case *time.Time: + return c == nil + default: + return false + } +} diff --git a/tw/twmodel/opponents_defeated.go b/tw/twmodel/opponents_defeated.go new file mode 100644 index 0000000..fb0a11e --- /dev/null +++ b/tw/twmodel/opponents_defeated.go @@ -0,0 +1,195 @@ +package twmodel + +import ( + "github.com/Kichiyaki/gopgutil/v10" + "github.com/go-pg/pg/v10/orm" +) + +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"` + RankSup int `pg:",use_zero" json:"rankSup,omitempty" gqlgen:"rankSup"` + ScoreSup int `pg:",use_zero" json:"scoreSup,omitempty" gqlgen:"scoreSup"` + RankTotal int `pg:",use_zero" json:"rankTotal" gqlgen:"rankTotal"` + ScoreTotal int `pg:",use_zero" json:"scoreTotal" gqlgen:"scoreTotal"` +} + +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"` + + RankSup int `json:"rankSup,omitempty" gqlgen:"rankSup"` + RankSupGT int `json:"rankSupGT,omitempty" gqlgen:"rankSupGT"` + RankSupGTE int `json:"rankSupGTE,omitempty" gqlgen:"rankSupGTE"` + RankSupLT int `json:"rankSupLT,omitempty" gqlgen:"rankSupLT"` + RankSupLTE int `json:"rankSupLTE,omitempty" gqlgen:"rankSupLTE"` + ScoreSup int `json:"scoreSup,omitempty" gqlgen:"scoreSup"` + ScoreSupGT int `json:"scoreSupGT,omitempty" gqlgen:"scoreSupGT"` + ScoreSupGTE int `json:"scoreSupGTE,omitempty" gqlgen:"scoreSupGTE"` + ScoreSupLT int `json:"scoreSupLT,omitempty" gqlgen:"scoreSupLT"` + ScoreSupLTE int `json:"scoreSupLTE,omitempty" gqlgen:"scoreSupLTE"` + + 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"` +} + +func (f *OpponentsDefeatedFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + + if !isZero(f.RankAtt) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAtt) + } + if !isZero(f.RankAttGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttGT) + } + if !isZero(f.RankAttGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttGTE) + } + if !isZero(f.RankAttLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttLT) + } + if !isZero(f.RankAttLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttLTE) + } + if !isZero(f.ScoreAtt) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAtt) + } + if !isZero(f.ScoreAttGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttGT) + } + if !isZero(f.ScoreAttGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttGTE) + } + if !isZero(f.ScoreAttLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttLT) + } + if !isZero(f.ScoreAttLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttLTE) + } + + if !isZero(f.RankDef) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDef) + } + if !isZero(f.RankDefGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefGT) + } + if !isZero(f.RankDefGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefGTE) + } + if !isZero(f.RankDefLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefLT) + } + if !isZero(f.RankDefLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefLTE) + } + if !isZero(f.ScoreDef) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDef) + } + if !isZero(f.ScoreDefGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefGT) + } + if !isZero(f.ScoreDefGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefGTE) + } + if !isZero(f.ScoreDefLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefLT) + } + if !isZero(f.ScoreDefLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefLTE) + } + + if !isZero(f.RankSup) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSup) + } + if !isZero(f.RankSupGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupGT) + } + if !isZero(f.RankSupGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupGTE) + } + if !isZero(f.RankSupLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupLT) + } + if !isZero(f.RankSupLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupLTE) + } + if !isZero(f.ScoreSup) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSup) + } + if !isZero(f.ScoreSupGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupGT) + } + if !isZero(f.ScoreSupGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupGTE) + } + if !isZero(f.ScoreSupLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupLT) + } + if !isZero(f.ScoreSupLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupLTE) + } + + if !isZero(f.RankTotal) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotal) + } + if !isZero(f.RankTotalGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalGT) + } + if !isZero(f.RankTotalGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalGTE) + } + if !isZero(f.RankTotalLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalLT) + } + if !isZero(f.RankTotalLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalLTE) + } + if !isZero(f.ScoreTotal) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotal) + } + if !isZero(f.ScoreTotalGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalGT) + } + if !isZero(f.ScoreTotalGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalGTE) + } + if !isZero(f.ScoreTotalLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalLT) + } + if !isZero(f.ScoreTotalLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalLTE) + } + + return q, nil +} diff --git a/models/player.go b/tw/twmodel/player.go similarity index 59% rename from models/player.go rename to tw/twmodel/player.go index e951fae..e592a4c 100644 --- a/models/player.go +++ b/tw/twmodel/player.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -8,7 +9,7 @@ import ( ) type Player struct { - tableName struct{} `pg:"?SERVER.players,alias:player" json:"tableName" xml:"tableName" gqlgen:"tableName"` + tableName struct{} `pg:"?SERVER.players,alias:player"` ID int `json:"id" pg:"type:bigint,pk" gqlgen:"id" xml:"id"` Name string `json:"name" gqlgen:"name" xml:"name"` @@ -92,182 +93,167 @@ type PlayerFilter struct { OpponentsDefeatedFilter } -func (f *PlayerFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { +func (f *PlayerFilter) WhereWithAlias(q *orm.Query, alias, tribeRelationName, tribeAlias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.ID) { - q = q.Where(buildConditionArray(addAliasToColumnName("id", alias)), pg.Array(f.ID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) } if !isZero(f.IDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) } if !isZero(f.Exists) { - q = q.Where(buildConditionEquals(addAliasToColumnName("exists", alias)), f.Exists) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("exists", alias)), f.Exists) } if !isZero(f.Name) { - q = q.Where(buildConditionArray(addAliasToColumnName("name", alias)), pg.Array(f.Name)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) } if !isZero(f.NameNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) } if !isZero(f.NameMATCH) { - q = q.Where(buildConditionMatch(addAliasToColumnName("name", alias)), f.NameMATCH) + q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("name", alias)), f.NameMATCH) } if !isZero(f.NameIEQ) { - q = q.Where(buildConditionIEQ(addAliasToColumnName("name", alias)), f.NameIEQ) + q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) } if !isZero(f.TotalVillages) { - q = q.Where(buildConditionEquals(addAliasToColumnName("total_villages", alias)), f.TotalVillages) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillages) } if !isZero(f.TotalVillagesGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("total_villages", alias)), f.TotalVillagesGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGT) } if !isZero(f.TotalVillagesGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("total_villages", alias)), f.TotalVillagesGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGTE) } if !isZero(f.TotalVillagesLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("total_villages", alias)), f.TotalVillagesLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLT) } if !isZero(f.TotalVillagesLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("total_villages", alias)), f.TotalVillagesLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLTE) } if !isZero(f.Points) { - q = q.Where(buildConditionEquals(addAliasToColumnName("points", alias)), f.Points) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("points", alias)), f.Points) } if !isZero(f.PointsGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("points", alias)), f.PointsGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGT) } if !isZero(f.PointsGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("points", alias)), f.PointsGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGTE) } if !isZero(f.PointsLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("points", alias)), f.PointsLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLT) } if !isZero(f.PointsLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("points", alias)), f.PointsLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLTE) } if !isZero(f.Rank) { - q = q.Where(buildConditionEquals(addAliasToColumnName("rank", alias)), f.Rank) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank", alias)), f.Rank) } if !isZero(f.RankGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("rank", alias)), f.RankGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGT) } if !isZero(f.RankGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("rank", alias)), f.RankGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGTE) } if !isZero(f.RankLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("rank", alias)), f.RankLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLT) } if !isZero(f.RankLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("rank", alias)), f.RankLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLTE) } if !isZero(f.DailyGrowth) { - q = q.Where(buildConditionEquals(addAliasToColumnName("daily_growth", alias)), f.DailyGrowth) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowth) } if !isZero(f.DailyGrowthGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("daily_growth", alias)), f.DailyGrowthGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthGT) } if !isZero(f.DailyGrowthGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("daily_growth", alias)), f.DailyGrowthGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthGTE) } if !isZero(f.DailyGrowthLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("daily_growth", alias)), f.DailyGrowthLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthLT) } if !isZero(f.DailyGrowthLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("daily_growth", alias)), f.DailyGrowthLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthLTE) } if !isZero(f.JoinedAt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("joined_at", alias)), f.JoinedAt) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAt) } if !isZero(f.JoinedAtGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("joined_at", alias)), f.JoinedAtGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtGT) } if !isZero(f.JoinedAtGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("joined_at", alias)), f.JoinedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtGTE) } if !isZero(f.JoinedAtLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("joined_at", alias)), f.JoinedAtLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtLT) } if !isZero(f.JoinedAtLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("joined_at", alias)), f.JoinedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtLTE) } if !isZero(f.LastActivityAt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("last_activity_at", alias)), f.LastActivityAt) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAt) } if !isZero(f.LastActivityAtGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("last_activity_at", alias)), f.LastActivityAtGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtGT) } if !isZero(f.LastActivityAtGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("last_activity_at", alias)), f.LastActivityAtGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtGTE) } if !isZero(f.LastActivityAtLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("last_activity_at", alias)), f.LastActivityAtLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtLT) } if !isZero(f.LastActivityAtLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("last_activity_at", alias)), f.LastActivityAtLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtLTE) } if !isZero(f.DeletedAt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("deleted_at", alias)), f.DeletedAt) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAt) } if !isZero(f.DeletedAtGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("deleted_at", alias)), f.DeletedAtGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGT) } if !isZero(f.DeletedAtGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("deleted_at", alias)), f.DeletedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGTE) } if !isZero(f.DeletedAtLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("deleted_at", alias)), f.DeletedAtLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLT) } if !isZero(f.DeletedAtLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("deleted_at", alias)), f.DeletedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLTE) } if !isZero(f.TribeID) { - q = q.Where(buildConditionArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) } if !isZero(f.TribeIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + } + + var err error + if f.TribeFilter != nil && tribeRelationName != "" { + q, err = f.TribeFilter.WhereWithAlias(q.Relation(tribeRelationName), tribeAlias) + if err != nil { + return nil, err + } } return f.OpponentsDefeatedFilter.WhereWithAlias(q, alias) } func (f *PlayerFilter) Where(q *orm.Query) (*orm.Query, error) { - return f.WhereWithAlias(q, "player") -} - -type PlayerRelationshipAndSortAppender struct { - Filter *PlayerFilter - Sort []string -} - -func (a *PlayerRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - tribeRequired := findStringWithPrefix(a.Sort, "tribe.") != "" - if a.Filter.TribeFilter != nil { - q, err = a.Filter.TribeFilter.WhereWithAlias(q, "tribe") - if err != nil { - return q, err - } - tribeRequired = true - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if tribeRequired { - q = q.Relation("Tribe._") - } - - return q, nil + return f.WhereWithAlias(q, "player", "Tribe._", "tribe") } type FoundPlayer struct { diff --git a/models/player_history.go b/tw/twmodel/player_history.go similarity index 58% rename from models/player_history.go rename to tw/twmodel/player_history.go index 4c7275f..7812a92 100644 --- a/models/player_history.go +++ b/tw/twmodel/player_history.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -36,27 +37,35 @@ type PlayerHistoryFilter struct { } func (f *PlayerHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.CreateDate) { - q = q.Where(buildConditionEquals(addAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) } if !isZero(f.PlayerID) { - q = q.Where(buildConditionArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + } + + if f.PlayerFilter != nil { + return f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") } return q, nil @@ -65,42 +74,3 @@ func (f *PlayerHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Q func (f *PlayerHistoryFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "player_history") } - -type PlayerHistoryRelationshipAndSortAppender struct { - Filter *PlayerHistoryFilter - Sort []string -} - -func (a *PlayerHistoryRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - playerRequired := findStringWithPrefix(a.Sort, "player.") != "" - playerTribeRequired := findStringWithPrefix(a.Sort, "player.tribe.") != "" - if a.Filter.PlayerFilter != nil { - q, err = a.Filter.PlayerFilter.WhereWithAlias(q, "player") - if err != nil { - return q, err - } - playerRequired = true - if a.Filter.PlayerFilter.TribeFilter != nil { - q, err = a.Filter.PlayerFilter.WhereWithAlias(q, "tribe") - if err != nil { - return q, err - } - playerTribeRequired = true - } - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if playerRequired { - q = q.Relation("Player._") - } - - if playerTribeRequired { - q = q.Join("LEFT JOIN ?SERVER.tribes AS tribe ON tribe.id = player.tribe_id") - } - - return q, nil -} diff --git a/models/player_name_change.go b/tw/twmodel/player_name_change.go similarity index 97% rename from models/player_name_change.go rename to tw/twmodel/player_name_change.go index 0813e73..3ea9703 100644 --- a/models/player_name_change.go +++ b/tw/twmodel/player_name_change.go @@ -1,4 +1,4 @@ -package models +package twmodel import "time" diff --git a/models/player_to_server.go b/tw/twmodel/player_to_server.go similarity index 95% rename from models/player_to_server.go rename to tw/twmodel/player_to_server.go index 44445b9..1fcd014 100644 --- a/models/player_to_server.go +++ b/tw/twmodel/player_to_server.go @@ -1,4 +1,4 @@ -package models +package twmodel type PlayerToServer struct { ID int `json:"id" gqlgen:"id" xml:"id"` diff --git a/models/server.go b/tw/twmodel/server.go similarity index 76% rename from models/server.go rename to tw/twmodel/server.go index 33cdba0..31c2037 100644 --- a/models/server.go +++ b/tw/twmodel/server.go @@ -1,7 +1,8 @@ -package models +package twmodel import ( "fmt" + "github.com/Kichiyaki/gopgutil/v10" "io" "strconv" "strings" @@ -83,31 +84,35 @@ type ServerFilter struct { } func (f *ServerFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.Key) { - q = q.Where(buildConditionArray(addAliasToColumnName("key", alias)), pg.Array(f.Key)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("key", alias)), pg.Array(f.Key)) } if !isZero(f.KeyNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("key", alias)), pg.Array(f.KeyNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("key", alias)), pg.Array(f.KeyNEQ)) } if !isZero(f.KeyMATCH) { - q = q.Where(buildConditionMatch(addAliasToColumnName("key", alias)), f.KeyMATCH) + q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("key", alias)), f.KeyMATCH) } if !isZero(f.KeyIEQ) { - q = q.Where(buildConditionIEQ(addAliasToColumnName("key", alias)), f.KeyIEQ) + q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("key", alias)), f.KeyIEQ) } if !isZero(f.Status) { - q = q.Where(buildConditionArray(addAliasToColumnName("status", alias)), pg.Array(f.Status)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("status", alias)), pg.Array(f.Status)) } if !isZero(f.StatusNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("status", alias)), pg.Array(f.StatusNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("status", alias)), pg.Array(f.StatusNEQ)) } if !isZero(f.VersionCode) { - q = q.Where(buildConditionArray(addAliasToColumnName("version_code", alias)), pg.Array(f.VersionCode)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("version_code", alias)), pg.Array(f.VersionCode)) } if !isZero(f.VersionCodeNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("version_code", alias)), pg.Array(f.VersionCodeNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("version_code", alias)), pg.Array(f.VersionCodeNEQ)) } return q, nil diff --git a/models/server_config.go b/tw/twmodel/server_config.go similarity index 99% rename from models/server_config.go rename to tw/twmodel/server_config.go index bbe0511..dc36b02 100644 --- a/models/server_config.go +++ b/tw/twmodel/server_config.go @@ -1,4 +1,4 @@ -package models +package twmodel import "encoding/xml" diff --git a/models/server_stats.go b/tw/twmodel/server_stats.go similarity index 79% rename from models/server_stats.go rename to tw/twmodel/server_stats.go index d3068ee..5a7c8d4 100644 --- a/models/server_stats.go +++ b/tw/twmodel/server_stats.go @@ -1,7 +1,8 @@ -package models +package twmodel import ( "context" + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10/orm" @@ -41,20 +42,24 @@ type ServerStatsFilter struct { } func (f *ServerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.CreateDate) { - q = q.Where(buildConditionEquals(addAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) } return q, nil diff --git a/models/special_server.go b/tw/twmodel/special_server.go similarity index 97% rename from models/special_server.go rename to tw/twmodel/special_server.go index 506fc16..15cc37e 100644 --- a/models/special_server.go +++ b/tw/twmodel/special_server.go @@ -1,4 +1,4 @@ -package models +package twmodel type SpecialServer struct { tableName struct{} `pg:"special_servers,alias:special_server"` diff --git a/models/tribe.go b/tw/twmodel/tribe.go similarity index 56% rename from models/tribe.go rename to tw/twmodel/tribe.go index ae0cc48..cc1ba94 100644 --- a/models/tribe.go +++ b/tw/twmodel/tribe.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -41,24 +42,26 @@ type TribeFilterOr struct { } func (f *TribeFilterOr) WhereWithAlias(q *orm.Query, alias string) *orm.Query { - q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { - if !isZero(f.ID) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("id", alias)), pg.Array(f.ID)) - } - if !isZero(f.Tag) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("tag", alias)), pg.Array(f.Tag)) - } - if !isZero(f.TagIEQ) { - q = q.WhereOr(buildConditionIEQ(addAliasToColumnName("tag", alias)), f.TagIEQ) - } - if !isZero(f.Name) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("name", alias)), pg.Array(f.Name)) - } - if !isZero(f.NameIEQ) { - q = q.WhereOr(buildConditionIEQ(addAliasToColumnName("name", alias)), f.NameIEQ) - } - return q, nil - }) + if f != nil { + q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { + if !isZero(f.ID) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) + } + if !isZero(f.Tag) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tag", alias)), pg.Array(f.Tag)) + } + if !isZero(f.TagIEQ) { + q = q.WhereOr(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("tag", alias)), f.TagIEQ) + } + if !isZero(f.Name) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) + } + if !isZero(f.NameIEQ) { + q = q.WhereOr(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) + } + return q, nil + }) + } return q } @@ -131,169 +134,173 @@ type TribeFilter struct { } func (f *TribeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.ID) { - q = q.Where(buildConditionArray(addAliasToColumnName("id", alias)), pg.Array(f.ID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) } if !isZero(f.IDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) } if !isZero(f.Exists) { - q = q.Where(buildConditionEquals(addAliasToColumnName("exists", alias)), f.Exists) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("exists", alias)), f.Exists) } if !isZero(f.Tag) { - q = q.Where(buildConditionArray(addAliasToColumnName("tag", alias)), pg.Array(f.Tag)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tag", alias)), pg.Array(f.Tag)) } if !isZero(f.TagNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("tag", alias)), pg.Array(f.TagNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tag", alias)), pg.Array(f.TagNEQ)) } if !isZero(f.TagMATCH) { - q = q.Where(buildConditionMatch(addAliasToColumnName("tag", alias)), f.TagMATCH) + q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("tag", alias)), f.TagMATCH) } if !isZero(f.TagIEQ) { - q = q.Where(buildConditionIEQ(addAliasToColumnName("tag", alias)), f.TagIEQ) + q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("tag", alias)), f.TagIEQ) } if !isZero(f.Name) { - q = q.Where(buildConditionArray(addAliasToColumnName("name", alias)), pg.Array(f.Name)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) } if !isZero(f.NameNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) } if !isZero(f.NameMATCH) { - q = q.Where(buildConditionMatch(addAliasToColumnName("name", alias)), f.NameMATCH) + q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("name", alias)), f.NameMATCH) } if !isZero(f.NameIEQ) { - q = q.Where(buildConditionIEQ(addAliasToColumnName("name", alias)), f.NameIEQ) + q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) } if !isZero(f.TotalMembers) { - q = q.Where(buildConditionEquals(addAliasToColumnName("total_members", alias)), f.TotalMembers) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembers) } if !isZero(f.TotalMembersGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("total_members", alias)), f.TotalMembersGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersGT) } if !isZero(f.TotalMembersGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("total_members", alias)), f.TotalMembersGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersGTE) } if !isZero(f.TotalMembersLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("total_members", alias)), f.TotalMembersLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersLT) } if !isZero(f.TotalMembersLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("total_members", alias)), f.TotalMembersLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersLTE) } if !isZero(f.TotalVillages) { - q = q.Where(buildConditionEquals(addAliasToColumnName("total_villages", alias)), f.TotalVillages) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillages) } if !isZero(f.TotalVillagesGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("total_villages", alias)), f.TotalVillagesGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGT) } if !isZero(f.TotalVillagesGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("total_villages", alias)), f.TotalVillagesGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGTE) } if !isZero(f.TotalVillagesLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("total_villages", alias)), f.TotalVillagesLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLT) } if !isZero(f.TotalVillagesLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("total_villages", alias)), f.TotalVillagesLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLTE) } if !isZero(f.Points) { - q = q.Where(buildConditionEquals(addAliasToColumnName("points", alias)), f.Points) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("points", alias)), f.Points) } if !isZero(f.PointsGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("points", alias)), f.PointsGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGT) } if !isZero(f.PointsGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("points", alias)), f.PointsGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGTE) } if !isZero(f.PointsLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("points", alias)), f.PointsLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLT) } if !isZero(f.PointsLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("points", alias)), f.PointsLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLTE) } if !isZero(f.AllPoints) { - q = q.Where(buildConditionEquals(addAliasToColumnName("all_points", alias)), f.AllPoints) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPoints) } if !isZero(f.AllPointsGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("all_points", alias)), f.AllPointsGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsGT) } if !isZero(f.AllPointsGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("all_points", alias)), f.AllPointsGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsGTE) } if !isZero(f.AllPointsLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("all_points", alias)), f.AllPointsLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsLT) } if !isZero(f.AllPointsLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("all_points", alias)), f.AllPointsLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsLTE) } if !isZero(f.Rank) { - q = q.Where(buildConditionEquals(addAliasToColumnName("rank", alias)), f.Rank) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank", alias)), f.Rank) } if !isZero(f.RankGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("rank", alias)), f.RankGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGT) } if !isZero(f.RankGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("rank", alias)), f.RankGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGTE) } if !isZero(f.RankLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("rank", alias)), f.RankLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLT) } if !isZero(f.RankLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("rank", alias)), f.RankLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLTE) } if !isZero(f.Dominance) { - q = q.Where(buildConditionEquals(addAliasToColumnName("dominance", alias)), f.Dominance) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("dominance", alias)), f.Dominance) } if !isZero(f.DominanceGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("dominance", alias)), f.DominanceGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceGT) } if !isZero(f.DominanceGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("dominance", alias)), f.DominanceGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceGTE) } if !isZero(f.DominanceLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("dominance", alias)), f.DominanceLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceLT) } if !isZero(f.DominanceLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("dominance", alias)), f.DominanceLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceLTE) } if !isZero(f.CreatedAt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("created_at", alias)), f.CreatedAt) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAt) } if !isZero(f.CreatedAtGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("created_at", alias)), f.CreatedAtGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGT) } if !isZero(f.CreatedAtGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("created_at", alias)), f.CreatedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGTE) } if !isZero(f.CreatedAtLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("created_at", alias)), f.CreatedAtLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLT) } if !isZero(f.CreatedAtLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("created_at", alias)), f.CreatedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLTE) } if !isZero(f.DeletedAt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("deleted_at", alias)), f.DeletedAt) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAt) } if !isZero(f.DeletedAtGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("deleted_at", alias)), f.DeletedAtGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGT) } if !isZero(f.DeletedAtGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("deleted_at", alias)), f.DeletedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGTE) } if !isZero(f.DeletedAtLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("deleted_at", alias)), f.DeletedAtLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLT) } if !isZero(f.DeletedAtLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("deleted_at", alias)), f.DeletedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLTE) } if f.Or != nil { diff --git a/models/tribe_change.go b/tw/twmodel/tribe_change.go similarity index 56% rename from models/tribe_change.go rename to tw/twmodel/tribe_change.go index 09d88d4..c58c6d5 100644 --- a/models/tribe_change.go +++ b/tw/twmodel/tribe_change.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -26,15 +27,17 @@ type TribeChangeFilterOr struct { } func (f *TribeChangeFilterOr) WhereWithAlias(q *orm.Query, alias string) *orm.Query { - q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { - if !isZero(f.OldTribeID) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeID)) - } - if !isZero(f.NewTribeID) { - q = q.WhereOr(buildConditionArray(addAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeID)) - } - return q, nil - }) + if f != nil { + q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { + if !isZero(f.OldTribeID) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeID)) + } + if !isZero(f.NewTribeID) { + q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeID)) + } + return q, nil + }) + } return q } @@ -61,41 +64,64 @@ type TribeChangeFilter struct { } func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + + var err error if !isZero(f.PlayerID) { - q = q.Where(buildConditionArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + } + if f.PlayerFilter != nil { + q, err = f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") + if err != nil { + return nil, err + } } if !isZero(f.OldTribeID) { - q = q.Where(buildConditionArray(addAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeID)) } if !isZero(f.OldTribeIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeIDNEQ)) + } + if f.OldTribeFilter != nil { + q, err = f.OldTribeFilter.WhereWithAlias(q.Relation("OldTribe._"), "old_tribe") + if err != nil { + return nil, err + } } if !isZero(f.NewTribeID) { - q = q.Where(buildConditionArray(addAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeID)) } if !isZero(f.NewTribeIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeIDNEQ)) + } + if f.NewTribeFilter != nil { + q, err = f.NewTribeFilter.WhereWithAlias(q.Relation("NewTribe._"), "new_tribe") + if err != nil { + return nil, err + } } if !isZero(f.CreatedAt) { - q = q.Where(buildConditionEquals(addAliasToColumnName("created_at", alias)), f.CreatedAt) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAt) } if !isZero(f.CreatedAtGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("created_at", alias)), f.CreatedAtGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGT) } if !isZero(f.CreatedAtGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("created_at", alias)), f.CreatedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGTE) } if !isZero(f.CreatedAtLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("created_at", alias)), f.CreatedAtLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLT) } if !isZero(f.CreatedAtLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("created_at", alias)), f.CreatedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLTE) } if f.Or != nil { @@ -108,54 +134,3 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que func (f *TribeChangeFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "tribe_change") } - -type TribeChangeRelationshipAndSortAppender struct { - Filter *TribeChangeFilter - Sort []string -} - -func (a *TribeChangeRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - playerRequired := findStringWithPrefix(a.Sort, "player.") != "" - if a.Filter.PlayerFilter != nil { - q, err = a.Filter.PlayerFilter.WhereWithAlias(q, "player") - if err != nil { - return q, err - } - playerRequired = true - } - - oldTribeRequired := findStringWithPrefix(a.Sort, "old_tribe.") != "" - if a.Filter.OldTribeFilter != nil { - q, err = a.Filter.OldTribeFilter.WhereWithAlias(q, "old_tribe") - if err != nil { - return q, err - } - oldTribeRequired = true - } - - newTribeRequired := findStringWithPrefix(a.Sort, "new_tribe.") != "" - if a.Filter.NewTribeFilter != nil { - q, err = a.Filter.NewTribeFilter.WhereWithAlias(q, "new_tribe") - if err != nil { - return q, err - } - newTribeRequired = true - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if playerRequired { - q = q.Relation("Tribe._") - } - if oldTribeRequired { - q = q.Relation("OldTribe._") - } - if newTribeRequired { - q = q.Relation("NewTribe._") - } - - return q, nil -} diff --git a/models/tribe_history.go b/tw/twmodel/tribe_history.go similarity index 64% rename from models/tribe_history.go rename to tw/twmodel/tribe_history.go index 196b7d8..ab3d57f 100644 --- a/models/tribe_history.go +++ b/tw/twmodel/tribe_history.go @@ -1,6 +1,7 @@ -package models +package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" "time" "github.com/go-pg/pg/v10" @@ -37,27 +38,34 @@ type TribeHistoryFilter struct { } func (f *TribeHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.CreateDate) { - q = q.Where(buildConditionEquals(addAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(buildConditionGT(addAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(buildConditionGTE(addAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(buildConditionLT(addAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(buildConditionLTE(addAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) } if !isZero(f.TribeID) { - q = q.Where(buildConditionArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) } if !isZero(f.TribeIDNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + } + if f.TribeFilter != nil { + return f.TribeFilter.WhereWithAlias(q.Relation("Tribe"), "tribe") } return q, nil @@ -66,30 +74,3 @@ func (f *TribeHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Qu func (f *TribeHistoryFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "tribe_history") } - -type TribeHistoryRelationshipAndSortAppender struct { - Filter *TribeHistoryFilter - Sort []string -} - -func (a *TribeHistoryRelationshipAndSortAppender) Append(q *orm.Query) (*orm.Query, error) { - var err error - tribeRequired := findStringWithPrefix(a.Sort, "tribe.") != "" - if a.Filter.TribeFilter != nil { - q, err = a.Filter.TribeFilter.WhereWithAlias(q, "tribe") - if err != nil { - return q, err - } - tribeRequired = true - } - - if !isZero(a.Sort) { - q = q.Order(a.Sort...) - } - - if tribeRequired { - q = q.Relation("Tribe._") - } - - return q, nil -} diff --git a/models/unit_config.go b/tw/twmodel/unit_config.go similarity index 99% rename from models/unit_config.go rename to tw/twmodel/unit_config.go index 9e3dbe6..e627d74 100644 --- a/models/unit_config.go +++ b/tw/twmodel/unit_config.go @@ -1,4 +1,4 @@ -package models +package twmodel import "encoding/xml" diff --git a/models/version.go b/tw/twmodel/version.go similarity index 76% rename from models/version.go rename to tw/twmodel/version.go index 507cef0..7b5e9b7 100644 --- a/models/version.go +++ b/tw/twmodel/version.go @@ -1,7 +1,8 @@ -package models +package twmodel import ( "fmt" + "github.com/Kichiyaki/gopgutil/v10" "io" "strconv" "strings" @@ -34,6 +35,13 @@ const ( VersionCodeSK VersionCode = "sk" ) +func VersionCodeFromServerKey(key string) VersionCode { + if len(key) < 2 { + return "" + } + return VersionCode(key[0:2]) +} + func (vc VersionCode) IsValid() bool { switch vc { case VersionCodePL, @@ -102,24 +110,28 @@ type VersionFilter struct { } func (f *VersionFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + if !isZero(f.Code) { - q = q.Where(buildConditionArray(addAliasToColumnName("code", alias)), pg.Array(f.Code)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("code", alias)), pg.Array(f.Code)) } if !isZero(f.CodeNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("code", alias)), pg.Array(f.CodeNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("code", alias)), pg.Array(f.CodeNEQ)) } if !isZero(f.Host) { - q = q.Where(buildConditionArray(addAliasToColumnName("host", alias)), pg.Array(f.Host)) + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("host", alias)), pg.Array(f.Host)) } if !isZero(f.HostNEQ) { - q = q.Where(buildConditionNotInArray(addAliasToColumnName("host", alias)), pg.Array(f.HostNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("host", alias)), pg.Array(f.HostNEQ)) } if !isZero(f.HostMATCH) { - q = q.Where(buildConditionMatch(addAliasToColumnName("host", alias)), f.HostMATCH) + q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("host", alias)), f.HostMATCH) } if !isZero(f.HostIEQ) { - q = q.Where(buildConditionIEQ(addAliasToColumnName("host", alias)), f.HostIEQ) + q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("host", alias)), f.HostIEQ) } return q, nil diff --git a/tw/twmodel/village.go b/tw/twmodel/village.go new file mode 100644 index 0000000..9d2dca6 --- /dev/null +++ b/tw/twmodel/village.go @@ -0,0 +1,199 @@ +package twmodel + +import ( + "fmt" + "github.com/Kichiyaki/gopgutil/v10" + "github.com/go-pg/pg/v10" + "github.com/go-pg/pg/v10/orm" + "strconv" +) + +type Village struct { + tableName struct{} `pg:"?SERVER.villages,alias:village"` + + ID int `json:"id" pg:"type:bigint,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:"-" pg:"rel:has-one"` +} + +func (v *Village) Continent() string { + if v == nil { + return "" + } + return fmt.Sprintf("K%c%c", strconv.FormatInt(int64(v.Y), 10)[0], strconv.FormatInt(int64(v.X), 10)[0]) +} + +func (v *Village) FullName() string { + return fmt.Sprintf("%s (%d|%d) %s", + v.Name, + v.X, + v.Y, + v.Continent()) +} + +type VillageFilter struct { + 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"` + + XGT int `json:"xGT" gqlgen:"xGT"` + XGTE int `json:"xGTE" gqlgen:"xGTE"` + XLT int `json:"xLT" gqlgen:"xLT"` + XLTE int `json:"xLTE" gqlgen:"xLTE"` + YGT int `json:"yGT" gqlgen:"yGT"` + YGTE int `json:"yGTE" gqlgen:"yGTE"` + YLT int `json:"yLT" gqlgen:"yLT"` + YLTE int `json:"yLTE" gqlgen:"yLTE"` + XY []string `json:"xy" gqlgen:"xy"` + + Points int `json:"points" gqlgen:"points"` + PointsGT int `json:"pointsGT" gqlgen:"pointsGT"` + PointsGTE int `json:"pointsGTE" gqlgen:"pointsGTE"` + PointsLT int `json:"pointsLT" gqlgen:"pointsLT"` + PointsLTE int `json:"pointsLTE" gqlgen:"pointsLTE"` + + Bonus int `json:"bonus" gqlgen:"bonus"` + BonusGT int `json:"bonusGT" gqlgen:"bonusGT"` + BonusGTE int `json:"bonusGTE" gqlgen:"bonusGTE"` + BonusLT int `json:"bonusLT" gqlgen:"bonusLT"` + BonusLTE int `json:"bonusLTE" gqlgen:"bonusLTE"` + + PlayerID []int `json:"playerID" gqlgen:"playerID"` + PlayerIDNEQ []int `json:"playerIDNEQ" gqlgen:"playerIDNEQ"` + PlayerFilter *PlayerFilter `json:"playerFilter" gqlgen:"playerFilter"` +} + +func (f *VillageFilter) WhereWithAlias(q *orm.Query, alias, playerRelationName, playerAlias, tribeRelationName, tribeAlias string) (*orm.Query, error) { + if f == nil { + return q, nil + } + + if !isZero(f.ID) { + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) + } + if !isZero(f.IDNEQ) { + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) + } + + if !isZero(f.Name) { + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) + } + if !isZero(f.NameNEQ) { + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) + } + if !isZero(f.NameMATCH) { + q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("name", alias)), f.NameMATCH) + } + if !isZero(f.NameIEQ) { + q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) + } + + if !isZero(f.XGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("x", alias)), f.XGT) + } + if !isZero(f.XGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("x", alias)), f.XGTE) + } + if !isZero(f.XLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("x", alias)), f.XLT) + } + if !isZero(f.XLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("x", alias)), f.XLTE) + } + + if !isZero(f.YGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("y", alias)), f.YGT) + } + if !isZero(f.YGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("y", alias)), f.YGTE) + } + if !isZero(f.YLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("y", alias)), f.YLT) + } + if !isZero(f.YLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("y", alias)), f.YLTE) + } + + if !isZero(f.XY) { + q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { + for _, xy := range f.XY { + parsed, err := ParseCoords(xy) + if err != nil { + continue + } + q = q.WhereOrGroup(func(q *orm.Query) (*orm.Query, error) { + q = q.Where("x = ?", parsed.X) + q = q.Where("y = ?", parsed.Y) + return q, nil + }) + } + return q, nil + }) + } + + if !isZero(f.Points) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("points", alias)), f.Points) + } + if !isZero(f.PointsGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGT) + } + if !isZero(f.PointsGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGTE) + } + if !isZero(f.PointsLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLT) + } + if !isZero(f.PointsLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLTE) + } + + if !isZero(f.Bonus) { + q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("bonus", alias)), f.Bonus) + } + if !isZero(f.BonusGT) { + q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusGT) + } + if !isZero(f.BonusGTE) { + q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusGTE) + } + if !isZero(f.BonusLT) { + q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusLT) + } + if !isZero(f.BonusLTE) { + q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusLTE) + } + + if !isZero(f.PlayerID) { + q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + } + if !isZero(f.PlayerIDNEQ) { + q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + } + + if f.PlayerFilter != nil && playerRelationName != "" && tribeRelationName != "" { + return f.PlayerFilter.WhereWithAlias(q.Relation(playerRelationName), playerAlias, tribeRelationName, tribeAlias) + } + + return q, nil +} + +func (f *VillageFilter) Where(q *orm.Query) (*orm.Query, error) { + return f.WhereWithAlias( + q, + "village", + "Player._", + "player", + "Player.Tribe._", + "player__tribe", + ) +} diff --git a/tw/build_url.go b/tw/twurlbuilder/build_url.go similarity index 97% rename from tw/build_url.go rename to tw/twurlbuilder/build_url.go index 8b57ab7..fcbb354 100644 --- a/tw/build_url.go +++ b/tw/twurlbuilder/build_url.go @@ -1,4 +1,4 @@ -package tw +package twurlbuilder import "fmt" diff --git a/tw/version_code_from_server_key.go b/tw/version_code_from_server_key.go deleted file mode 100644 index ec0d73a..0000000 --- a/tw/version_code_from_server_key.go +++ /dev/null @@ -1,12 +0,0 @@ -package tw - -import ( - "github.com/tribalwarshelp/shared/models" -) - -func VersionCodeFromServerKey(key string) models.VersionCode { - if len(key) < 2 { - return "" - } - return models.VersionCode(key[0:2]) -} From 117175dd77c5d0188676b2dd726f176120c5256e Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sun, 2 May 2021 15:38:08 +0200 Subject: [PATCH 05/15] use reflect in the twmodel.isZero function --- tw/twmodel/helpers.go | 35 ++--------------------------------- 1 file changed, 2 insertions(+), 33 deletions(-) diff --git a/tw/twmodel/helpers.go b/tw/twmodel/helpers.go index a9ffd19..087be55 100644 --- a/tw/twmodel/helpers.go +++ b/tw/twmodel/helpers.go @@ -1,40 +1,9 @@ package twmodel import ( - "time" + "reflect" ) func isZero(v interface{}) bool { - switch c := v.(type) { - case string: - return c == "" - case *string, - []string, - []VersionCode, - []ServerStatus, - *int: - return c == nil - case int: - return c == 0 - case []int: - return c == nil - case float64: - return c == 0 - case *float64: - return c == nil - case float32: - return c == 0 - case *float32: - return c == nil - case bool: - return !c - case *bool: - return c == nil - case time.Time: - return c.IsZero() - case *time.Time: - return c == nil - default: - return false - } + return reflect.ValueOf(v).IsZero() } From c144ba729d6d8f94bfd914e1def156a960482a40 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sun, 2 May 2021 16:01:05 +0200 Subject: [PATCH 06/15] go mod tidy --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 898f16d..f575c3f 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 - github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3 // indirect + github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3 github.com/go-pg/pg/v10 v10.9.1 github.com/pkg/errors v0.9.1 github.com/vmihailenco/msgpack/v5 v5.3.1 // indirect From e137bd656c9462e3bc6c24800f29e6ff09dfd4d6 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sun, 2 May 2021 16:06:09 +0200 Subject: [PATCH 07/15] bump github.com/Kichiyaki/gopgutil --- go.mod | 2 +- go.sum | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f575c3f..6528ed6 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 - github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3 + github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502140321-8b7f2b75ad67 github.com/go-pg/pg/v10 v10.9.1 github.com/pkg/errors v0.9.1 github.com/vmihailenco/msgpack/v5 v5.3.1 // indirect diff --git a/go.sum b/go.sum index 8b5b827..fd402ac 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 h1:Oa8Bk4LNcknxw50gZOlvPwEreOlAbOnu7V82lUYNbOM= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83/go.mod h1:+iGkf5HfOVeRVd9K7qQDucIl+/Kt3MyenMa90b/O/c4= -github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3 h1:kF01z5HAcpmn8PeGysegVKWblqV/t+boiZFi+6TIFVM= -github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502103432-20b73c1e09b3/go.mod h1:Ol4iqPU50Ena5DFDOJvGnr17/gVbnhqSW/TuI0mWyo4= -github.com/Kichiyaki/goutil v0.0.0-20210502095630-318d17091eab h1:XFHuFbQQPKkSYw/Z+nQ0ZeOz/Bx3PFWRk0lWtJc7yx8= -github.com/Kichiyaki/goutil v0.0.0-20210502095630-318d17091eab/go.mod h1:+HhI932Xb0xrCodNcCv5GPiCjLYhDxWhCtlEqMIJhB4= +github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502140321-8b7f2b75ad67 h1:bg+jweFLCKC5X2tKck8IXmAbkOW26hxibg9Od1+eCKA= +github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502140321-8b7f2b75ad67/go.mod h1:Q3QaLlZY3/FcqwmTpdYqoAAGCmPYzrL7hCL7e5kzmjQ= +github.com/Kichiyaki/goutil v0.0.0-20210502135617-7868852b90cc h1:055XPMujAD91cCD8KhbXgpjekwK0AOLEPN54n6A7308= +github.com/Kichiyaki/goutil v0.0.0-20210502135617-7868852b90cc/go.mod h1:+HhI932Xb0xrCodNcCv5GPiCjLYhDxWhCtlEqMIJhB4= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= From 742945be9fdd9ae41327c5236cbd3b79295b01ca Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Mon, 3 May 2021 16:50:38 +0200 Subject: [PATCH 08/15] separate the config for ServerDataLoader and VersionDataLoader --- tw/twdataloader/config.go | 19 ------ tw/twdataloader/helpers.go | 12 ++++ tw/twdataloader/server_data_loader.go | 83 +++++++++++++++----------- tw/twdataloader/version_data_loader.go | 25 +++++--- 4 files changed, 77 insertions(+), 62 deletions(-) delete mode 100644 tw/twdataloader/config.go create mode 100644 tw/twdataloader/helpers.go diff --git a/tw/twdataloader/config.go b/tw/twdataloader/config.go deleted file mode 100644 index 502eb1e..0000000 --- a/tw/twdataloader/config.go +++ /dev/null @@ -1,19 +0,0 @@ -package twdataloader - -import ( - "net/http" - "time" -) - -type Config struct { - BaseURL string - Client *http.Client -} - -func (cfg *Config) Init() { - if cfg.Client == nil { - cfg.Client = &http.Client{ - Timeout: 5 * time.Second, - } - } -} diff --git a/tw/twdataloader/helpers.go b/tw/twdataloader/helpers.go new file mode 100644 index 0000000..4f616af --- /dev/null +++ b/tw/twdataloader/helpers.go @@ -0,0 +1,12 @@ +package twdataloader + +import ( + "net/http" + "time" +) + +func getDefaultHTTPClient() *http.Client { + return &http.Client{ + Timeout: 5 * time.Second, + } +} diff --git a/tw/twdataloader/server_data_loader.go b/tw/twdataloader/server_data_loader.go index dc86f37..c5729e2 100644 --- a/tw/twdataloader/server_data_loader.go +++ b/tw/twdataloader/server_data_loader.go @@ -15,18 +15,29 @@ import ( "github.com/pkg/errors" - models2 "github.com/tribalwarshelp/shared/tw/twmodel" + "github.com/tribalwarshelp/shared/tw/twmodel" ) +type ServerDataLoaderConfig struct { + BaseURL string + Client *http.Client +} + +func (cfg *ServerDataLoaderConfig) Init() { + if cfg.Client == nil { + cfg.Client = getDefaultHTTPClient() + } +} + type ServerDataLoader interface { - LoadOD(tribe bool) (map[int]*models2.OpponentsDefeated, error) - LoadPlayers() ([]*models2.Player, error) - LoadTribes() ([]*models2.Tribe, error) - LoadVillages() ([]*models2.Village, error) - LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models2.Ennoblement, error) - GetConfig() (*models2.ServerConfig, error) - GetBuildingConfig() (*models2.BuildingConfig, error) - GetUnitConfig() (*models2.UnitConfig, error) + LoadOD(tribe bool) (map[int]*twmodel.OpponentsDefeated, error) + LoadPlayers() ([]*twmodel.Player, error) + LoadTribes() ([]*twmodel.Tribe, error) + LoadVillages() ([]*twmodel.Village, error) + LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*twmodel.Ennoblement, error) + GetConfig() (*twmodel.ServerConfig, error) + GetBuildingConfig() (*twmodel.BuildingConfig, error) + GetUnitConfig() (*twmodel.UnitConfig, error) } type serverDataLoader struct { @@ -34,9 +45,9 @@ type serverDataLoader struct { client *http.Client } -func NewServerDataLoader(cfg *Config) ServerDataLoader { +func NewServerDataLoader(cfg *ServerDataLoaderConfig) ServerDataLoader { if cfg == nil { - cfg = &Config{} + cfg = &ServerDataLoaderConfig{} } cfg.Init() return &serverDataLoader{ @@ -72,8 +83,8 @@ func (d *serverDataLoader) parseODLine(line []string) (*parsedODLine, error) { return p, nil } -func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models2.OpponentsDefeated, error) { - m := make(map[int]*models2.OpponentsDefeated) +func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*twmodel.OpponentsDefeated, error) { + m := make(map[int]*twmodel.OpponentsDefeated) formattedURLs := []string{ fmt.Sprintf("%s%s", d.baseURL, EndpointKillAll), fmt.Sprintf("%s%s", d.baseURL, EndpointKillAtt), @@ -106,7 +117,7 @@ func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models2.OpponentsDefeate return nil, errors.Wrapf(err, "couldn't parse the line, url %s, line %s", formattedURL, strings.Join(line, ",")) } if _, ok := m[parsed.ID]; !ok { - m[parsed.ID] = &models2.OpponentsDefeated{} + m[parsed.ID] = &twmodel.OpponentsDefeated{} } switch formattedURL { case formattedURLs[0]: @@ -127,14 +138,14 @@ func (d *serverDataLoader) LoadOD(tribe bool) (map[int]*models2.OpponentsDefeate return m, nil } -func (d *serverDataLoader) parsePlayerLine(line []string) (*models2.Player, error) { +func (d *serverDataLoader) parsePlayerLine(line []string) (*twmodel.Player, error) { if len(line) != 6 { return nil, errors.New("Invalid line format (should be id,name,tribeid,villages,points,rank)") } var err error ex := true - player := &models2.Player{ + player := &twmodel.Player{ Exists: &ex, } player.ID, err = strconv.Atoi(line[0]) @@ -165,7 +176,7 @@ func (d *serverDataLoader) parsePlayerLine(line []string) (*models2.Player, erro return player, nil } -func (d *serverDataLoader) LoadPlayers() ([]*models2.Player, error) { +func (d *serverDataLoader) LoadPlayers() ([]*twmodel.Player, error) { formattedURL := d.baseURL + EndpointPlayer lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -175,7 +186,7 @@ func (d *serverDataLoader) LoadPlayers() ([]*models2.Player, error) { } } - var players []*models2.Player + var players []*twmodel.Player for _, line := range lines { player, err := d.parsePlayerLine(line) if err != nil { @@ -187,14 +198,14 @@ func (d *serverDataLoader) LoadPlayers() ([]*models2.Player, error) { return players, nil } -func (d *serverDataLoader) parseTribeLine(line []string) (*models2.Tribe, error) { +func (d *serverDataLoader) parseTribeLine(line []string) (*twmodel.Tribe, error) { if len(line) != 8 { return nil, errors.New("invalid line format (should be id,name,tag,members,villages,points,allpoints,rank)") } var err error ex := true - tribe := &models2.Tribe{ + tribe := &twmodel.Tribe{ Exists: &ex, } tribe.ID, err = strconv.Atoi(line[0]) @@ -233,7 +244,7 @@ func (d *serverDataLoader) parseTribeLine(line []string) (*models2.Tribe, error) return tribe, nil } -func (d *serverDataLoader) LoadTribes() ([]*models2.Tribe, error) { +func (d *serverDataLoader) LoadTribes() ([]*twmodel.Tribe, error) { formattedURL := d.baseURL + EndpointTribe lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -242,7 +253,7 @@ func (d *serverDataLoader) LoadTribes() ([]*models2.Tribe, error) { return nil, errors.Wrapf(err, "cannot to get data, url %s", formattedURL) } } - var tribes []*models2.Tribe + var tribes []*twmodel.Tribe for _, line := range lines { tribe, err := d.parseTribeLine(line) if err != nil { @@ -253,12 +264,12 @@ func (d *serverDataLoader) LoadTribes() ([]*models2.Tribe, error) { return tribes, nil } -func (d *serverDataLoader) parseVillageLine(line []string) (*models2.Village, error) { +func (d *serverDataLoader) parseVillageLine(line []string) (*twmodel.Village, error) { if len(line) != 7 { return nil, errors.New("invalid line format (should be id,name,x,y,playerID,points,bonus)") } var err error - village := &models2.Village{} + village := &twmodel.Village{} village.ID, err = strconv.Atoi(line[0]) if err != nil { return nil, errors.Wrap(err, "village.ID") @@ -290,7 +301,7 @@ func (d *serverDataLoader) parseVillageLine(line []string) (*models2.Village, er return village, nil } -func (d *serverDataLoader) LoadVillages() ([]*models2.Village, error) { +func (d *serverDataLoader) LoadVillages() ([]*twmodel.Village, error) { formattedURL := d.baseURL + EndpointVillage lines, err := d.getCSVData(formattedURL, true) if err != nil { @@ -299,7 +310,7 @@ func (d *serverDataLoader) LoadVillages() ([]*models2.Village, error) { return nil, errors.Wrapf(err, "couldn't load data, formattedURL %s", formattedURL) } } - var villages []*models2.Village + var villages []*twmodel.Village for _, line := range lines { village, err := d.parseVillageLine(line) if err != nil { @@ -310,12 +321,12 @@ func (d *serverDataLoader) LoadVillages() ([]*models2.Village, error) { return villages, nil } -func (d *serverDataLoader) parseEnnoblementLine(line []string) (*models2.Ennoblement, error) { +func (d *serverDataLoader) parseEnnoblementLine(line []string) (*twmodel.Ennoblement, error) { if len(line) != 4 { return nil, errors.New("invalid line format (should be village_id,timestamp,new_owner_id,old_owner_id)") } var err error - ennoblement := &models2.Ennoblement{} + ennoblement := &twmodel.Ennoblement{} ennoblement.VillageID, err = strconv.Atoi(line[0]) if err != nil { return nil, errors.Wrap(err, "ennoblement.VillageID") @@ -341,7 +352,7 @@ type LoadEnnoblementsConfig struct { EnnobledAtGT time.Time } -func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models2.Ennoblement, error) { +func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*twmodel.Ennoblement, error) { if cfg == nil { cfg = &LoadEnnoblementsConfig{} } @@ -360,7 +371,7 @@ func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*mod return nil, errors.Wrapf(err, "couldn't load data, formattedURL %s", formattedURL) } - var ennoblements []*models2.Ennoblement + var ennoblements []*twmodel.Ennoblement for _, line := range lines { ennoblement, err := d.parseEnnoblementLine(line) if err != nil { @@ -373,9 +384,9 @@ func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*mod return ennoblements, nil } -func (d *serverDataLoader) GetConfig() (*models2.ServerConfig, error) { +func (d *serverDataLoader) GetConfig() (*twmodel.ServerConfig, error) { formattedURL := d.baseURL + EndpointConfig - cfg := &models2.ServerConfig{} + cfg := &twmodel.ServerConfig{} err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getConfig") @@ -383,9 +394,9 @@ func (d *serverDataLoader) GetConfig() (*models2.ServerConfig, error) { return cfg, nil } -func (d *serverDataLoader) GetBuildingConfig() (*models2.BuildingConfig, error) { +func (d *serverDataLoader) GetBuildingConfig() (*twmodel.BuildingConfig, error) { formattedURL := d.baseURL + EndpointBuildingConfig - cfg := &models2.BuildingConfig{} + cfg := &twmodel.BuildingConfig{} err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getBuildingConfig") @@ -393,9 +404,9 @@ func (d *serverDataLoader) GetBuildingConfig() (*models2.BuildingConfig, error) return cfg, nil } -func (d *serverDataLoader) GetUnitConfig() (*models2.UnitConfig, error) { +func (d *serverDataLoader) GetUnitConfig() (*twmodel.UnitConfig, error) { formattedURL := d.baseURL + EndpointUnitConfig - cfg := &models2.UnitConfig{} + cfg := &twmodel.UnitConfig{} err := d.getXML(formattedURL, cfg) if err != nil { return nil, errors.Wrap(err, "getUnitConfig") diff --git a/tw/twdataloader/version_data_loader.go b/tw/twdataloader/version_data_loader.go index 067d5ac..ee3e1fd 100644 --- a/tw/twdataloader/version_data_loader.go +++ b/tw/twdataloader/version_data_loader.go @@ -13,28 +13,39 @@ type Server struct { URL string } +type VersionDataLoaderConfig struct { + Host string + Client *http.Client +} + +func (cfg *VersionDataLoaderConfig) Init() { + if cfg.Client == nil { + cfg.Client = getDefaultHTTPClient() + } +} + type VersionDataLoader interface { LoadServers() ([]*Server, error) } type versionDataLoader struct { - baseURL string - client *http.Client + host string + client *http.Client } -func NewVersionDataLoader(cfg *Config) VersionDataLoader { +func NewVersionDataLoader(cfg *VersionDataLoaderConfig) VersionDataLoader { if cfg == nil { - cfg = &Config{} + cfg = &VersionDataLoaderConfig{} } cfg.Init() return &versionDataLoader{ - baseURL: cfg.BaseURL, - client: cfg.Client, + host: cfg.Host, + client: cfg.Client, } } func (d *versionDataLoader) LoadServers() ([]*Server, error) { - resp, err := d.client.Get(fmt.Sprintf("https://%s%s", d.baseURL, EndpointGetServers)) + resp, err := d.client.Get(fmt.Sprintf("https://%s%s", d.host, EndpointGetServers)) if err != nil { return nil, errors.Wrap(err, "couldn't load servers") } From dbe43f2ad7bd8496b74a5ceecde90f0630f4be8c Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 5 May 2021 12:01:17 +0200 Subject: [PATCH 09/15] bump github.com/Kichiyaki/gopgutil --- go.mod | 2 +- go.sum | 8 +-- tw/twmodel/coords.go | 8 +-- tw/twmodel/daily_player_stats.go | 14 ++-- tw/twmodel/daily_tribe_stats.go | 14 ++-- tw/twmodel/ennoblement.go | 38 +++++------ tw/twmodel/opponents_defeated.go | 80 +++++++++++----------- tw/twmodel/player.go | 88 ++++++++++++------------ tw/twmodel/player_history.go | 14 ++-- tw/twmodel/server.go | 16 ++--- tw/twmodel/server_stats.go | 10 +-- tw/twmodel/tribe.go | 112 +++++++++++++++---------------- tw/twmodel/tribe_change.go | 26 +++---- tw/twmodel/tribe_history.go | 14 ++-- tw/twmodel/version.go | 12 ++-- tw/twmodel/village.go | 59 ++++++++-------- 16 files changed, 258 insertions(+), 257 deletions(-) diff --git a/go.mod b/go.mod index 6528ed6..369498c 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 - github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502140321-8b7f2b75ad67 + github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210505093434-655fa2df248f github.com/go-pg/pg/v10 v10.9.1 github.com/pkg/errors v0.9.1 github.com/vmihailenco/msgpack/v5 v5.3.1 // indirect diff --git a/go.sum b/go.sum index fd402ac..6c89535 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83 h1:Oa8Bk4LNcknxw50gZOlvPwEreOlAbOnu7V82lUYNbOM= github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83/go.mod h1:+iGkf5HfOVeRVd9K7qQDucIl+/Kt3MyenMa90b/O/c4= -github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502140321-8b7f2b75ad67 h1:bg+jweFLCKC5X2tKck8IXmAbkOW26hxibg9Od1+eCKA= -github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210502140321-8b7f2b75ad67/go.mod h1:Q3QaLlZY3/FcqwmTpdYqoAAGCmPYzrL7hCL7e5kzmjQ= -github.com/Kichiyaki/goutil v0.0.0-20210502135617-7868852b90cc h1:055XPMujAD91cCD8KhbXgpjekwK0AOLEPN54n6A7308= -github.com/Kichiyaki/goutil v0.0.0-20210502135617-7868852b90cc/go.mod h1:+HhI932Xb0xrCodNcCv5GPiCjLYhDxWhCtlEqMIJhB4= +github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210505093434-655fa2df248f h1:/kJmv8B59cMHdTmsko0RyAOeRC9WpsQPDmLtRXOAU6c= +github.com/Kichiyaki/gopgutil/v10 v10.0.0-20210505093434-655fa2df248f/go.mod h1:MSAEhr8oeK+Rhjhqyl31/8/AI88thYky80OyD8mheDA= +github.com/Kichiyaki/goutil v0.0.0-20210504132659-3d843a787db7 h1:OU3ZA5H8fHTzaYIw9UBfH3gtWRL0XmnczlhH3E2PjV4= +github.com/Kichiyaki/goutil v0.0.0-20210504132659-3d843a787db7/go.mod h1:+HhI932Xb0xrCodNcCv5GPiCjLYhDxWhCtlEqMIJhB4= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tw/twmodel/coords.go b/tw/twmodel/coords.go index 73aac9c..f1e32d4 100644 --- a/tw/twmodel/coords.go +++ b/tw/twmodel/coords.go @@ -14,15 +14,15 @@ type Coords struct { } func ParseCoords(coords string) (*Coords, error) { - splitted := strings.Split(coords, CoordsSeparator) - if len(splitted) != 2 { + parts := strings.Split(coords, CoordsSeparator) + if len(parts) != 2 { return nil, errors.Errorf("%s: invalid format (should be number|number)", coords) } - x, err := strconv.Atoi(splitted[0]) + x, err := strconv.Atoi(parts[0]) if err != nil { return nil, errors.Wrapf(err, "%s: the part before | isn't a number", coords) } - y, err := strconv.Atoi(splitted[1]) + y, err := strconv.Atoi(parts[1]) if err != nil { return nil, errors.Wrapf(err, "%s: the part after | isn't a number", coords) } diff --git a/tw/twmodel/daily_player_stats.go b/tw/twmodel/daily_player_stats.go index a64c28f..6d78943 100644 --- a/tw/twmodel/daily_player_stats.go +++ b/tw/twmodel/daily_player_stats.go @@ -40,26 +40,26 @@ func (f *DailyPlayerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*or } if !isZero(f.CreateDate) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLTE) } if !isZero(f.PlayerID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } if f.PlayerFilter != nil { return f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") diff --git a/tw/twmodel/daily_tribe_stats.go b/tw/twmodel/daily_tribe_stats.go index 2581c98..be348c6 100644 --- a/tw/twmodel/daily_tribe_stats.go +++ b/tw/twmodel/daily_tribe_stats.go @@ -43,26 +43,26 @@ func (f *DailyTribeStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm } if !isZero(f.CreateDate) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLTE) } if !isZero(f.TribeID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeID)) } if !isZero(f.TribeIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeIDNEQ)) } if f.TribeFilter != nil { return f.TribeFilter.WhereWithAlias(q.Relation("Tribe._"), "tribe") diff --git a/tw/twmodel/ennoblement.go b/tw/twmodel/ennoblement.go index 85d4b35..15c46f6 100644 --- a/tw/twmodel/ennoblement.go +++ b/tw/twmodel/ennoblement.go @@ -36,16 +36,16 @@ func (f *EnnoblementFilterOr) WhereWithAlias(q *orm.Query, alias string) *orm.Qu if f != nil { q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { if !isZero(f.NewOwnerID) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerID)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("new_owner_id", alias), pg.Array(f.NewOwnerID)) } if !isZero(f.NewOwnerTribeID) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeID)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias), pg.Array(f.NewOwnerTribeID)) } if !isZero(f.OldOwnerID) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerID)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("old_owner_id", alias), pg.Array(f.OldOwnerID)) } if !isZero(f.OldOwnerTribeID) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeID)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias), pg.Array(f.OldOwnerTribeID)) } return q, nil }) @@ -87,52 +87,52 @@ func (f *EnnoblementFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que } if !isZero(f.EnnobledAt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("ennobled_at", alias), f.EnnobledAt) } if !isZero(f.EnnobledAtGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("ennobled_at", alias), f.EnnobledAtGT) } if !isZero(f.EnnobledAtGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("ennobled_at", alias), f.EnnobledAtGTE) } if !isZero(f.EnnobledAtLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("ennobled_at", alias), f.EnnobledAtLT) } if !isZero(f.EnnobledAtLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("ennobled_at", alias)), f.EnnobledAtLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("ennobled_at", alias), f.EnnobledAtLTE) } if !isZero(f.VillageID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("village_id", alias)), pg.Array(f.VillageID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("village_id", alias), pg.Array(f.VillageID)) } if !isZero(f.VillageIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("village_id", alias)), pg.Array(f.VillageIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("village_id", alias), pg.Array(f.VillageIDNEQ)) } if !isZero(f.NewOwnerID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("new_owner_id", alias), pg.Array(f.NewOwnerID)) } if !isZero(f.NewOwnerIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("new_owner_id", alias)), pg.Array(f.NewOwnerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("new_owner_id", alias), pg.Array(f.NewOwnerIDNEQ)) } if !isZero(f.NewOwnerTribeID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias), pg.Array(f.NewOwnerTribeID)) } if !isZero(f.NewOwnerTribeIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias)), pg.Array(f.NewOwnerTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("new_owner_tribe_id", alias), pg.Array(f.NewOwnerTribeIDNEQ)) } if !isZero(f.OldOwnerID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("old_owner_id", alias), pg.Array(f.OldOwnerID)) } if !isZero(f.OldOwnerIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("old_owner_id", alias)), pg.Array(f.OldOwnerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("old_owner_id", alias), pg.Array(f.OldOwnerIDNEQ)) } if !isZero(f.OldOwnerTribeID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias), pg.Array(f.OldOwnerTribeID)) } if !isZero(f.OldOwnerTribeIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias)), pg.Array(f.OldOwnerTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("old_owner_tribe_id", alias), pg.Array(f.OldOwnerTribeIDNEQ)) } if f.Or != nil { diff --git a/tw/twmodel/opponents_defeated.go b/tw/twmodel/opponents_defeated.go index fb0a11e..f085552 100644 --- a/tw/twmodel/opponents_defeated.go +++ b/tw/twmodel/opponents_defeated.go @@ -68,127 +68,127 @@ func (f *OpponentsDefeatedFilter) WhereWithAlias(q *orm.Query, alias string) (*o } if !isZero(f.RankAtt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAtt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("rank_att", alias), f.RankAtt) } if !isZero(f.RankAttGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("rank_att", alias), f.RankAttGT) } if !isZero(f.RankAttGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("rank_att", alias), f.RankAttGTE) } if !isZero(f.RankAttLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("rank_att", alias), f.RankAttLT) } if !isZero(f.RankAttLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_att", alias)), f.RankAttLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("rank_att", alias), f.RankAttLTE) } if !isZero(f.ScoreAtt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAtt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("score_att", alias), f.ScoreAtt) } if !isZero(f.ScoreAttGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("score_att", alias), f.ScoreAttGT) } if !isZero(f.ScoreAttGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("score_att", alias), f.ScoreAttGTE) } if !isZero(f.ScoreAttLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("score_att", alias), f.ScoreAttLT) } if !isZero(f.ScoreAttLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_att", alias)), f.ScoreAttLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("score_att", alias), f.ScoreAttLTE) } if !isZero(f.RankDef) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDef) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("rank_def", alias), f.RankDef) } if !isZero(f.RankDefGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("rank_def", alias), f.RankDefGT) } if !isZero(f.RankDefGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("rank_def", alias), f.RankDefGTE) } if !isZero(f.RankDefLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("rank_def", alias), f.RankDefLT) } if !isZero(f.RankDefLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_def", alias)), f.RankDefLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("rank_def", alias), f.RankDefLTE) } if !isZero(f.ScoreDef) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDef) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("score_def", alias), f.ScoreDef) } if !isZero(f.ScoreDefGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("score_def", alias), f.ScoreDefGT) } if !isZero(f.ScoreDefGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("score_def", alias), f.ScoreDefGTE) } if !isZero(f.ScoreDefLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("score_def", alias), f.ScoreDefLT) } if !isZero(f.ScoreDefLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_def", alias)), f.ScoreDefLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("score_def", alias), f.ScoreDefLTE) } if !isZero(f.RankSup) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSup) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("rank_sup", alias), f.RankSup) } if !isZero(f.RankSupGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("rank_sup", alias), f.RankSupGT) } if !isZero(f.RankSupGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("rank_sup", alias), f.RankSupGTE) } if !isZero(f.RankSupLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("rank_sup", alias), f.RankSupLT) } if !isZero(f.RankSupLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_sup", alias)), f.RankSupLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("rank_sup", alias), f.RankSupLTE) } if !isZero(f.ScoreSup) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSup) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("score_sup", alias), f.ScoreSup) } if !isZero(f.ScoreSupGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("score_sup", alias), f.ScoreSupGT) } if !isZero(f.ScoreSupGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("score_sup", alias), f.ScoreSupGTE) } if !isZero(f.ScoreSupLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("score_sup", alias), f.ScoreSupLT) } if !isZero(f.ScoreSupLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_sup", alias)), f.ScoreSupLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("score_sup", alias), f.ScoreSupLTE) } if !isZero(f.RankTotal) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotal) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("rank_total", alias), f.RankTotal) } if !isZero(f.RankTotalGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("rank_total", alias), f.RankTotalGT) } if !isZero(f.RankTotalGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("rank_total", alias), f.RankTotalGTE) } if !isZero(f.RankTotalLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("rank_total", alias), f.RankTotalLT) } if !isZero(f.RankTotalLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank_total", alias)), f.RankTotalLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("rank_total", alias), f.RankTotalLTE) } if !isZero(f.ScoreTotal) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotal) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("score_total", alias), f.ScoreTotal) } if !isZero(f.ScoreTotalGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("score_total", alias), f.ScoreTotalGT) } if !isZero(f.ScoreTotalGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("score_total", alias), f.ScoreTotalGTE) } if !isZero(f.ScoreTotalLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("score_total", alias), f.ScoreTotalLT) } if !isZero(f.ScoreTotalLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("score_total", alias)), f.ScoreTotalLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("score_total", alias), f.ScoreTotalLTE) } return q, nil diff --git a/tw/twmodel/player.go b/tw/twmodel/player.go index e592a4c..cd88fd8 100644 --- a/tw/twmodel/player.go +++ b/tw/twmodel/player.go @@ -99,146 +99,146 @@ func (f *PlayerFilter) WhereWithAlias(q *orm.Query, alias, tribeRelationName, tr } if !isZero(f.ID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID)) } if !isZero(f.IDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.IDNEQ)) } if !isZero(f.Exists) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("exists", alias)), f.Exists) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("exists", alias), f.Exists) } if !isZero(f.Name) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("name", alias), pg.Array(f.Name)) } if !isZero(f.NameNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("name", alias), pg.Array(f.NameNEQ)) } if !isZero(f.NameMATCH) { - q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("name", alias)), f.NameMATCH) + q = q.Where(gopgutil.BuildConditionMatch("?"), gopgutil.AddAliasToColumnName("name", alias), f.NameMATCH) } if !isZero(f.NameIEQ) { - q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) + q = q.Where(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("name", alias), f.NameIEQ) } if !isZero(f.TotalVillages) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillages) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillages) } if !isZero(f.TotalVillagesGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesGT) } if !isZero(f.TotalVillagesGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesGTE) } if !isZero(f.TotalVillagesLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesLT) } if !isZero(f.TotalVillagesLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesLTE) } if !isZero(f.Points) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("points", alias)), f.Points) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("points", alias), f.Points) } if !isZero(f.PointsGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsGT) } if !isZero(f.PointsGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsGTE) } if !isZero(f.PointsLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsLT) } if !isZero(f.PointsLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsLTE) } if !isZero(f.Rank) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank", alias)), f.Rank) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("rank", alias), f.Rank) } if !isZero(f.RankGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankGT) } if !isZero(f.RankGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankGTE) } if !isZero(f.RankLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankLT) } if !isZero(f.RankLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankLTE) } if !isZero(f.DailyGrowth) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowth) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("daily_growth", alias), f.DailyGrowth) } if !isZero(f.DailyGrowthGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("daily_growth", alias), f.DailyGrowthGT) } if !isZero(f.DailyGrowthGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("daily_growth", alias), f.DailyGrowthGTE) } if !isZero(f.DailyGrowthLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("daily_growth", alias), f.DailyGrowthLT) } if !isZero(f.DailyGrowthLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("daily_growth", alias)), f.DailyGrowthLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("daily_growth", alias), f.DailyGrowthLTE) } if !isZero(f.JoinedAt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("joined_at", alias), f.JoinedAt) } if !isZero(f.JoinedAtGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("joined_at", alias), f.JoinedAtGT) } if !isZero(f.JoinedAtGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("joined_at", alias), f.JoinedAtGTE) } if !isZero(f.JoinedAtLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("joined_at", alias), f.JoinedAtLT) } if !isZero(f.JoinedAtLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("joined_at", alias)), f.JoinedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("joined_at", alias), f.JoinedAtLTE) } if !isZero(f.LastActivityAt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("last_activity_at", alias), f.LastActivityAt) } if !isZero(f.LastActivityAtGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("last_activity_at", alias), f.LastActivityAtGT) } if !isZero(f.LastActivityAtGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("last_activity_at", alias), f.LastActivityAtGTE) } if !isZero(f.LastActivityAtLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("last_activity_at", alias), f.LastActivityAtLT) } if !isZero(f.LastActivityAtLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("last_activity_at", alias)), f.LastActivityAtLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("last_activity_at", alias), f.LastActivityAtLTE) } if !isZero(f.DeletedAt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAt) } if !isZero(f.DeletedAtGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtGT) } if !isZero(f.DeletedAtGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtGTE) } if !isZero(f.DeletedAtLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtLT) } if !isZero(f.DeletedAtLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtLTE) } if !isZero(f.TribeID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeID)) } if !isZero(f.TribeIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeIDNEQ)) } var err error diff --git a/tw/twmodel/player_history.go b/tw/twmodel/player_history.go index 7812a92..6dc4d8a 100644 --- a/tw/twmodel/player_history.go +++ b/tw/twmodel/player_history.go @@ -42,26 +42,26 @@ func (f *PlayerHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Q } if !isZero(f.CreateDate) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLTE) } if !isZero(f.PlayerID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } if f.PlayerFilter != nil { diff --git a/tw/twmodel/server.go b/tw/twmodel/server.go index 31c2037..4eec0f9 100644 --- a/tw/twmodel/server.go +++ b/tw/twmodel/server.go @@ -89,30 +89,30 @@ func (f *ServerFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, e } if !isZero(f.Key) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("key", alias)), pg.Array(f.Key)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("key", alias), pg.Array(f.Key)) } if !isZero(f.KeyNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("key", alias)), pg.Array(f.KeyNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("key", alias), pg.Array(f.KeyNEQ)) } if !isZero(f.KeyMATCH) { - q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("key", alias)), f.KeyMATCH) + q = q.Where(gopgutil.BuildConditionMatch("?"), gopgutil.AddAliasToColumnName("key", alias), f.KeyMATCH) } if !isZero(f.KeyIEQ) { - q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("key", alias)), f.KeyIEQ) + q = q.Where(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("key", alias), f.KeyIEQ) } if !isZero(f.Status) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("status", alias)), pg.Array(f.Status)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("status", alias), pg.Array(f.Status)) } if !isZero(f.StatusNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("status", alias)), pg.Array(f.StatusNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("status", alias), pg.Array(f.StatusNEQ)) } if !isZero(f.VersionCode) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("version_code", alias)), pg.Array(f.VersionCode)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("version_code", alias), pg.Array(f.VersionCode)) } if !isZero(f.VersionCodeNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("version_code", alias)), pg.Array(f.VersionCodeNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("version_code", alias), pg.Array(f.VersionCodeNEQ)) } return q, nil diff --git a/tw/twmodel/server_stats.go b/tw/twmodel/server_stats.go index 5a7c8d4..6d3fef9 100644 --- a/tw/twmodel/server_stats.go +++ b/tw/twmodel/server_stats.go @@ -47,19 +47,19 @@ func (f *ServerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que } if !isZero(f.CreateDate) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLTE) } return q, nil diff --git a/tw/twmodel/tribe.go b/tw/twmodel/tribe.go index cc1ba94..90c8735 100644 --- a/tw/twmodel/tribe.go +++ b/tw/twmodel/tribe.go @@ -45,19 +45,19 @@ func (f *TribeFilterOr) WhereWithAlias(q *orm.Query, alias string) *orm.Query { if f != nil { q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { if !isZero(f.ID) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID)) } if !isZero(f.Tag) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tag", alias)), pg.Array(f.Tag)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("tag", alias), pg.Array(f.Tag)) } if !isZero(f.TagIEQ) { - q = q.WhereOr(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("tag", alias)), f.TagIEQ) + q = q.WhereOr(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("tag", alias), f.TagIEQ) } if !isZero(f.Name) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("name", alias), pg.Array(f.Name)) } if !isZero(f.NameIEQ) { - q = q.WhereOr(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) + q = q.WhereOr(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("name", alias), f.NameIEQ) } return q, nil }) @@ -139,168 +139,168 @@ func (f *TribeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, er } if !isZero(f.ID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID)) } if !isZero(f.IDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.IDNEQ)) } if !isZero(f.Exists) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("exists", alias)), f.Exists) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("exists", alias), f.Exists) } if !isZero(f.Tag) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tag", alias)), pg.Array(f.Tag)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("tag", alias), pg.Array(f.Tag)) } if !isZero(f.TagNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tag", alias)), pg.Array(f.TagNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("tag", alias), pg.Array(f.TagNEQ)) } if !isZero(f.TagMATCH) { - q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("tag", alias)), f.TagMATCH) + q = q.Where(gopgutil.BuildConditionMatch("?"), gopgutil.AddAliasToColumnName("tag", alias), f.TagMATCH) } if !isZero(f.TagIEQ) { - q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("tag", alias)), f.TagIEQ) + q = q.Where(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("tag", alias), f.TagIEQ) } if !isZero(f.Name) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("name", alias), pg.Array(f.Name)) } if !isZero(f.NameNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("name", alias), pg.Array(f.NameNEQ)) } if !isZero(f.NameMATCH) { - q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("name", alias)), f.NameMATCH) + q = q.Where(gopgutil.BuildConditionMatch("?"), gopgutil.AddAliasToColumnName("name", alias), f.NameMATCH) } if !isZero(f.NameIEQ) { - q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) + q = q.Where(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("name", alias), f.NameIEQ) } if !isZero(f.TotalMembers) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembers) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("total_members", alias), f.TotalMembers) } if !isZero(f.TotalMembersGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("total_members", alias), f.TotalMembersGT) } if !isZero(f.TotalMembersGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("total_members", alias), f.TotalMembersGTE) } if !isZero(f.TotalMembersLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("total_members", alias), f.TotalMembersLT) } if !isZero(f.TotalMembersLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("total_members", alias)), f.TotalMembersLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("total_members", alias), f.TotalMembersLTE) } if !isZero(f.TotalVillages) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillages) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillages) } if !isZero(f.TotalVillagesGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesGT) } if !isZero(f.TotalVillagesGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesGTE) } if !isZero(f.TotalVillagesLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesLT) } if !isZero(f.TotalVillagesLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("total_villages", alias)), f.TotalVillagesLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("total_villages", alias), f.TotalVillagesLTE) } if !isZero(f.Points) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("points", alias)), f.Points) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("points", alias), f.Points) } if !isZero(f.PointsGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsGT) } if !isZero(f.PointsGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsGTE) } if !isZero(f.PointsLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsLT) } if !isZero(f.PointsLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsLTE) } if !isZero(f.AllPoints) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPoints) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("all_points", alias), f.AllPoints) } if !isZero(f.AllPointsGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("all_points", alias), f.AllPointsGT) } if !isZero(f.AllPointsGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("all_points", alias), f.AllPointsGTE) } if !isZero(f.AllPointsLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("all_points", alias), f.AllPointsLT) } if !isZero(f.AllPointsLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("all_points", alias)), f.AllPointsLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("all_points", alias), f.AllPointsLTE) } if !isZero(f.Rank) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("rank", alias)), f.Rank) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("rank", alias), f.Rank) } if !isZero(f.RankGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankGT) } if !isZero(f.RankGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankGTE) } if !isZero(f.RankLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankLT) } if !isZero(f.RankLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("rank", alias)), f.RankLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("rank", alias), f.RankLTE) } if !isZero(f.Dominance) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("dominance", alias)), f.Dominance) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("dominance", alias), f.Dominance) } if !isZero(f.DominanceGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("dominance", alias), f.DominanceGT) } if !isZero(f.DominanceGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("dominance", alias), f.DominanceGTE) } if !isZero(f.DominanceLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("dominance", alias), f.DominanceLT) } if !isZero(f.DominanceLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("dominance", alias)), f.DominanceLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("dominance", alias), f.DominanceLTE) } if !isZero(f.CreatedAt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAt) } if !isZero(f.CreatedAtGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtGT) } if !isZero(f.CreatedAtGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtGTE) } if !isZero(f.CreatedAtLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtLT) } if !isZero(f.CreatedAtLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtLTE) } if !isZero(f.DeletedAt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAt) } if !isZero(f.DeletedAtGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtGT) } if !isZero(f.DeletedAtGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtGTE) } if !isZero(f.DeletedAtLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtLT) } if !isZero(f.DeletedAtLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("deleted_at", alias)), f.DeletedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("deleted_at", alias), f.DeletedAtLTE) } if f.Or != nil { diff --git a/tw/twmodel/tribe_change.go b/tw/twmodel/tribe_change.go index c58c6d5..b67eca8 100644 --- a/tw/twmodel/tribe_change.go +++ b/tw/twmodel/tribe_change.go @@ -30,10 +30,10 @@ func (f *TribeChangeFilterOr) WhereWithAlias(q *orm.Query, alias string) *orm.Qu if f != nil { q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { if !isZero(f.OldTribeID) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeID)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("old_tribe_id", alias), pg.Array(f.OldTribeID)) } if !isZero(f.NewTribeID) { - q = q.WhereOr(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeID)) + q = q.WhereOr(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("new_tribe_id", alias), pg.Array(f.NewTribeID)) } return q, nil }) @@ -70,10 +70,10 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que var err error if !isZero(f.PlayerID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } if f.PlayerFilter != nil { q, err = f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") @@ -83,10 +83,10 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que } if !isZero(f.OldTribeID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("old_tribe_id", alias), pg.Array(f.OldTribeID)) } if !isZero(f.OldTribeIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("old_tribe_id", alias)), pg.Array(f.OldTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("old_tribe_id", alias), pg.Array(f.OldTribeIDNEQ)) } if f.OldTribeFilter != nil { q, err = f.OldTribeFilter.WhereWithAlias(q.Relation("OldTribe._"), "old_tribe") @@ -96,10 +96,10 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que } if !isZero(f.NewTribeID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("new_tribe_id", alias), pg.Array(f.NewTribeID)) } if !isZero(f.NewTribeIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("new_tribe_id", alias)), pg.Array(f.NewTribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("new_tribe_id", alias), pg.Array(f.NewTribeIDNEQ)) } if f.NewTribeFilter != nil { q, err = f.NewTribeFilter.WhereWithAlias(q.Relation("NewTribe._"), "new_tribe") @@ -109,19 +109,19 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que } if !isZero(f.CreatedAt) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAt) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAt) } if !isZero(f.CreatedAtGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtGT) } if !isZero(f.CreatedAtGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtGTE) } if !isZero(f.CreatedAtLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtLT) } if !isZero(f.CreatedAtLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("created_at", alias)), f.CreatedAtLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAtLTE) } if f.Or != nil { diff --git a/tw/twmodel/tribe_history.go b/tw/twmodel/tribe_history.go index ab3d57f..295aad3 100644 --- a/tw/twmodel/tribe_history.go +++ b/tw/twmodel/tribe_history.go @@ -43,26 +43,26 @@ func (f *TribeHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Qu } if !isZero(f.CreateDate) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDate) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDate) } if !isZero(f.CreateDateGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGT) } if !isZero(f.CreateDateGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateGTE) } if !isZero(f.CreateDateLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLT) } if !isZero(f.CreateDateLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("create_date", alias)), f.CreateDateLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("create_date", alias), f.CreateDateLTE) } if !isZero(f.TribeID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeID)) } if !isZero(f.TribeIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("tribe_id", alias)), pg.Array(f.TribeIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeIDNEQ)) } if f.TribeFilter != nil { return f.TribeFilter.WhereWithAlias(q.Relation("Tribe"), "tribe") diff --git a/tw/twmodel/version.go b/tw/twmodel/version.go index 7b5e9b7..8317391 100644 --- a/tw/twmodel/version.go +++ b/tw/twmodel/version.go @@ -115,23 +115,23 @@ func (f *VersionFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, } if !isZero(f.Code) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("code", alias)), pg.Array(f.Code)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("code", alias), pg.Array(f.Code)) } if !isZero(f.CodeNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("code", alias)), pg.Array(f.CodeNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("code", alias), pg.Array(f.CodeNEQ)) } if !isZero(f.Host) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("host", alias)), pg.Array(f.Host)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("host", alias), pg.Array(f.Host)) } if !isZero(f.HostNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("host", alias)), pg.Array(f.HostNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("host", alias), pg.Array(f.HostNEQ)) } if !isZero(f.HostMATCH) { - q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("host", alias)), f.HostMATCH) + q = q.Where(gopgutil.BuildConditionMatch("?"), gopgutil.AddAliasToColumnName("host", alias), f.HostMATCH) } if !isZero(f.HostIEQ) { - q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("host", alias)), f.HostIEQ) + q = q.Where(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("host", alias), f.HostIEQ) } return q, nil diff --git a/tw/twmodel/village.go b/tw/twmodel/village.go index 9d2dca6..da5e0d3 100644 --- a/tw/twmodel/village.go +++ b/tw/twmodel/village.go @@ -79,61 +79,62 @@ func (f *VillageFilter) WhereWithAlias(q *orm.Query, alias, playerRelationName, } if !isZero(f.ID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.ID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.ID)) } if !isZero(f.IDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("id", alias)), pg.Array(f.IDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("id", alias), pg.Array(f.IDNEQ)) } if !isZero(f.Name) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.Name)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("name", alias), pg.Array(f.Name)) } if !isZero(f.NameNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("name", alias)), pg.Array(f.NameNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("name", alias), pg.Array(f.NameNEQ)) } if !isZero(f.NameMATCH) { - q = q.Where(gopgutil.BuildConditionMatch(gopgutil.AddAliasToColumnName("name", alias)), f.NameMATCH) + q = q.Where(gopgutil.BuildConditionMatch("?"), gopgutil.AddAliasToColumnName("name", alias), f.NameMATCH) } if !isZero(f.NameIEQ) { - q = q.Where(gopgutil.BuildConditionIEQ(gopgutil.AddAliasToColumnName("name", alias)), f.NameIEQ) + q = q.Where(gopgutil.BuildConditionIEQ("?"), gopgutil.AddAliasToColumnName("name", alias), f.NameIEQ) } if !isZero(f.XGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("x", alias)), f.XGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("x", alias), f.XGT) } if !isZero(f.XGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("x", alias)), f.XGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("x", alias), f.XGTE) } if !isZero(f.XLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("x", alias)), f.XLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("x", alias), f.XLT) } if !isZero(f.XLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("x", alias)), f.XLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("x", alias), f.XLTE) } if !isZero(f.YGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("y", alias)), f.YGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("y", alias), f.YGT) } if !isZero(f.YGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("y", alias)), f.YGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("y", alias), f.YGTE) } if !isZero(f.YLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("y", alias)), f.YLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("y", alias), f.YLT) } if !isZero(f.YLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("y", alias)), f.YLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("y", alias), f.YLTE) } if !isZero(f.XY) { q = q.WhereGroup(func(q *orm.Query) (*orm.Query, error) { for _, xy := range f.XY { - parsed, err := ParseCoords(xy) + coords, err := ParseCoords(xy) if err != nil { continue } q = q.WhereOrGroup(func(q *orm.Query) (*orm.Query, error) { - q = q.Where("x = ?", parsed.X) - q = q.Where("y = ?", parsed.Y) + q = q. + Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("x", alias), coords.X). + Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("y", alias), coords.Y) return q, nil }) } @@ -142,42 +143,42 @@ func (f *VillageFilter) WhereWithAlias(q *orm.Query, alias, playerRelationName, } if !isZero(f.Points) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("points", alias)), f.Points) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("points", alias), f.Points) } if !isZero(f.PointsGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsGT) } if !isZero(f.PointsGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsGTE) } if !isZero(f.PointsLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsLT) } if !isZero(f.PointsLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("points", alias)), f.PointsLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("points", alias), f.PointsLTE) } if !isZero(f.Bonus) { - q = q.Where(gopgutil.BuildConditionEquals(gopgutil.AddAliasToColumnName("bonus", alias)), f.Bonus) + q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("bonus", alias), f.Bonus) } if !isZero(f.BonusGT) { - q = q.Where(gopgutil.BuildConditionGT(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusGT) + q = q.Where(gopgutil.BuildConditionGT("?"), gopgutil.AddAliasToColumnName("bonus", alias), f.BonusGT) } if !isZero(f.BonusGTE) { - q = q.Where(gopgutil.BuildConditionGTE(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusGTE) + q = q.Where(gopgutil.BuildConditionGTE("?"), gopgutil.AddAliasToColumnName("bonus", alias), f.BonusGTE) } if !isZero(f.BonusLT) { - q = q.Where(gopgutil.BuildConditionLT(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusLT) + q = q.Where(gopgutil.BuildConditionLT("?"), gopgutil.AddAliasToColumnName("bonus", alias), f.BonusLT) } if !isZero(f.BonusLTE) { - q = q.Where(gopgutil.BuildConditionLTE(gopgutil.AddAliasToColumnName("bonus", alias)), f.BonusLTE) + q = q.Where(gopgutil.BuildConditionLTE("?"), gopgutil.AddAliasToColumnName("bonus", alias), f.BonusLTE) } if !isZero(f.PlayerID) { - q = q.Where(gopgutil.BuildConditionArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerID)) + q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { - q = q.Where(gopgutil.BuildConditionNotInArray(gopgutil.AddAliasToColumnName("player_id", alias)), pg.Array(f.PlayerIDNEQ)) + q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } if f.PlayerFilter != nil && playerRelationName != "" && tribeRelationName != "" { From 102ae553bec88f59fc616a2463ac42272767e3de Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 5 May 2021 13:14:50 +0200 Subject: [PATCH 10/15] refactor appending filters --- tw/twmodel/daily_player_stats.go | 24 +++++++-- tw/twmodel/daily_tribe_stats.go | 24 +++++++-- tw/twmodel/ennoblement.go | 86 +++++++++++++++++--------------- tw/twmodel/helpers.go | 37 ++++++++++++++ tw/twmodel/player.go | 33 ++++++++---- tw/twmodel/player_history.go | 25 ++++++++-- tw/twmodel/tribe_change.go | 52 ++++++++++++------- tw/twmodel/tribe_history.go | 21 ++++++++ tw/twmodel/village.go | 43 +++++++++++----- 9 files changed, 252 insertions(+), 93 deletions(-) diff --git a/tw/twmodel/daily_player_stats.go b/tw/twmodel/daily_player_stats.go index 6d78943..44330f0 100644 --- a/tw/twmodel/daily_player_stats.go +++ b/tw/twmodel/daily_player_stats.go @@ -61,9 +61,6 @@ func (f *DailyPlayerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*or if !isZero(f.PlayerIDNEQ) { q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } - if f.PlayerFilter != nil { - return f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") - } return q, nil } @@ -71,3 +68,24 @@ func (f *DailyPlayerStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*or func (f *DailyPlayerStatsFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "daily_player_stats") } + +func (f *DailyPlayerStatsFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "daily_player_stats", + }, + } + if f.PlayerFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.PlayerFilter, + relationName: "Player", + }) + } + + return appendFilters(q, filtersToAppend...) +} diff --git a/tw/twmodel/daily_tribe_stats.go b/tw/twmodel/daily_tribe_stats.go index be348c6..9726b5c 100644 --- a/tw/twmodel/daily_tribe_stats.go +++ b/tw/twmodel/daily_tribe_stats.go @@ -64,9 +64,6 @@ func (f *DailyTribeStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm if !isZero(f.TribeIDNEQ) { q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeIDNEQ)) } - if f.TribeFilter != nil { - return f.TribeFilter.WhereWithAlias(q.Relation("Tribe._"), "tribe") - } return q, nil } @@ -74,3 +71,24 @@ func (f *DailyTribeStatsFilter) WhereWithAlias(q *orm.Query, alias string) (*orm func (f *DailyTribeStatsFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "daily_tribe_stats") } + +func (f *DailyTribeStatsFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "daily_tribe_stats", + }, + } + if f.TribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.TribeFilter, + relationName: "Tribe", + }) + } + + return appendFilters(q, filtersToAppend...) +} diff --git a/tw/twmodel/ennoblement.go b/tw/twmodel/ennoblement.go index 15c46f6..a883c0f 100644 --- a/tw/twmodel/ennoblement.go +++ b/tw/twmodel/ennoblement.go @@ -139,50 +139,54 @@ func (f *EnnoblementFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que q = f.Or.WhereWithAlias(q, alias) } - var err error - if f.NewOwnerFilter != nil { - q, err = f.NewOwnerFilter.WhereWithAlias(q.Relation("NewOwner._"), "new_owner", "NewOwner.Tribe._", "new_owner__tribe") - if err != nil { - return q, err - } - } - if f.NewOwnerTribeFilter != nil { - q, err = f.NewOwnerTribeFilter.WhereWithAlias(q.Relation("NewOwnerTribe._"), "new_owner_tribe") - if err != nil { - return q, err - } - } - if f.OldOwnerFilter != nil { - q, err = f.OldOwnerFilter.WhereWithAlias(q.Relation("OldOwner._"), "old_owner", "OldOwner.Tribe._", "old_owner__tribe") - if err != nil { - return q, err - } - } - if f.OldOwnerTribeFilter != nil { - q, err = f.OldOwnerTribeFilter.WhereWithAlias(q.Relation("OldOwnerTribe._"), "old_owner_tribe") - if err != nil { - return q, err - } - } - if f.VillageFilter != nil { - q, err = f. - VillageFilter. - WhereWithAlias( - q.Relation("Village._"), - "village", - "Village.Player._", - "village__player", - "Village.Player.Tribe._", - "village__player__tribe", - ) - if err != nil { - return q, err - } - } - return q, nil } func (f *EnnoblementFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "ennoblement") } + +func (f *EnnoblementFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "ennoblement", + }, + } + if f.VillageFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.VillageFilter, + relationName: "Village", + }) + } + if f.OldOwnerFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.OldOwnerFilter, + relationName: "OldOwner", + }) + } + if f.OldOwnerTribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.OldOwnerTribeFilter, + relationName: "OldOwnerTribe", + }) + } + if f.NewOwnerFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.NewOwnerFilter, + relationName: "NewOwner", + }) + } + if f.NewOwnerTribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.NewOwnerTribeFilter, + relationName: "newOwnerTribe", + }) + } + + return appendFilters(q, filtersToAppend...) +} diff --git a/tw/twmodel/helpers.go b/tw/twmodel/helpers.go index 087be55..ac8bcdc 100644 --- a/tw/twmodel/helpers.go +++ b/tw/twmodel/helpers.go @@ -1,9 +1,46 @@ package twmodel import ( + "github.com/Kichiyaki/gopgutil/v10" + "github.com/go-pg/pg/v10/orm" + "github.com/pkg/errors" "reflect" ) func isZero(v interface{}) bool { return reflect.ValueOf(v).IsZero() } + +type filter interface { + WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) +} + +type filterToAppend struct { + filter filter + alias string + relationName string +} + +func appendFilters(q *orm.Query, filtersToAppend ...filterToAppend) (*orm.Query, error) { + tableModel := q.TableModel() + var err error + for _, f := range filtersToAppend { + if f.relationName != "" && tableModel != nil { + alias, err := gopgutil.BuildAliasFromRelationName(tableModel, f.relationName) + if err != nil { + return q, errors.Wrapf(err, "Couldn't build alias from relation name '%s'", f.relationName) + } + q, err = f.filter.WhereWithAlias(q.Relation(f.relationName+"._"), alias) + if err != nil { + return q, errors.Wrapf(err, "Couldn't append filter for the relation '%s'", f.relationName) + } + continue + } + q, err = f.filter.WhereWithAlias(q, f.alias) + if err != nil { + return q, err + } + } + + return q, nil +} diff --git a/tw/twmodel/player.go b/tw/twmodel/player.go index cd88fd8..7d433f0 100644 --- a/tw/twmodel/player.go +++ b/tw/twmodel/player.go @@ -93,7 +93,7 @@ type PlayerFilter struct { OpponentsDefeatedFilter } -func (f *PlayerFilter) WhereWithAlias(q *orm.Query, alias, tribeRelationName, tribeAlias string) (*orm.Query, error) { +func (f *PlayerFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { if f == nil { return q, nil } @@ -241,19 +241,32 @@ func (f *PlayerFilter) WhereWithAlias(q *orm.Query, alias, tribeRelationName, tr q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("tribe_id", alias), pg.Array(f.TribeIDNEQ)) } - var err error - if f.TribeFilter != nil && tribeRelationName != "" { - q, err = f.TribeFilter.WhereWithAlias(q.Relation(tribeRelationName), tribeAlias) - if err != nil { - return nil, err - } - } - return f.OpponentsDefeatedFilter.WhereWithAlias(q, alias) } func (f *PlayerFilter) Where(q *orm.Query) (*orm.Query, error) { - return f.WhereWithAlias(q, "player", "Tribe._", "tribe") + return f.WhereWithAlias(q, "player") +} + +func (f *PlayerFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "player", + }, + } + if f.TribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.TribeFilter, + relationName: "Tribe", + }) + } + + return appendFilters(q, filtersToAppend...) } type FoundPlayer struct { diff --git a/tw/twmodel/player_history.go b/tw/twmodel/player_history.go index 6dc4d8a..fb91c8c 100644 --- a/tw/twmodel/player_history.go +++ b/tw/twmodel/player_history.go @@ -64,13 +64,30 @@ func (f *PlayerHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Q q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } - if f.PlayerFilter != nil { - return f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") - } - return q, nil } func (f *PlayerHistoryFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "player_history") } + +func (f *PlayerHistoryFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "player_history", + }, + } + if f.PlayerFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.PlayerFilter, + relationName: "Player", + }) + } + + return appendFilters(q, filtersToAppend...) +} diff --git a/tw/twmodel/tribe_change.go b/tw/twmodel/tribe_change.go index b67eca8..44ef843 100644 --- a/tw/twmodel/tribe_change.go +++ b/tw/twmodel/tribe_change.go @@ -68,19 +68,12 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que return q, nil } - var err error if !isZero(f.PlayerID) { q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerID)) } if !isZero(f.PlayerIDNEQ) { q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } - if f.PlayerFilter != nil { - q, err = f.PlayerFilter.WhereWithAlias(q.Relation("Player._"), "player", "Player.Tribe._", "player__tribe") - if err != nil { - return nil, err - } - } if !isZero(f.OldTribeID) { q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("old_tribe_id", alias), pg.Array(f.OldTribeID)) @@ -88,12 +81,6 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que if !isZero(f.OldTribeIDNEQ) { q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("old_tribe_id", alias), pg.Array(f.OldTribeIDNEQ)) } - if f.OldTribeFilter != nil { - q, err = f.OldTribeFilter.WhereWithAlias(q.Relation("OldTribe._"), "old_tribe") - if err != nil { - return nil, err - } - } if !isZero(f.NewTribeID) { q = q.Where(gopgutil.BuildConditionArray("?"), gopgutil.AddAliasToColumnName("new_tribe_id", alias), pg.Array(f.NewTribeID)) @@ -101,12 +88,6 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que if !isZero(f.NewTribeIDNEQ) { q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("new_tribe_id", alias), pg.Array(f.NewTribeIDNEQ)) } - if f.NewTribeFilter != nil { - q, err = f.NewTribeFilter.WhereWithAlias(q.Relation("NewTribe._"), "new_tribe") - if err != nil { - return nil, err - } - } if !isZero(f.CreatedAt) { q = q.Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("created_at", alias), f.CreatedAt) @@ -134,3 +115,36 @@ func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Que func (f *TribeChangeFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "tribe_change") } + +func (f *TribeChangeFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "tribe_change", + }, + } + if f.PlayerFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.PlayerFilter, + relationName: "Player", + }) + } + if f.OldTribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.OldTribeFilter, + relationName: "OldTribe", + }) + } + if f.NewTribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.NewTribeFilter, + relationName: "NewTribe", + }) + } + + return appendFilters(q, filtersToAppend...) +} diff --git a/tw/twmodel/tribe_history.go b/tw/twmodel/tribe_history.go index 295aad3..086a7de 100644 --- a/tw/twmodel/tribe_history.go +++ b/tw/twmodel/tribe_history.go @@ -74,3 +74,24 @@ func (f *TribeHistoryFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Qu func (f *TribeHistoryFilter) Where(q *orm.Query) (*orm.Query, error) { return f.WhereWithAlias(q, "tribe_history") } + +func (f *TribeHistoryFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "tribe_history", + }, + } + if f.TribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.TribeFilter, + relationName: "Tribe", + }) + } + + return appendFilters(q, filtersToAppend...) +} diff --git a/tw/twmodel/village.go b/tw/twmodel/village.go index da5e0d3..4cfadf9 100644 --- a/tw/twmodel/village.go +++ b/tw/twmodel/village.go @@ -73,7 +73,7 @@ type VillageFilter struct { PlayerFilter *PlayerFilter `json:"playerFilter" gqlgen:"playerFilter"` } -func (f *VillageFilter) WhereWithAlias(q *orm.Query, alias, playerRelationName, playerAlias, tribeRelationName, tribeAlias string) (*orm.Query, error) { +func (f *VillageFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) { if f == nil { return q, nil } @@ -181,20 +181,37 @@ func (f *VillageFilter) WhereWithAlias(q *orm.Query, alias, playerRelationName, q = q.Where(gopgutil.BuildConditionNotInArray("?"), gopgutil.AddAliasToColumnName("player_id", alias), pg.Array(f.PlayerIDNEQ)) } - if f.PlayerFilter != nil && playerRelationName != "" && tribeRelationName != "" { - return f.PlayerFilter.WhereWithAlias(q.Relation(playerRelationName), playerAlias, tribeRelationName, tribeAlias) - } - return q, nil } func (f *VillageFilter) Where(q *orm.Query) (*orm.Query, error) { - return f.WhereWithAlias( - q, - "village", - "Player._", - "player", - "Player.Tribe._", - "player__tribe", - ) + return f.WhereWithAlias(q, "village") +} + +func (f *VillageFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) { + if f == nil { + return q, nil + } + + filtersToAppend := []filterToAppend{ + { + filter: f, + alias: "village", + }, + } + if f.PlayerFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.PlayerFilter, + relationName: "Player", + }) + + if f.PlayerFilter.TribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.PlayerFilter.TribeFilter, + relationName: "Player.Tribe", + }) + } + } + + return appendFilters(q, filtersToAppend...) } From 7ae8606da16eb578476b13659ca1e903d8a74af7 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 5 May 2021 13:31:01 +0200 Subject: [PATCH 11/15] appendFilters: only append relation if this relation hasn't been added --- tw/twmodel/helpers.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tw/twmodel/helpers.go b/tw/twmodel/helpers.go index ac8bcdc..a9a1df4 100644 --- a/tw/twmodel/helpers.go +++ b/tw/twmodel/helpers.go @@ -30,7 +30,10 @@ func appendFilters(q *orm.Query, filtersToAppend ...filterToAppend) (*orm.Query, if err != nil { return q, errors.Wrapf(err, "Couldn't build alias from relation name '%s'", f.relationName) } - q, err = f.filter.WhereWithAlias(q.Relation(f.relationName+"._"), alias) + if join := tableModel.GetJoin(f.relationName); join == nil { + q = q.Relation(f.relationName + "._") + } + q, err = f.filter.WhereWithAlias(q, alias) if err != nil { return q, errors.Wrapf(err, "Couldn't append filter for the relation '%s'", f.relationName) } From 79d8dc1929422a8fc5d3837e3411107e4472e725 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 5 May 2021 13:34:09 +0200 Subject: [PATCH 12/15] fix two grammar mistakes --- tw/twmodel/helpers.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tw/twmodel/helpers.go b/tw/twmodel/helpers.go index a9a1df4..368163a 100644 --- a/tw/twmodel/helpers.go +++ b/tw/twmodel/helpers.go @@ -28,14 +28,14 @@ func appendFilters(q *orm.Query, filtersToAppend ...filterToAppend) (*orm.Query, if f.relationName != "" && tableModel != nil { alias, err := gopgutil.BuildAliasFromRelationName(tableModel, f.relationName) if err != nil { - return q, errors.Wrapf(err, "Couldn't build alias from relation name '%s'", f.relationName) + return q, errors.Wrapf(err, "Couldn't build an alias from the relation name '%s'", f.relationName) } if join := tableModel.GetJoin(f.relationName); join == nil { q = q.Relation(f.relationName + "._") } q, err = f.filter.WhereWithAlias(q, alias) if err != nil { - return q, errors.Wrapf(err, "Couldn't append filter for the relation '%s'", f.relationName) + return q, errors.Wrapf(err, "Couldn't append the filter for the relation '%s'", f.relationName) } continue } From 8f3c5a71b80faa06e244c04ee84960c957c28524 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 5 May 2021 19:02:52 +0200 Subject: [PATCH 13/15] register models in orm --- tw/twmodel/twmodel.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 tw/twmodel/twmodel.go diff --git a/tw/twmodel/twmodel.go b/tw/twmodel/twmodel.go new file mode 100644 index 0000000..2a127f2 --- /dev/null +++ b/tw/twmodel/twmodel.go @@ -0,0 +1,31 @@ +package twmodel + +import "github.com/go-pg/pg/v10/orm" + +func init() { + registerModels() +} + +func registerModels() { + models := []interface{}{ + (*SpecialServer)(nil), + (*Server)(nil), + (*Version)(nil), + (*PlayerToServer)(nil), + (*PlayerNameChange)(nil), + (*Tribe)(nil), + (*Player)(nil), + (*Village)(nil), + (*Ennoblement)(nil), + (*ServerStats)(nil), + (*TribeHistory)(nil), + (*PlayerHistory)(nil), + (*TribeChange)(nil), + (*DailyPlayerStats)(nil), + (*DailyTribeStats)(nil), + } + + for _, model := range models { + orm.RegisterTable(model) + } +} From 9aa09097fd04601ef53840cd7216a9dc862a3054 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 5 May 2021 19:15:18 +0200 Subject: [PATCH 14/15] add one more relation to DailyPlayerStatsFilter.WhereWithRelations (Player.Tribe) --- tw/twmodel/daily_player_stats.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tw/twmodel/daily_player_stats.go b/tw/twmodel/daily_player_stats.go index 44330f0..ceaf890 100644 --- a/tw/twmodel/daily_player_stats.go +++ b/tw/twmodel/daily_player_stats.go @@ -85,6 +85,12 @@ func (f *DailyPlayerStatsFilter) WhereWithRelations(q *orm.Query) (*orm.Query, e filter: f.PlayerFilter, relationName: "Player", }) + if f.PlayerFilter.TribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.PlayerFilter.TribeFilter, + relationName: "Player.Tribe", + }) + } } return appendFilters(q, filtersToAppend...) From bf85190fd66d553c3375a058079b40eab10c6c05 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Wed, 5 May 2021 19:24:13 +0200 Subject: [PATCH 15/15] add one more relation to PlayerHistoryFilter.WhereWithRelations (Player.Tribe) --- tw/twmodel/ennoblement.go | 2 +- tw/twmodel/player_history.go | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tw/twmodel/ennoblement.go b/tw/twmodel/ennoblement.go index a883c0f..58b5240 100644 --- a/tw/twmodel/ennoblement.go +++ b/tw/twmodel/ennoblement.go @@ -184,7 +184,7 @@ func (f *EnnoblementFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) if f.NewOwnerTribeFilter != nil { filtersToAppend = append(filtersToAppend, filterToAppend{ filter: f.NewOwnerTribeFilter, - relationName: "newOwnerTribe", + relationName: "NewOwnerTribe", }) } diff --git a/tw/twmodel/player_history.go b/tw/twmodel/player_history.go index fb91c8c..5bf3693 100644 --- a/tw/twmodel/player_history.go +++ b/tw/twmodel/player_history.go @@ -87,6 +87,12 @@ func (f *PlayerHistoryFilter) WhereWithRelations(q *orm.Query) (*orm.Query, erro filter: f.PlayerFilter, relationName: "Player", }) + if f.PlayerFilter.TribeFilter != nil { + filtersToAppend = append(filtersToAppend, filterToAppend{ + filter: f.PlayerFilter.TribeFilter, + relationName: "Player.Tribe", + }) + } } return appendFilters(q, filtersToAppend...)