11package loaders
22
33import (
4+ "context"
5+
46 "github.com/bcc-media/wayfarer/internal/cache"
57 "github.com/bcc-media/wayfarer/internal/database"
68 "github.com/bcc-media/wayfarer/internal/database/sqlc"
@@ -9,7 +11,7 @@ import (
911)
1012
1113// Loaders holds all dataloader instances for batching database queries
12- // These are shared globally across all requests and use built-in caching
14+ // These are shared globally across all requests and rely on Ristretto cache for data caching
1315type Loaders struct {
1416 UserByIDLoader * dataloader.Loader [string , * model.User ]
1517 ChurchLoader * dataloader.Loader [string , * model.Church ]
@@ -39,113 +41,49 @@ type Loaders struct {
3941 UserStreakActivityLoader * dataloader.Loader [UserStreakActivityKey , []* sqlc.UserStreakActivity ]
4042}
4143
42- // NewLoaders creates all dataloaders with batch functions and default caching
44+ // newBatchedLoader creates a new batched dataloader with standard configuration:
45+ // - Batch capacity of 100
46+ // - Cache disabled (we rely on Ristretto cache in batch functions instead)
47+ func newBatchedLoader [K comparable , V any ](
48+ batchFunc func (context.Context , []K ) []* dataloader.Result [V ],
49+ ) * dataloader.Loader [K , V ] {
50+ return dataloader .NewBatchedLoader (
51+ batchFunc ,
52+ dataloader.WithBatchCapacity [K , V ](100 ),
53+ dataloader.WithCache [K , V ](& dataloader.NoCache [K , V ]{}), // Disable internal cache, use Ristretto instead
54+ )
55+ }
56+
57+ // NewLoaders creates all dataloaders with batch functions
58+ // Dataloaders provide request batching while relying on Ristretto cache for data caching
4359// Should be called once at server startup
4460func NewLoaders (db * database.DB , cache * cache.CacheWithRegistry ) * Loaders {
4561 return & Loaders {
46- UserByIDLoader : dataloader .NewBatchedLoader (
47- userByIDBatchFunc (db , cache ),
48- dataloader.WithBatchCapacity [string , * model.User ](100 ),
49- ),
50- ChurchLoader : dataloader .NewBatchedLoader (
51- churchBatchFunc (db , cache ),
52- dataloader.WithBatchCapacity [string , * model.Church ](100 ),
53- ),
54- ProjectsByUserLoader : dataloader .NewBatchedLoader (
55- projectsByUserBatchFunc (db , cache ),
56- dataloader.WithBatchCapacity [string , []* model.Project ](100 ),
57- ),
58- EventsByUserLoader : dataloader .NewBatchedLoader (
59- eventsByUserBatchFunc (db , cache ),
60- dataloader.WithBatchCapacity [string , []* model.Event ](100 ),
61- ),
62- EventsByProjectLoader : dataloader .NewBatchedLoader (
63- eventsByProjectBatchFunc (db , cache ),
64- dataloader.WithBatchCapacity [string , []* model.Event ](100 ),
65- ),
66- TeamsByUserLoader : dataloader .NewBatchedLoader (
67- teamsByUserBatchFunc (db , cache ),
68- dataloader.WithBatchCapacity [string , []* model.Team ](100 ),
69- ),
70- TeamsByProjectLoader : dataloader .NewBatchedLoader (
71- teamsByProjectBatchFunc (db , cache ),
72- dataloader.WithBatchCapacity [string , []* model.Team ](100 ),
73- ),
74- TeamsBySuperTeamLoader : dataloader .NewBatchedLoader (
75- teamsBySuperTeamBatchFunc (db , cache ),
76- dataloader.WithBatchCapacity [string , []* model.Team ](100 ),
77- ),
78- SuperTeamsByUserLoader : dataloader .NewBatchedLoader (
79- superTeamsByUserBatchFunc (db , cache ),
80- dataloader.WithBatchCapacity [string , []* model.SuperTeam ](100 ),
81- ),
82- RolesByUserLoader : dataloader .NewBatchedLoader (
83- rolesByUserBatchFunc (db , cache ),
84- dataloader.WithBatchCapacity [string , []* model.UserRole ](100 ),
85- ),
86- UsersByTeamLoader : dataloader .NewBatchedLoader (
87- usersByTeamBatchFunc (db , cache ),
88- dataloader.WithBatchCapacity [string , []* model.User ](100 ),
89- ),
90- ProjectByIDLoader : dataloader .NewBatchedLoader (
91- projectByIDBatchFunc (db , cache ),
92- dataloader.WithBatchCapacity [string , * model.Project ](100 ),
93- ),
94- EventByIDLoader : dataloader .NewBatchedLoader (
95- eventByIDBatchFunc (db , cache ),
96- dataloader.WithBatchCapacity [string , * model.Event ](100 ),
97- ),
98- TeamByIDLoader : dataloader .NewBatchedLoader (
99- teamByIDBatchFunc (db , cache ),
100- dataloader.WithBatchCapacity [string , * model.Team ](100 ),
101- ),
102- SuperTeamByIDLoader : dataloader .NewBatchedLoader (
103- superTeamByIDBatchFunc (db , cache ),
104- dataloader.WithBatchCapacity [string , * model.SuperTeam ](100 ),
105- ),
106- AchievementByIDLoader : dataloader .NewBatchedLoader (
107- achievementByIDBatchFunc (db , cache ),
108- dataloader.WithBatchCapacity [string , model.Achievement ](100 ),
109- ),
110- AchievementsByProjectLoader : dataloader .NewBatchedLoader (
111- achievementsByProjectBatchFunc (db , cache ),
112- dataloader.WithBatchCapacity [string , []model.Achievement ](100 ),
113- ),
114- ArticlesByAchievementLoader : dataloader .NewBatchedLoader (
115- articlesByAchievementBatchFunc (db , cache ),
116- dataloader.WithBatchCapacity [string , []model.Article ](100 ),
117- ),
118- TracksByAchievementLoader : dataloader .NewBatchedLoader (
119- tracksByAchievementBatchFunc (db , cache ),
120- dataloader.WithBatchCapacity [string , []model.Track ](100 ),
121- ),
122- ChallengeByIDLoader : dataloader .NewBatchedLoader (
123- challengeByIDBatchFunc (db , cache ),
124- dataloader.WithBatchCapacity [string , * model.Challenge ](100 ),
125- ),
126- ChallengesByProjectLoader : dataloader .NewBatchedLoader (
127- challengesByProjectBatchFunc (db , cache ),
128- dataloader.WithBatchCapacity [string , []* model.Challenge ](100 ),
129- ),
130- ChallengesByEventLoader : dataloader .NewBatchedLoader (
131- challengesByEventBatchFunc (db , cache ),
132- dataloader.WithBatchCapacity [string , []* model.Challenge ](100 ),
133- ),
134- StreakByIDLoader : dataloader .NewBatchedLoader (
135- streakByIDBatchFunc (db , cache ),
136- dataloader.WithBatchCapacity [string , * model.Streak ](100 ),
137- ),
138- StreaksByProjectLoader : dataloader .NewBatchedLoader (
139- streaksByProjectBatchFunc (db , cache ),
140- dataloader.WithBatchCapacity [string , []* model.Streak ](100 ),
141- ),
142- RelevantDaysByStreakLoader : dataloader .NewBatchedLoader (
143- relevantDaysByStreakBatchFunc (db , cache ),
144- dataloader.WithBatchCapacity [string , []model.DateRange ](100 ),
145- ),
146- UserStreakActivityLoader : dataloader .NewBatchedLoader (
147- userStreakActivityBatchFunc (db , cache ),
148- dataloader.WithBatchCapacity [UserStreakActivityKey , []* sqlc.UserStreakActivity ](100 ),
149- ),
62+ UserByIDLoader : newBatchedLoader (userByIDBatchFunc (db , cache )),
63+ ChurchLoader : newBatchedLoader (churchBatchFunc (db , cache )),
64+ ProjectsByUserLoader : newBatchedLoader (projectsByUserBatchFunc (db , cache )),
65+ EventsByUserLoader : newBatchedLoader (eventsByUserBatchFunc (db , cache )),
66+ EventsByProjectLoader : newBatchedLoader (eventsByProjectBatchFunc (db , cache )),
67+ TeamsByUserLoader : newBatchedLoader (teamsByUserBatchFunc (db , cache )),
68+ TeamsByProjectLoader : newBatchedLoader (teamsByProjectBatchFunc (db , cache )),
69+ TeamsBySuperTeamLoader : newBatchedLoader (teamsBySuperTeamBatchFunc (db , cache )),
70+ SuperTeamsByUserLoader : newBatchedLoader (superTeamsByUserBatchFunc (db , cache )),
71+ RolesByUserLoader : newBatchedLoader (rolesByUserBatchFunc (db , cache )),
72+ UsersByTeamLoader : newBatchedLoader (usersByTeamBatchFunc (db , cache )),
73+ ProjectByIDLoader : newBatchedLoader (projectByIDBatchFunc (db , cache )),
74+ EventByIDLoader : newBatchedLoader (eventByIDBatchFunc (db , cache )),
75+ TeamByIDLoader : newBatchedLoader (teamByIDBatchFunc (db , cache )),
76+ SuperTeamByIDLoader : newBatchedLoader (superTeamByIDBatchFunc (db , cache )),
77+ AchievementByIDLoader : newBatchedLoader (achievementByIDBatchFunc (db , cache )),
78+ AchievementsByProjectLoader : newBatchedLoader (achievementsByProjectBatchFunc (db , cache )),
79+ ArticlesByAchievementLoader : newBatchedLoader (articlesByAchievementBatchFunc (db , cache )),
80+ TracksByAchievementLoader : newBatchedLoader (tracksByAchievementBatchFunc (db , cache )),
81+ ChallengeByIDLoader : newBatchedLoader (challengeByIDBatchFunc (db , cache )),
82+ ChallengesByProjectLoader : newBatchedLoader (challengesByProjectBatchFunc (db , cache )),
83+ ChallengesByEventLoader : newBatchedLoader (challengesByEventBatchFunc (db , cache )),
84+ StreakByIDLoader : newBatchedLoader (streakByIDBatchFunc (db , cache )),
85+ StreaksByProjectLoader : newBatchedLoader (streaksByProjectBatchFunc (db , cache )),
86+ RelevantDaysByStreakLoader : newBatchedLoader (relevantDaysByStreakBatchFunc (db , cache )),
87+ UserStreakActivityLoader : newBatchedLoader (userStreakActivityBatchFunc (db , cache )),
15088 }
15189}
0 commit comments