Skip to content

Commit e613d15

Browse files
committed
fix: do not limit and offset count
1 parent 8740247 commit e613d15

File tree

5 files changed

+196
-7
lines changed

5 files changed

+196
-7
lines changed

db/mod.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ func ConvertModFilter(query *ent.ModQuery, filter *models.ModFilter, count bool,
2020
} else if len(filter.References) > 0 {
2121
query = query.Where(mod.ModReferenceIn(filter.References...))
2222
} else if filter != nil {
23-
query = query.
24-
Limit(*filter.Limit).
25-
Offset(*filter.Offset)
23+
if !count {
24+
query = query.
25+
Limit(*filter.Limit).
26+
Offset(*filter.Offset)
27+
}
2628

27-
if *filter.OrderBy != generated.ModFieldsSearch {
29+
if filter.OrderBy != nil && *filter.OrderBy != generated.ModFieldsSearch {
2830
if string(*filter.OrderBy) == "last_version_date" {
2931
query = query.Modify(func(s *sql.Selector) {
3032
s.OrderExpr(sql.ExprP("case when last_version_date is null then 1 else 0 end, last_version_date"))

gql/resolver_mods.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,13 @@ func (r *mutationResolver) CreateMod(ctx context.Context, newMod generated.NewMo
103103
return nil, err
104104
}
105105

106-
currentAvailable := float64(4)
106+
currentAvailable := float64(util.ModsPer24h)
107107
lastModTime := time.Now()
108108
for _, mod := range existingMods {
109109
currentAvailable--
110110
if mod.CreatedAt.After(lastModTime) {
111111
diff := mod.CreatedAt.Sub(lastModTime)
112-
currentAvailable = math.Min(4, currentAvailable+diff.Hours()/6)
112+
currentAvailable = math.Min(float64(util.ModsPer24h), currentAvailable+diff.Hours()/6)
113113
}
114114
lastModTime = mod.CreatedAt
115115
}
@@ -396,6 +396,7 @@ func (r *getModsResolver) Mods(ctx context.Context, _ *generated.GetMods) ([]*ge
396396

397397
result, err := query.All(ctx)
398398
if err != nil {
399+
slox.Error(ctx, "failed querying mods", slog.Any("err", err))
399400
return nil, err
400401
}
401402

@@ -412,10 +413,11 @@ func (r *getModsResolver) Count(ctx context.Context, _ *generated.GetMods) (int,
412413
}
413414

414415
query := db.From(ctx).Mod.Query()
415-
query = db.ConvertModFilter(query, modFilter, false, unapproved)
416+
query = db.ConvertModFilter(query, modFilter, true, unapproved)
416417

417418
result, err := query.Count(ctx)
418419
if err != nil {
420+
slox.Error(ctx, "failed querying mod count", slog.Any("err", err))
419421
return 0, err
420422
}
421423

tests/get_mod_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package tests
2+
3+
import (
4+
"testing"
5+
6+
"github.com/MarvinJWendt/testza"
7+
"github.com/satisfactorymodding/smr-api/generated"
8+
)
9+
10+
const getQuery = `query GetMods($offset: Int!, $limit: Int!, $search: String, $order: Order, $orderBy: ModFields, $tagIDs: [TagID!]) {
11+
getMods(
12+
filter: {limit: $limit, offset: $offset, search: $search, order: $order, order_by: $orderBy, tagIDs: $tagIDs}
13+
) {
14+
count
15+
mods {
16+
mod_reference
17+
tags {
18+
id
19+
}
20+
}
21+
}
22+
}`
23+
24+
func TestGetModLimitOffset(t *testing.T) {
25+
ctx, client, stop := setup()
26+
defer stop()
27+
28+
token, _, err := makeUser(ctx)
29+
testza.AssertNoError(t, err)
30+
31+
tags := seedTags(t, ctx, token, client)
32+
seedMods(t, ctx, token, client, tags[0])
33+
34+
getRequest := authRequest(getQuery, token)
35+
36+
getRequest.Var("offset", "4")
37+
getRequest.Var("limit", "2")
38+
getRequest.Var("order", "asc")
39+
getRequest.Var("orderBy", "created_at")
40+
41+
var getResponse struct {
42+
GetMods generated.GetMods
43+
}
44+
testza.AssertNoError(t, client.Run(ctx, getRequest, &getResponse))
45+
testza.AssertEqual(t, 10, getResponse.GetMods.Count)
46+
testza.AssertEqual(t, 2, len(getResponse.GetMods.Mods))
47+
testza.AssertEqual(t, "resource_overhaul", getResponse.GetMods.Mods[0].ModReference)
48+
testza.AssertEqual(t, "automated_defense", getResponse.GetMods.Mods[1].ModReference)
49+
testza.AssertEqual(t, 0, len(getResponse.GetMods.Mods[0].Tags))
50+
testza.AssertEqual(t, 1, len(getResponse.GetMods.Mods[1].Tags))
51+
testza.AssertEqual(t, tags[0], getResponse.GetMods.Mods[1].Tags[0].ID)
52+
}

tests/utils_test.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package tests
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/MarvinJWendt/testza"
8+
"github.com/machinebox/graphql"
9+
"github.com/satisfactorymodding/smr-api/generated"
10+
"github.com/satisfactorymodding/smr-api/util"
11+
)
12+
13+
func seedTags(t *testing.T, ctx context.Context, token string, client *graphql.Client) []string {
14+
tags := []string{
15+
"hello",
16+
"foo",
17+
}
18+
19+
ids := make([]string, len(tags))
20+
for i, tag := range tags {
21+
createRequest := authRequest(`mutation CreateTag($name: TagName!) {
22+
createTag(tagName: $name, description: "N/A") {
23+
id
24+
}
25+
}`, token)
26+
createRequest.Var("name", tag)
27+
28+
var createResponse struct {
29+
CreateTag generated.Tag
30+
}
31+
testza.AssertNoError(t, client.Run(ctx, createRequest, &createResponse))
32+
testza.AssertNotEqual(t, "", createResponse.CreateTag.ID)
33+
34+
ids[i] = createResponse.CreateTag.ID
35+
}
36+
37+
return ids
38+
}
39+
40+
type testMod struct {
41+
Name string `json:"name"`
42+
ShortDescription string `json:"short_description"`
43+
FullDescription string `json:"full_description"`
44+
ModReference string `json:"mod_reference"`
45+
TagIDs []string `json:"tagIDs"`
46+
}
47+
48+
func seedMods(t *testing.T, ctx context.Context, token string, client *graphql.Client, tagID string) []string {
49+
mods := []testMod{
50+
{
51+
Name: "Advanced Robotics",
52+
ShortDescription: "Enhances robot efficiency and adds new automation features.",
53+
ModReference: "advanced_robotics",
54+
},
55+
{
56+
Name: "Eco-Friendly Power",
57+
ShortDescription: "Introduces sustainable energy sources and eco-friendly power management.",
58+
ModReference: "eco_friendly_power",
59+
},
60+
{
61+
Name: "Quantum Transport",
62+
ShortDescription: "Allows instantaneous item transport using quantum entanglement.",
63+
ModReference: "quantum_transport",
64+
},
65+
{
66+
Name: "Mega Factory",
67+
ShortDescription: "Expands factory building limits and adds new large-scale production tools.",
68+
ModReference: "mega_factory",
69+
},
70+
{
71+
Name: "Resource Overhaul",
72+
ShortDescription: "Revamps resource extraction and processing for more efficiency.",
73+
ModReference: "resource_overhaul",
74+
},
75+
{
76+
Name: "Automated Defense",
77+
ShortDescription: "Adds advanced automated defense systems to protect your factory.",
78+
ModReference: "automated_defense",
79+
TagIDs: []string{tagID},
80+
},
81+
{
82+
Name: "AI Assistant",
83+
ShortDescription: "Introduces an AI assistant to help manage and optimize your factory.",
84+
ModReference: "ai_assistant",
85+
TagIDs: []string{tagID},
86+
},
87+
{
88+
Name: "Fusion Reactors",
89+
ShortDescription: "Adds fusion reactors as a high-efficiency power source.",
90+
ModReference: "fusion_reactors",
91+
TagIDs: []string{tagID},
92+
},
93+
{
94+
Name: "Modular Production",
95+
ShortDescription: "Allows modular production units for flexible factory layouts.",
96+
ModReference: "modular_production",
97+
TagIDs: []string{tagID},
98+
},
99+
{
100+
Name: "Nanotech Manufacturing",
101+
ShortDescription: "Incorporates nanotechnology for ultra-precise manufacturing processes.",
102+
ModReference: "nanotech_manufacturing",
103+
TagIDs: []string{tagID},
104+
},
105+
}
106+
107+
util.ModsPer24h = len(mods)
108+
109+
ids := make([]string, len(mods))
110+
for i, mod := range mods {
111+
mod.FullDescription = "N/A"
112+
113+
createRequest := authRequest(`mutation CreateMod($mod: NewMod!) {
114+
createMod(mod: $mod) {
115+
id
116+
}
117+
}`, token)
118+
createRequest.Var("mod", mod)
119+
120+
var createResponse struct {
121+
CreateMod generated.Mod
122+
}
123+
testza.AssertNoError(t, client.Run(ctx, createRequest, &createResponse))
124+
testza.AssertNotEqual(t, "", createResponse.CreateMod.ID)
125+
126+
ids[i] = createResponse.CreateMod.ID
127+
}
128+
129+
return ids
130+
}

util/ratelimits.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package util
2+
3+
var ModsPer24h = 4

0 commit comments

Comments
 (0)