[WIP] - refactor limit, sort, offset

- update the ServerStats/Tribe/TribeChange/TribeHistory repository and usecase
This commit is contained in:
Dawid Wysokiński 2020-11-21 12:01:16 +01:00
parent 05efc69b31
commit c18807c2f5
27 changed files with 483 additions and 119 deletions

View File

@ -226,12 +226,12 @@ type ComplexityRoot struct {
PlayerHistory func(childComplexity int, server string, filter *models.PlayerHistoryFilter, limit *int, offset *int, sort []string) int PlayerHistory func(childComplexity int, server string, filter *models.PlayerHistoryFilter, limit *int, offset *int, sort []string) int
Players func(childComplexity int, server string, filter *models.PlayerFilter, limit *int, offset *int, sort []string) int Players func(childComplexity int, server string, filter *models.PlayerFilter, limit *int, offset *int, sort []string) int
Server func(childComplexity int, key string) int Server func(childComplexity int, key string) int
ServerStats func(childComplexity int, server string, filter *models.ServerStatsFilter) int ServerStats func(childComplexity int, server string, filter *models.ServerStatsFilter, limit *int, offset *int, sort []string) int
Servers func(childComplexity int, filter *models.ServerFilter, limit *int, offset *int, sort []string) int Servers func(childComplexity int, filter *models.ServerFilter, limit *int, offset *int, sort []string) int
Tribe func(childComplexity int, server string, id int) int Tribe func(childComplexity int, server string, id int) int
TribeChanges func(childComplexity int, server string, filter *models.TribeChangeFilter) int TribeChanges func(childComplexity int, server string, filter *models.TribeChangeFilter, limit *int, offset *int, sort []string) int
TribeHistory func(childComplexity int, server string, filter *models.TribeHistoryFilter) int TribeHistory func(childComplexity int, server string, filter *models.TribeHistoryFilter, limit *int, offset *int, sort []string) int
Tribes func(childComplexity int, server string, filter *models.TribeFilter) int Tribes func(childComplexity int, server string, filter *models.TribeFilter, limit *int, offset *int, sort []string) int
Version func(childComplexity int, code models.VersionCode) int Version func(childComplexity int, code models.VersionCode) int
Versions func(childComplexity int, filter *models.VersionFilter) int Versions func(childComplexity int, filter *models.VersionFilter) int
Village func(childComplexity int, server string, id int) int Village func(childComplexity int, server string, id int) int
@ -588,11 +588,11 @@ type QueryResolver interface {
PlayerHistory(ctx context.Context, server string, filter *models.PlayerHistoryFilter, limit *int, offset *int, sort []string) (*PlayerHistory, error) PlayerHistory(ctx context.Context, server string, filter *models.PlayerHistoryFilter, limit *int, offset *int, sort []string) (*PlayerHistory, error)
Servers(ctx context.Context, filter *models.ServerFilter, limit *int, offset *int, sort []string) (*ServerList, error) Servers(ctx context.Context, filter *models.ServerFilter, limit *int, offset *int, sort []string) (*ServerList, error)
Server(ctx context.Context, key string) (*models.Server, error) Server(ctx context.Context, key string) (*models.Server, error)
ServerStats(ctx context.Context, server string, filter *models.ServerStatsFilter) (*ServerStats, error) ServerStats(ctx context.Context, server string, filter *models.ServerStatsFilter, limit *int, offset *int, sort []string) (*ServerStats, error)
Tribes(ctx context.Context, server string, filter *models.TribeFilter) (*TribeList, error) Tribes(ctx context.Context, server string, filter *models.TribeFilter, limit *int, offset *int, sort []string) (*TribeList, error)
Tribe(ctx context.Context, server string, id int) (*models.Tribe, error) Tribe(ctx context.Context, server string, id int) (*models.Tribe, error)
TribeChanges(ctx context.Context, server string, filter *models.TribeChangeFilter) (*TribeChanges, error) TribeChanges(ctx context.Context, server string, filter *models.TribeChangeFilter, limit *int, offset *int, sort []string) (*TribeChanges, error)
TribeHistory(ctx context.Context, server string, filter *models.TribeHistoryFilter) (*TribeHistory, error) TribeHistory(ctx context.Context, server string, filter *models.TribeHistoryFilter, limit *int, offset *int, sort []string) (*TribeHistory, error)
LangVersions(ctx context.Context, filter *models.VersionFilter) (*VersionList, error) LangVersions(ctx context.Context, filter *models.VersionFilter) (*VersionList, error)
LangVersion(ctx context.Context, tag models.VersionCode) (*models.Version, error) LangVersion(ctx context.Context, tag models.VersionCode) (*models.Version, error)
Versions(ctx context.Context, filter *models.VersionFilter) (*VersionList, error) Versions(ctx context.Context, filter *models.VersionFilter) (*VersionList, error)
@ -1597,7 +1597,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return 0, false return 0, false
} }
return e.complexity.Query.ServerStats(childComplexity, args["server"].(string), args["filter"].(*models.ServerStatsFilter)), true return e.complexity.Query.ServerStats(childComplexity, args["server"].(string), args["filter"].(*models.ServerStatsFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string)), true
case "Query.servers": case "Query.servers":
if e.complexity.Query.Servers == nil { if e.complexity.Query.Servers == nil {
@ -1633,7 +1633,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return 0, false return 0, false
} }
return e.complexity.Query.TribeChanges(childComplexity, args["server"].(string), args["filter"].(*models.TribeChangeFilter)), true return e.complexity.Query.TribeChanges(childComplexity, args["server"].(string), args["filter"].(*models.TribeChangeFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string)), true
case "Query.tribeHistory": case "Query.tribeHistory":
if e.complexity.Query.TribeHistory == nil { if e.complexity.Query.TribeHistory == nil {
@ -1645,7 +1645,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return 0, false return 0, false
} }
return e.complexity.Query.TribeHistory(childComplexity, args["server"].(string), args["filter"].(*models.TribeHistoryFilter)), true return e.complexity.Query.TribeHistory(childComplexity, args["server"].(string), args["filter"].(*models.TribeHistoryFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string)), true
case "Query.tribes": case "Query.tribes":
if e.complexity.Query.Tribes == nil { if e.complexity.Query.Tribes == nil {
@ -1657,7 +1657,7 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
return 0, false return 0, false
} }
return e.complexity.Query.Tribes(childComplexity, args["server"].(string), args["filter"].(*models.TribeFilter)), true return e.complexity.Query.Tribes(childComplexity, args["server"].(string), args["filter"].(*models.TribeFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string)), true
case "Query.version": case "Query.version":
if e.complexity.Query.Version == nil { if e.complexity.Query.Version == nil {
@ -3983,12 +3983,27 @@ input ServerStatsFilter {
createDateLTE: Time createDateLTE: Time
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query serverStats - ` + "`" + `offset` + "`" + `."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query serverStats - ` + "`" + `limit` + "`" + `."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query serverStats - ` + "`" + `sort` + "`" + `."
)
} }
extend type Query { extend type Query {
serverStats(server: String!, filter: ServerStatsFilter): ServerStats! serverStats(
server: String!
filter: ServerStatsFilter
limit: Int
offset: Int
sort: [String!]
): ServerStats!
} }
`, BuiltIn: false}, `, BuiltIn: false},
{Name: "schema/tribe.graphql", Input: `type Tribe { {Name: "schema/tribe.graphql", Input: `type Tribe {
@ -4124,12 +4139,27 @@ input TribeFilter {
deletedAtLTE: Time deletedAtLTE: Time
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query tribes - ` + "`" + `offset` + "`" + `."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query tribes - ` + "`" + `limit` + "`" + `."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query tribes - ` + "`" + `sort` + "`" + `."
)
} }
extend type Query { extend type Query {
tribes(server: String!, filter: TribeFilter): TribeList! tribes(
server: String!
filter: TribeFilter
limit: Int
offset: Int
sort: [String!]
): TribeList!
tribe(server: String!, id: Int!): Tribe tribe(server: String!, id: Int!): Tribe
} }
`, BuiltIn: false}, `, BuiltIn: false},
@ -4169,12 +4199,27 @@ input TribeChangeFilter {
or: TribeChangeFilterOr or: TribeChangeFilterOr
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query tribeChanges - ` + "`" + `offset` + "`" + `."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query tribeChanges - ` + "`" + `limit` + "`" + `."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query tribeChanges - ` + "`" + `sort` + "`" + `."
)
} }
extend type Query { extend type Query {
tribeChanges(server: String!, filter: TribeChangeFilter): TribeChanges! tribeChanges(
server: String!
filter: TribeChangeFilter
limit: Int
offset: Int
sort: [String!]
): TribeChanges!
} }
`, BuiltIn: false}, `, BuiltIn: false},
{Name: "schema/tribe_history.graphql", Input: `type TribeHistoryRecord { {Name: "schema/tribe_history.graphql", Input: `type TribeHistoryRecord {
@ -4210,12 +4255,27 @@ input TribeHistoryFilter {
createDateLTE: Time createDateLTE: Time
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query tribeHistory - ` + "`" + `offset` + "`" + `."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query tribeHistory - ` + "`" + `limit` + "`" + `."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query tribeHistory - ` + "`" + `sort` + "`" + `."
)
} }
extend type Query { extend type Query {
tribeHistory(server: String!, filter: TribeHistoryFilter): TribeHistory! tribeHistory(
server: String!
filter: TribeHistoryFilter
limit: Int
offset: Int
sort: [String!]
): TribeHistory!
} }
`, BuiltIn: false}, `, BuiltIn: false},
{Name: "schema/unit_config.graphql", Input: `type Unit { {Name: "schema/unit_config.graphql", Input: `type Unit {
@ -4728,6 +4788,33 @@ func (ec *executionContext) field_Query_serverStats_args(ctx context.Context, ra
} }
} }
args["filter"] = arg1 args["filter"] = arg1
var arg2 *int
if tmp, ok := rawArgs["limit"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("limit"))
arg2, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["limit"] = arg2
var arg3 *int
if tmp, ok := rawArgs["offset"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("offset"))
arg3, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["offset"] = arg3
var arg4 []string
if tmp, ok := rawArgs["sort"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("sort"))
arg4, err = ec.unmarshalOString2ᚕstringᚄ(ctx, tmp)
if err != nil {
return nil, err
}
}
args["sort"] = arg4
return args, nil return args, nil
} }
@ -4809,6 +4896,33 @@ func (ec *executionContext) field_Query_tribeChanges_args(ctx context.Context, r
} }
} }
args["filter"] = arg1 args["filter"] = arg1
var arg2 *int
if tmp, ok := rawArgs["limit"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("limit"))
arg2, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["limit"] = arg2
var arg3 *int
if tmp, ok := rawArgs["offset"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("offset"))
arg3, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["offset"] = arg3
var arg4 []string
if tmp, ok := rawArgs["sort"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("sort"))
arg4, err = ec.unmarshalOString2ᚕstringᚄ(ctx, tmp)
if err != nil {
return nil, err
}
}
args["sort"] = arg4
return args, nil return args, nil
} }
@ -4833,6 +4947,33 @@ func (ec *executionContext) field_Query_tribeHistory_args(ctx context.Context, r
} }
} }
args["filter"] = arg1 args["filter"] = arg1
var arg2 *int
if tmp, ok := rawArgs["limit"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("limit"))
arg2, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["limit"] = arg2
var arg3 *int
if tmp, ok := rawArgs["offset"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("offset"))
arg3, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["offset"] = arg3
var arg4 []string
if tmp, ok := rawArgs["sort"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("sort"))
arg4, err = ec.unmarshalOString2ᚕstringᚄ(ctx, tmp)
if err != nil {
return nil, err
}
}
args["sort"] = arg4
return args, nil return args, nil
} }
@ -4881,6 +5022,33 @@ func (ec *executionContext) field_Query_tribes_args(ctx context.Context, rawArgs
} }
} }
args["filter"] = arg1 args["filter"] = arg1
var arg2 *int
if tmp, ok := rawArgs["limit"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("limit"))
arg2, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["limit"] = arg2
var arg3 *int
if tmp, ok := rawArgs["offset"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("offset"))
arg3, err = ec.unmarshalOInt2ᚖint(ctx, tmp)
if err != nil {
return nil, err
}
}
args["offset"] = arg3
var arg4 []string
if tmp, ok := rawArgs["sort"]; ok {
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("sort"))
arg4, err = ec.unmarshalOString2ᚕstringᚄ(ctx, tmp)
if err != nil {
return nil, err
}
}
args["sort"] = arg4
return args, nil return args, nil
} }
@ -9502,7 +9670,7 @@ func (ec *executionContext) _Query_serverStats(ctx context.Context, field graphq
fc.Args = args fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().ServerStats(rctx, args["server"].(string), args["filter"].(*models.ServerStatsFilter)) return ec.resolvers.Query().ServerStats(rctx, args["server"].(string), args["filter"].(*models.ServerStatsFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@ -9544,7 +9712,7 @@ func (ec *executionContext) _Query_tribes(ctx context.Context, field graphql.Col
fc.Args = args fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Tribes(rctx, args["server"].(string), args["filter"].(*models.TribeFilter)) return ec.resolvers.Query().Tribes(rctx, args["server"].(string), args["filter"].(*models.TribeFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@ -9625,7 +9793,7 @@ func (ec *executionContext) _Query_tribeChanges(ctx context.Context, field graph
fc.Args = args fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().TribeChanges(rctx, args["server"].(string), args["filter"].(*models.TribeChangeFilter)) return ec.resolvers.Query().TribeChanges(rctx, args["server"].(string), args["filter"].(*models.TribeChangeFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@ -9667,7 +9835,7 @@ func (ec *executionContext) _Query_tribeHistory(ctx context.Context, field graph
fc.Args = args fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().TribeHistory(rctx, args["server"].(string), args["filter"].(*models.TribeHistoryFilter)) return ec.resolvers.Query().TribeHistory(rctx, args["server"].(string), args["filter"].(*models.TribeHistoryFilter), args["limit"].(*int), args["offset"].(*int), args["sort"].([]string))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)

View File

@ -26,7 +26,8 @@ func (r *playerHistoryRecordResolver) Tribe(ctx context.Context, obj *models.Pla
func (r *Resolver) PlayerHistory(ctx context.Context, func (r *Resolver) PlayerHistory(ctx context.Context,
server string, server string,
f *models.PlayerHistoryFilter, limit *int, f *models.PlayerHistoryFilter,
limit *int,
offset *int, offset *int,
sort []string) (*generated.PlayerHistory, error) { sort []string) (*generated.PlayerHistory, error) {
defLimit := 0 defLimit := 0

View File

@ -24,7 +24,8 @@ func (r *serverResolver) LangVersion(ctx context.Context, obj *models.Server) (*
} }
func (r *queryResolver) Servers(ctx context.Context, func (r *queryResolver) Servers(ctx context.Context,
f *models.ServerFilter, limit *int, f *models.ServerFilter,
limit *int,
offset *int, offset *int,
sort []string) (*generated.ServerList, error) { sort []string) (*generated.ServerList, error) {
defLimit := 0 defLimit := 0

View File

@ -4,12 +4,34 @@ import (
"context" "context"
"github.com/tribalwarshelp/api/graphql/generated" "github.com/tribalwarshelp/api/graphql/generated"
"github.com/tribalwarshelp/api/serverstats"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/models"
) )
func (r *Resolver) ServerStats(ctx context.Context, server string, filter *models.ServerStatsFilter) (*generated.ServerStats, error) { func (r *Resolver) ServerStats(ctx context.Context,
server string,
f *models.ServerStatsFilter,
limit *int,
offset *int,
sort []string) (*generated.ServerStats, error) {
defLimit := 0
defOffset := 0
if limit == nil {
limit = &defLimit
}
if offset == nil {
offset = &defOffset
}
var err error var err error
list := &generated.ServerStats{} list := &generated.ServerStats{}
list.Items, list.Total, err = r.ServerStatsUcase.Fetch(ctx, server, filter) list.Items, list.Total, err = r.ServerStatsUcase.Fetch(ctx, serverstats.FetchConfig{
Server: server,
Filter: f,
Sort: sort,
Limit: *limit,
Offset: *offset,
Count: true,
})
return list, err return list, err
} }

View File

@ -4,13 +4,35 @@ import (
"context" "context"
"github.com/tribalwarshelp/api/graphql/generated" "github.com/tribalwarshelp/api/graphql/generated"
"github.com/tribalwarshelp/api/tribe"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/models"
) )
func (r *queryResolver) Tribes(ctx context.Context, server string, filter *models.TribeFilter) (*generated.TribeList, error) { func (r *queryResolver) Tribes(ctx context.Context,
server string,
f *models.TribeFilter,
limit *int,
offset *int,
sort []string) (*generated.TribeList, error) {
defLimit := 0
defOffset := 0
if limit == nil {
limit = &defLimit
}
if offset == nil {
offset = &defOffset
}
var err error var err error
list := &generated.TribeList{} list := &generated.TribeList{}
list.Items, list.Total, err = r.TribeUcase.Fetch(ctx, server, filter) list.Items, list.Total, err = r.TribeUcase.Fetch(ctx, tribe.FetchConfig{
Server: server,
Filter: f,
Sort: sort,
Limit: *limit,
Offset: *offset,
Count: true,
})
return list, err return list, err
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"github.com/tribalwarshelp/api/graphql/generated" "github.com/tribalwarshelp/api/graphql/generated"
"github.com/tribalwarshelp/api/tribechange"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/models"
) )
@ -31,9 +32,29 @@ func (r *tribeChangeRecordResolver) OldTribe(ctx context.Context, obj *models.Tr
return getTribe(ctx, obj.OldTribeID), nil return getTribe(ctx, obj.OldTribeID), nil
} }
func (r *Resolver) TribeChanges(ctx context.Context, server string, filter *models.TribeChangeFilter) (*generated.TribeChanges, error) { func (r *Resolver) TribeChanges(ctx context.Context,
server string,
f *models.TribeChangeFilter,
limit *int,
offset *int,
sort []string) (*generated.TribeChanges, error) {
defLimit := 0
defOffset := 0
if limit == nil {
limit = &defLimit
}
if offset == nil {
offset = &defOffset
}
var err error var err error
list := &generated.TribeChanges{} list := &generated.TribeChanges{}
list.Items, list.Total, err = r.TribeChangeUcase.Fetch(ctx, server, filter) list.Items, list.Total, err = r.TribeChangeUcase.Fetch(ctx, tribechange.FetchConfig{
Filter: f,
Sort: sort,
Limit: *limit,
Offset: *offset,
Count: true,
})
return list, err return list, err
} }

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"github.com/tribalwarshelp/api/graphql/generated" "github.com/tribalwarshelp/api/graphql/generated"
"github.com/tribalwarshelp/api/tribehistory"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/models"
) )
@ -15,9 +16,29 @@ func (r *tribeHistoryRecordResolver) Tribe(ctx context.Context, obj *models.Trib
return getTribe(ctx, obj.TribeID), nil return getTribe(ctx, obj.TribeID), nil
} }
func (r *Resolver) TribeHistory(ctx context.Context, server string, filter *models.TribeHistoryFilter) (*generated.TribeHistory, error) { func (r *Resolver) TribeHistory(ctx context.Context,
server string,
f *models.TribeHistoryFilter,
limit *int,
offset *int,
sort []string) (*generated.TribeHistory, error) {
defLimit := 0
defOffset := 0
if limit == nil {
limit = &defLimit
}
if offset == nil {
offset = &defOffset
}
var err error var err error
list := &generated.TribeHistory{} list := &generated.TribeHistory{}
list.Items, list.Total, err = r.TribeHistoryUcase.Fetch(ctx, server, filter) list.Items, list.Total, err = r.TribeHistoryUcase.Fetch(ctx, tribehistory.FetchConfig{
Filter: f,
Sort: sort,
Limit: *limit,
Offset: *offset,
Count: true,
})
return list, err return list, err
} }

View File

@ -25,10 +25,25 @@ input ServerStatsFilter {
createDateLTE: Time createDateLTE: Time
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query serverStats - `offset`."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query serverStats - `limit`."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query serverStats - `sort`."
)
} }
extend type Query { extend type Query {
serverStats(server: String!, filter: ServerStatsFilter): ServerStats! serverStats(
server: String!
filter: ServerStatsFilter
limit: Int
offset: Int
sort: [String!]
): ServerStats!
} }

View File

@ -131,11 +131,26 @@ input TribeFilter {
deletedAtLTE: Time deletedAtLTE: Time
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query tribes - `offset`."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query tribes - `limit`."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query tribes - `sort`."
)
} }
extend type Query { extend type Query {
tribes(server: String!, filter: TribeFilter): TribeList! tribes(
server: String!
filter: TribeFilter
limit: Int
offset: Int
sort: [String!]
): TribeList!
tribe(server: String!, id: Int!): Tribe tribe(server: String!, id: Int!): Tribe
} }

View File

@ -34,10 +34,25 @@ input TribeChangeFilter {
or: TribeChangeFilterOr or: TribeChangeFilterOr
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query tribeChanges - `offset`."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query tribeChanges - `limit`."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query tribeChanges - `sort`."
)
} }
extend type Query { extend type Query {
tribeChanges(server: String!, filter: TribeChangeFilter): TribeChanges! tribeChanges(
server: String!
filter: TribeChangeFilter
limit: Int
offset: Int
sort: [String!]
): TribeChanges!
} }

View File

@ -31,10 +31,25 @@ input TribeHistoryFilter {
createDateLTE: Time createDateLTE: Time
offset: Int offset: Int
@deprecated(
reason: "Use a new variable added to the query tribeHistory - `offset`."
)
limit: Int limit: Int
@deprecated(
reason: "Use a new variable added to the query tribeHistory - `limit`."
)
sort: String sort: String
@deprecated(
reason: "Use a new variable added to the query tribeHistory - `sort`."
)
} }
extend type Query { extend type Query {
tribeHistory(server: String!, filter: TribeHistoryFilter): TribeHistory! tribeHistory(
server: String!
filter: TribeHistoryFilter
limit: Int
offset: Int
sort: [String!]
): TribeHistory!
} }

View File

@ -10,6 +10,9 @@ type FetchConfig struct {
Server string Server string
Filter *models.ServerStatsFilter Filter *models.ServerStatsFilter
Count bool Count bool
Sort []string
Limit int
Offset int
} }
type Repository interface { type Repository interface {

View File

@ -23,17 +23,17 @@ func (repo *pgRepository) Fetch(ctx context.Context, cfg serverstats.FetchConfig
var err error var err error
data := []*models.ServerStats{} data := []*models.ServerStats{}
total := 0 total := 0
query := repo.WithParam("SERVER", pg.Safe(cfg.Server)).Model(&data).Context(ctx) query := repo.
WithParam("SERVER", pg.Safe(cfg.Server)).
Model(&data).
Context(ctx).
Order(cfg.Sort...).
Limit(cfg.Limit).
Offset(cfg.Offset)
if cfg.Filter != nil { if cfg.Filter != nil {
query = query. query = query.
WhereStruct(cfg.Filter). WhereStruct(cfg.Filter)
Limit(cfg.Filter.Limit).
Offset(cfg.Filter.Offset)
if cfg.Filter.Sort != "" {
query = query.Order(cfg.Filter.Sort)
}
} }
if cfg.Count { if cfg.Count {

View File

@ -7,5 +7,5 @@ import (
) )
type Usecase interface { type Usecase interface {
Fetch(ctx context.Context, server string, filter *models.ServerStatsFilter) ([]*models.ServerStats, int, error) Fetch(ctx context.Context, cfg FetchConfig) ([]*models.ServerStats, int, error)
} }

View File

@ -17,17 +17,22 @@ func New(repo serverstats.Repository) serverstats.Usecase {
return &usecase{repo} return &usecase{repo}
} }
func (ucase *usecase) Fetch(ctx context.Context, server string, filter *models.ServerStatsFilter) ([]*models.ServerStats, int, error) { func (ucase *usecase) Fetch(ctx context.Context, cfg serverstats.FetchConfig) ([]*models.ServerStats, int, error) {
if filter == nil { if cfg.Filter == nil {
filter = &models.ServerStatsFilter{} cfg.Filter = &models.ServerStatsFilter{}
} }
if !middleware.CanExceedLimit(ctx) && (filter.Limit > serverstats.PaginationLimit || filter.Limit <= 0) { if cfg.Filter.Limit > 0 {
filter.Limit = serverstats.PaginationLimit cfg.Limit = cfg.Filter.Limit
} }
filter.Sort = utils.SanitizeSortExpression(filter.Sort) if cfg.Filter.Offset > 0 {
return ucase.repo.Fetch(ctx, serverstats.FetchConfig{ cfg.Offset = cfg.Filter.Offset
Server: server, }
Filter: filter, if cfg.Filter.Sort != "" {
Count: true, cfg.Sort = append(cfg.Sort, cfg.Filter.Sort)
}) }
if !middleware.CanExceedLimit(ctx) && (cfg.Limit > serverstats.PaginationLimit || cfg.Limit <= 0) {
cfg.Limit = serverstats.PaginationLimit
}
cfg.Sort = utils.SanitizeSortExpressions(cfg.Sort)
return ucase.repo.Fetch(ctx, cfg)
} }

View File

@ -10,6 +10,9 @@ type FetchConfig struct {
Server string Server string
Filter *models.TribeFilter Filter *models.TribeFilter
Count bool Count bool
Sort []string
Limit int
Offset int
} }
type Repository interface { type Repository interface {

View File

@ -23,17 +23,16 @@ func (repo *pgRepository) Fetch(ctx context.Context, cfg tribe.FetchConfig) ([]*
var err error var err error
data := []*models.Tribe{} data := []*models.Tribe{}
total := 0 total := 0
query := repo.WithParam("SERVER", pg.Safe(cfg.Server)).Model(&data).Context(ctx) query := repo.
WithParam("SERVER", pg.Safe(cfg.Server)).
Model(&data).
Context(ctx).
Order(cfg.Sort...).
Limit(cfg.Limit).
Offset(cfg.Offset)
if cfg.Filter != nil { if cfg.Filter != nil {
query = query. query = query.
WhereStruct(cfg.Filter). WhereStruct(cfg.Filter)
Limit(cfg.Filter.Limit).
Offset(cfg.Filter.Offset)
if cfg.Filter.Sort != "" {
query = query.Order(cfg.Filter.Sort)
}
if cfg.Filter.Exists != nil { if cfg.Filter.Exists != nil {
query = query.Where("exists = ?", *cfg.Filter.Exists) query = query.Where("exists = ?", *cfg.Filter.Exists)

View File

@ -7,6 +7,6 @@ import (
) )
type Usecase interface { type Usecase interface {
Fetch(ctx context.Context, server string, filter *models.TribeFilter) ([]*models.Tribe, int, error) Fetch(ctx context.Context, cfg FetchConfig) ([]*models.Tribe, int, error)
GetByID(ctx context.Context, server string, id int) (*models.Tribe, error) GetByID(ctx context.Context, server string, id int) (*models.Tribe, error)
} }

View File

@ -18,28 +18,34 @@ func New(repo tribe.Repository) tribe.Usecase {
return &usecase{repo} return &usecase{repo}
} }
func (ucase *usecase) Fetch(ctx context.Context, server string, filter *models.TribeFilter) ([]*models.Tribe, int, error) { func (ucase *usecase) Fetch(ctx context.Context, cfg tribe.FetchConfig) ([]*models.Tribe, int, error) {
if filter == nil { if cfg.Filter == nil {
filter = &models.TribeFilter{} cfg.Filter = &models.TribeFilter{}
} }
if !middleware.CanExceedLimit(ctx) && (filter.Limit > tribe.PaginationLimit || filter.Limit <= 0) { if cfg.Filter.Limit > 0 {
filter.Limit = tribe.PaginationLimit cfg.Limit = cfg.Filter.Limit
} }
filter.Sort = utils.SanitizeSortExpression(filter.Sort) if cfg.Filter.Offset > 0 {
return ucase.repo.Fetch(ctx, tribe.FetchConfig{ cfg.Offset = cfg.Filter.Offset
Filter: filter, }
Server: server, if cfg.Filter.Sort != "" {
Count: true, cfg.Sort = append(cfg.Sort, cfg.Filter.Sort)
}) }
if !middleware.CanExceedLimit(ctx) && (cfg.Limit > tribe.PaginationLimit || cfg.Limit <= 0) {
cfg.Limit = tribe.PaginationLimit
}
cfg.Sort = utils.SanitizeSortExpressions(cfg.Sort)
return ucase.repo.Fetch(ctx, cfg)
} }
func (ucase *usecase) GetByID(ctx context.Context, server string, id int) (*models.Tribe, error) { func (ucase *usecase) GetByID(ctx context.Context, server string, id int) (*models.Tribe, error) {
tribes, _, err := ucase.repo.Fetch(ctx, tribe.FetchConfig{ tribes, _, err := ucase.repo.Fetch(ctx, tribe.FetchConfig{
Filter: &models.TribeFilter{ Filter: &models.TribeFilter{
ID: []int{id}, ID: []int{id},
Limit: 1,
}, },
Limit: 1,
Server: server, Server: server,
Count: false,
}) })
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -10,6 +10,9 @@ type FetchConfig struct {
Server string Server string
Filter *models.TribeChangeFilter Filter *models.TribeChangeFilter
Count bool Count bool
Sort []string
Limit int
Offset int
} }
type Repository interface { type Repository interface {

View File

@ -8,6 +8,7 @@ import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/api/tribechange" "github.com/tribalwarshelp/api/tribechange"
"github.com/tribalwarshelp/api/utils"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/models"
) )
@ -23,22 +24,33 @@ func (repo *pgRepository) Fetch(ctx context.Context, cfg tribechange.FetchConfig
var err error var err error
total := 0 total := 0
data := []*models.TribeChange{} data := []*models.TribeChange{}
query := repo.WithParam("SERVER", pg.Safe(cfg.Server)).Model(&data).Context(ctx) query := repo.
WithParam("SERVER", pg.Safe(cfg.Server)).
Model(&data).
Context(ctx).
Order(cfg.Sort...).
Limit(cfg.Limit).
Offset(cfg.Offset)
playerRequired := utils.FindStringWithPrefix(cfg.Sort, "player.") != ""
oldTribeRequired := utils.FindStringWithPrefix(cfg.Sort, "old_tribe.") != ""
newTribeRequired := utils.FindStringWithPrefix(cfg.Sort, "new_tribe.") != ""
if cfg.Filter != nil { if cfg.Filter != nil {
query = query. query = query.
WhereStruct(cfg.Filter). WhereStruct(cfg.Filter)
Limit(cfg.Filter.Limit).
Offset(cfg.Filter.Offset)
if cfg.Filter.Sort != "" {
query = query.Order(cfg.Filter.Sort)
}
if cfg.Filter.Or != nil { if cfg.Filter.Or != nil {
query = query.WhereGroup(appendTribeChangeFilterOr(cfg.Filter.Or)) query = query.WhereGroup(appendTribeChangeFilterOr(cfg.Filter.Or))
} }
} }
if playerRequired {
query = query.Relation("Village._")
}
if oldTribeRequired {
query = query.Join("LEFT JOIN ?SERVER.tribes AS old_tribe ON old_tribe.id = ennoblement.old_tribe_id")
}
if newTribeRequired {
query = query.Join("LEFT JOIN ?SERVER.tribes AS new_tribe ON new_tribe.id = ennoblement.new_tribe_id")
}
if cfg.Count { if cfg.Count {
total, err = query.SelectAndCount() total, err = query.SelectAndCount()

View File

@ -7,5 +7,5 @@ import (
) )
type Usecase interface { type Usecase interface {
Fetch(ctx context.Context, server string, filter *models.TribeChangeFilter) ([]*models.TribeChange, int, error) Fetch(ctx context.Context, cfg FetchConfig) ([]*models.TribeChange, int, error)
} }

View File

@ -17,17 +17,22 @@ func New(repo tribechange.Repository) tribechange.Usecase {
return &usecase{repo} return &usecase{repo}
} }
func (ucase *usecase) Fetch(ctx context.Context, server string, filter *models.TribeChangeFilter) ([]*models.TribeChange, int, error) { func (ucase *usecase) Fetch(ctx context.Context, cfg tribechange.FetchConfig) ([]*models.TribeChange, int, error) {
if filter == nil { if cfg.Filter == nil {
filter = &models.TribeChangeFilter{} cfg.Filter = &models.TribeChangeFilter{}
} }
if !middleware.CanExceedLimit(ctx) && (filter.Limit > tribechange.PaginationLimit || filter.Limit <= 0) { if cfg.Filter.Limit > 0 {
filter.Limit = tribechange.PaginationLimit cfg.Limit = cfg.Filter.Limit
} }
filter.Sort = utils.SanitizeSortExpression(filter.Sort) if cfg.Filter.Offset > 0 {
return ucase.repo.Fetch(ctx, tribechange.FetchConfig{ cfg.Offset = cfg.Filter.Offset
Server: server, }
Filter: filter, if cfg.Filter.Sort != "" {
Count: true, cfg.Sort = append(cfg.Sort, cfg.Filter.Sort)
}) }
if !middleware.CanExceedLimit(ctx) && (cfg.Limit > tribechange.PaginationLimit || cfg.Limit <= 0) {
cfg.Limit = tribechange.PaginationLimit
}
cfg.Sort = utils.SanitizeSortExpressions(cfg.Sort)
return ucase.repo.Fetch(ctx, cfg)
} }

View File

@ -10,6 +10,9 @@ type FetchConfig struct {
Server string Server string
Filter *models.TribeHistoryFilter Filter *models.TribeHistoryFilter
Count bool Count bool
Sort []string
Limit int
Offset int
} }
type Repository interface { type Repository interface {

View File

@ -8,6 +8,7 @@ import (
"github.com/go-pg/pg/v10" "github.com/go-pg/pg/v10"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tribalwarshelp/api/tribehistory" "github.com/tribalwarshelp/api/tribehistory"
"github.com/tribalwarshelp/api/utils"
"github.com/tribalwarshelp/shared/models" "github.com/tribalwarshelp/shared/models"
) )
@ -23,17 +24,20 @@ func (repo *pgRepository) Fetch(ctx context.Context, cfg tribehistory.FetchConfi
var err error var err error
total := 0 total := 0
data := []*models.TribeHistory{} data := []*models.TribeHistory{}
query := repo.WithParam("SERVER", pg.Safe(cfg.Server)).Model(&data).Context(ctx) query := repo.
WithParam("SERVER", pg.Safe(cfg.Server)).
Model(&data).
Context(ctx).
Order(cfg.Sort...).
Limit(cfg.Limit).
Offset(cfg.Offset)
tribeRequired := utils.FindStringWithPrefix(cfg.Sort, "tribe.") != ""
if cfg.Filter != nil { if cfg.Filter != nil {
query = query. query = query.
WhereStruct(cfg.Filter). WhereStruct(cfg.Filter)
Limit(cfg.Filter.Limit). }
Offset(cfg.Filter.Offset) if tribeRequired {
query = query.Relation("Tribe._")
if cfg.Filter.Sort != "" {
query = query.Order(cfg.Filter.Sort)
}
} }
if cfg.Count { if cfg.Count {

View File

@ -7,5 +7,5 @@ import (
) )
type Usecase interface { type Usecase interface {
Fetch(ctx context.Context, server string, filter *models.TribeHistoryFilter) ([]*models.TribeHistory, int, error) Fetch(ctx context.Context, cfg FetchConfig) ([]*models.TribeHistory, int, error)
} }

View File

@ -17,17 +17,22 @@ func New(repo tribehistory.Repository) tribehistory.Usecase {
return &usecase{repo} return &usecase{repo}
} }
func (ucase *usecase) Fetch(ctx context.Context, server string, filter *models.TribeHistoryFilter) ([]*models.TribeHistory, int, error) { func (ucase *usecase) Fetch(ctx context.Context, cfg tribehistory.FetchConfig) ([]*models.TribeHistory, int, error) {
if filter == nil { if cfg.Filter == nil {
filter = &models.TribeHistoryFilter{} cfg.Filter = &models.TribeHistoryFilter{}
} }
if !middleware.CanExceedLimit(ctx) && (filter.Limit > tribehistory.PaginationLimit || filter.Limit <= 0) { if cfg.Filter.Limit > 0 {
filter.Limit = tribehistory.PaginationLimit cfg.Limit = cfg.Filter.Limit
} }
filter.Sort = utils.SanitizeSortExpression(filter.Sort) if cfg.Filter.Offset > 0 {
return ucase.repo.Fetch(ctx, tribehistory.FetchConfig{ cfg.Offset = cfg.Filter.Offset
Server: server, }
Filter: filter, if cfg.Filter.Sort != "" {
Count: true, cfg.Sort = append(cfg.Sort, cfg.Filter.Sort)
}) }
if !middleware.CanExceedLimit(ctx) && (cfg.Limit > tribehistory.PaginationLimit || cfg.Limit <= 0) {
cfg.Limit = tribehistory.PaginationLimit
}
cfg.Sort = utils.SanitizeSortExpressions(cfg.Sort)
return ucase.repo.Fetch(ctx, cfg)
} }