Merge pull request #2 from tribalwarshelp/develop
refactor, use github.com/Kichiyaki/gopgutil
This commit is contained in:
commit
50a8677fb0
3
go.mod
3
go.mod
|
@ -3,9 +3,10 @@ module github.com/tribalwarshelp/shared
|
|||
go 1.16
|
||||
|
||||
require (
|
||||
github.com/Kichiyaki/go-php-serialize v0.0.0-20200601110855-47b6982acf83
|
||||
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/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
|
||||
|
|
10
go.sum
10
go.sum
|
@ -1,5 +1,11 @@
|
|||
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/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=
|
||||
|
@ -57,10 +63,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 +121,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=
|
||||
|
|
37
mode/mode.go
37
mode/mode.go
|
@ -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
|
||||
}
|
|
@ -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 ""
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package twdataloader
|
||||
|
||||
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"
|
||||
EndpointGetServers = "/backend/get_servers.php"
|
||||
)
|
|
@ -0,0 +1,12 @@
|
|||
package twdataloader
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func getDefaultHTTPClient() *http.Client {
|
||||
return &http.Client{
|
||||
Timeout: 5 * time.Second,
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package dataloader
|
||||
package twdataloader
|
||||
|
||||
import (
|
||||
"compress/gzip"
|
||||
|
@ -14,69 +14,43 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/tribalwarshelp/shared/models"
|
||||
|
||||
"github.com/tribalwarshelp/shared/tw/twmodel"
|
||||
)
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
type DataLoader 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)
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
type ServerDataLoaderConfig struct {
|
||||
BaseURL string
|
||||
Client *http.Client
|
||||
}
|
||||
|
||||
type dataLoader struct {
|
||||
func (cfg *ServerDataLoaderConfig) Init() {
|
||||
if cfg.Client == nil {
|
||||
cfg.Client = getDefaultHTTPClient()
|
||||
}
|
||||
}
|
||||
|
||||
type ServerDataLoader interface {
|
||||
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 {
|
||||
baseURL string
|
||||
client *http.Client
|
||||
}
|
||||
|
||||
func New(cfg *Config) DataLoader {
|
||||
func NewServerDataLoader(cfg *ServerDataLoaderConfig) ServerDataLoader {
|
||||
if cfg == nil {
|
||||
cfg = &Config{}
|
||||
cfg = &ServerDataLoaderConfig{}
|
||||
}
|
||||
if cfg.Client == nil {
|
||||
cfg.Client = &http.Client{
|
||||
Timeout: 5 * time.Second,
|
||||
}
|
||||
}
|
||||
return &dataLoader{
|
||||
cfg.Init()
|
||||
return &serverDataLoader{
|
||||
cfg.BaseURL,
|
||||
cfg.Client,
|
||||
}
|
||||
|
@ -88,9 +62,9 @@ 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, 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
|
||||
|
@ -109,53 +83,53 @@ func (d *dataLoader) parseODLine(line []string) (*parsedODLine, error) {
|
|||
return p, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) LoadOD(tribe bool) (map[int]*models.OpponentsDefeated, error) {
|
||||
m := make(map[int]*models.OpponentsDefeated)
|
||||
urls := []string{
|
||||
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),
|
||||
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{}
|
||||
m[parsed.ID] = &twmodel.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
|
||||
}
|
||||
|
@ -164,14 +138,14 @@ 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) (*twmodel.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
|
||||
ex := true
|
||||
player := &models.Player{
|
||||
player := &twmodel.Player{
|
||||
Exists: &ex,
|
||||
}
|
||||
player.ID, err = strconv.Atoi(line[0])
|
||||
|
@ -202,21 +176,21 @@ func (d *dataLoader) parsePlayerLine(line []string) (*models.Player, error) {
|
|||
return player, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) LoadPlayers() ([]*models.Player, error) {
|
||||
url := d.baseURL + EndpointPlayer
|
||||
lines, err := d.getCSVData(url, true)
|
||||
func (d *serverDataLoader) LoadPlayers() ([]*twmodel.Player, error) {
|
||||
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 []*twmodel.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)
|
||||
}
|
||||
|
@ -224,14 +198,14 @@ 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) (*twmodel.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
|
||||
ex := true
|
||||
tribe := &models.Tribe{
|
||||
tribe := &twmodel.Tribe{
|
||||
Exists: &ex,
|
||||
}
|
||||
tribe.ID, err = strconv.Atoi(line[0])
|
||||
|
@ -270,32 +244,32 @@ func (d *dataLoader) parseTribeLine(line []string) (*models.Tribe, error) {
|
|||
return tribe, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) LoadTribes() ([]*models.Tribe, error) {
|
||||
url := d.baseURL + EndpointTribe
|
||||
lines, err := d.getCSVData(url, true)
|
||||
func (d *serverDataLoader) LoadTribes() ([]*twmodel.Tribe, error) {
|
||||
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 []*twmodel.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)
|
||||
}
|
||||
return tribes, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) parseVillageLine(line []string) (*models.Village, error) {
|
||||
func (d *serverDataLoader) parseVillageLine(line []string) (*twmodel.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{}
|
||||
village := &twmodel.Village{}
|
||||
village.ID, err = strconv.Atoi(line[0])
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "village.ID")
|
||||
|
@ -327,32 +301,32 @@ func (d *dataLoader) parseVillageLine(line []string) (*models.Village, error) {
|
|||
return village, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) LoadVillages() ([]*models.Village, error) {
|
||||
url := d.baseURL + EndpointVillage
|
||||
lines, err := d.getCSVData(url, true)
|
||||
func (d *serverDataLoader) LoadVillages() ([]*twmodel.Village, error) {
|
||||
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 []*twmodel.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)
|
||||
}
|
||||
return villages, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) parseEnnoblementLine(line []string) (*models.Ennoblement, error) {
|
||||
func (d *serverDataLoader) parseEnnoblementLine(line []string) (*twmodel.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{}
|
||||
ennoblement := &twmodel.Ennoblement{}
|
||||
ennoblement.VillageID, err = strconv.Atoi(line[0])
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "ennoblement.VillageID")
|
||||
|
@ -378,30 +352,30 @@ type LoadEnnoblementsConfig struct {
|
|||
EnnobledAtGT time.Time
|
||||
}
|
||||
|
||||
func (d *dataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.Ennoblement, error) {
|
||||
func (d *serverDataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*twmodel.Ennoblement, error) {
|
||||
if cfg == nil {
|
||||
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 []*twmodel.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)
|
||||
|
@ -410,37 +384,37 @@ func (d *dataLoader) LoadEnnoblements(cfg *LoadEnnoblementsConfig) ([]*models.En
|
|||
return ennoblements, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) GetConfig() (*models.ServerConfig, error) {
|
||||
url := d.baseURL + EndpointConfig
|
||||
cfg := &models.ServerConfig{}
|
||||
err := d.getXML(url, cfg)
|
||||
func (d *serverDataLoader) GetConfig() (*twmodel.ServerConfig, error) {
|
||||
formattedURL := d.baseURL + EndpointConfig
|
||||
cfg := &twmodel.ServerConfig{}
|
||||
err := d.getXML(formattedURL, cfg)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getConfig")
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) GetBuildingConfig() (*models.BuildingConfig, error) {
|
||||
url := d.baseURL + EndpointBuildingConfig
|
||||
cfg := &models.BuildingConfig{}
|
||||
err := d.getXML(url, cfg)
|
||||
func (d *serverDataLoader) GetBuildingConfig() (*twmodel.BuildingConfig, error) {
|
||||
formattedURL := d.baseURL + EndpointBuildingConfig
|
||||
cfg := &twmodel.BuildingConfig{}
|
||||
err := d.getXML(formattedURL, cfg)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getBuildingConfig")
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func (d *dataLoader) GetUnitConfig() (*models.UnitConfig, error) {
|
||||
url := d.baseURL + EndpointUnitConfig
|
||||
cfg := &models.UnitConfig{}
|
||||
err := d.getXML(url, cfg)
|
||||
func (d *serverDataLoader) GetUnitConfig() (*twmodel.UnitConfig, error) {
|
||||
formattedURL := d.baseURL + EndpointUnitConfig
|
||||
cfg := &twmodel.UnitConfig{}
|
||||
err := d.getXML(formattedURL, cfg)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getUnitConfig")
|
||||
}
|
||||
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
|
||||
|
@ -452,7 +426,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
|
|
@ -0,0 +1,75 @@
|
|||
package twdataloader
|
||||
|
||||
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 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 {
|
||||
host string
|
||||
client *http.Client
|
||||
}
|
||||
|
||||
func NewVersionDataLoader(cfg *VersionDataLoaderConfig) VersionDataLoader {
|
||||
if cfg == nil {
|
||||
cfg = &VersionDataLoaderConfig{}
|
||||
}
|
||||
cfg.Init()
|
||||
return &versionDataLoader{
|
||||
host: cfg.Host,
|
||||
client: cfg.Client,
|
||||
}
|
||||
}
|
||||
|
||||
func (d *versionDataLoader) LoadServers() ([]*Server, error) {
|
||||
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")
|
||||
}
|
||||
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
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
import "encoding/xml"
|
||||
|
|
@ -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) {
|
||||
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(parts[0])
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "%s: the part before | isn't a number", coords)
|
||||
}
|
||||
y, err := strconv.Atoi(parts[1])
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "%s: the part after | isn't a number", coords)
|
||||
}
|
||||
return &Coords{x, y}, nil
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
import (
|
||||
"github.com/Kichiyaki/gopgutil/v10"
|
||||
"time"
|
||||
|
||||
"github.com/go-pg/pg/v10"
|
||||
|
@ -34,27 +35,31 @@ 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))
|
||||
}
|
||||
|
||||
return q, nil
|
||||
|
@ -64,41 +69,29 @@ 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 (f *DailyPlayerStatsFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) {
|
||||
if f == nil {
|
||||
return q, nil
|
||||
}
|
||||
|
||||
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
|
||||
filtersToAppend := []filterToAppend{
|
||||
{
|
||||
filter: f,
|
||||
alias: "daily_player_stats",
|
||||
},
|
||||
}
|
||||
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",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
return appendFilters(q, filtersToAppend...)
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
import (
|
||||
"github.com/Kichiyaki/gopgutil/v10"
|
||||
"time"
|
||||
|
||||
"github.com/go-pg/pg/v10"
|
||||
|
@ -37,27 +38,31 @@ 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))
|
||||
}
|
||||
|
||||
return q, nil
|
||||
|
@ -67,29 +72,23 @@ 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
|
||||
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...)
|
||||
}
|
|
@ -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,53 +82,57 @@ 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 {
|
||||
|
@ -139,75 +146,47 @@ 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
|
||||
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...)
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
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 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 the 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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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"`
|
||||
|
@ -93,147 +94,151 @@ type PlayerFilter struct {
|
|||
}
|
||||
|
||||
func (f *PlayerFilter) 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.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))
|
||||
}
|
||||
|
||||
return f.OpponentsDefeatedFilter.WhereWithAlias(q, alias)
|
||||
|
@ -243,31 +248,25 @@ 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
|
||||
func (f *PlayerFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) {
|
||||
if f == nil {
|
||||
return q, nil
|
||||
}
|
||||
|
||||
if !isZero(a.Sort) {
|
||||
q = q.Order(a.Sort...)
|
||||
filtersToAppend := []filterToAppend{
|
||||
{
|
||||
filter: f,
|
||||
alias: "player",
|
||||
},
|
||||
}
|
||||
if f.TribeFilter != nil {
|
||||
filtersToAppend = append(filtersToAppend, filterToAppend{
|
||||
filter: f.TribeFilter,
|
||||
relationName: "Tribe",
|
||||
})
|
||||
}
|
||||
|
||||
if tribeRequired {
|
||||
q = q.Relation("Tribe._")
|
||||
}
|
||||
|
||||
return q, nil
|
||||
return appendFilters(q, filtersToAppend...)
|
||||
}
|
||||
|
||||
type FoundPlayer struct {
|
|
@ -1,6 +1,7 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
import (
|
||||
"github.com/Kichiyaki/gopgutil/v10"
|
||||
"time"
|
||||
|
||||
"github.com/go-pg/pg/v10"
|
||||
|
@ -36,27 +37,31 @@ 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))
|
||||
}
|
||||
|
||||
return q, nil
|
||||
|
@ -66,41 +71,29 @@ func (f *PlayerHistoryFilter) Where(q *orm.Query) (*orm.Query, error) {
|
|||
return f.WhereWithAlias(q, "player_history")
|
||||
}
|
||||
|
||||
type PlayerHistoryRelationshipAndSortAppender struct {
|
||||
Filter *PlayerHistoryFilter
|
||||
Sort []string
|
||||
}
|
||||
func (f *PlayerHistoryFilter) WhereWithRelations(q *orm.Query) (*orm.Query, error) {
|
||||
if f == nil {
|
||||
return q, nil
|
||||
}
|
||||
|
||||
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
|
||||
filtersToAppend := []filterToAppend{
|
||||
{
|
||||
filter: f,
|
||||
alias: "player_history",
|
||||
},
|
||||
}
|
||||
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",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
return appendFilters(q, filtersToAppend...)
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
import "time"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
type PlayerToServer struct {
|
||||
ID int `json:"id" gqlgen:"id" xml:"id"`
|
|
@ -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
|
|
@ -1,4 +1,4 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
import "encoding/xml"
|
||||
|
|
@ -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
|
|
@ -1,4 +1,4 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
type SpecialServer struct {
|
||||
tableName struct{} `pg:"special_servers,alias:special_server"`
|
|
@ -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 {
|
|
@ -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,45 @@ type TribeChangeFilter struct {
|
|||
}
|
||||
|
||||
func (f *TribeChangeFilter) WhereWithAlias(q *orm.Query, alias string) (*orm.Query, error) {
|
||||
if f == nil {
|
||||
return q, nil
|
||||
}
|
||||
|
||||
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 !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 !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 !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 {
|
||||
|
@ -109,53 +116,35 @@ 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
|
||||
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...)
|
||||
}
|
|
@ -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
|
||||
|
@ -67,29 +75,23 @@ 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
|
||||
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...)
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package models
|
||||
package twmodel
|
||||
|
||||
import "encoding/xml"
|
||||
|
|
@ -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
|
|
@ -0,0 +1,217 @@
|
|||
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 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 {
|
||||
coords, err := ParseCoords(xy)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
q = q.WhereOrGroup(func(q *orm.Query) (*orm.Query, error) {
|
||||
q = q.
|
||||
Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("x", alias), coords.X).
|
||||
Where(gopgutil.BuildConditionEquals("?"), gopgutil.AddAliasToColumnName("y", alias), coords.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))
|
||||
}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
func (f *VillageFilter) Where(q *orm.Query) (*orm.Query, error) {
|
||||
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...)
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package tw
|
||||
package twurlbuilder
|
||||
|
||||
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)
|
||||
}
|
|
@ -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])
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
Reference in New Issue