Skip to content

Commit 500efa5

Browse files
committed
api: use query wrappers in handlers
Replace direct bun.DB access in the API handlers with the Queries wrappers so all database access goes through a single handle. Signed-off-by: Robin Jarry <robin@jarry.cc>
1 parent a523aff commit 500efa5

13 files changed

Lines changed: 132 additions & 142 deletions

File tree

‎pkg/api/bundles.go‎

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,20 @@ func (h *handler) ListBundles(
7474
) (*ListBundlesOutput, error) {
7575
base := h.apiBase(ctx)
7676

77-
idb := db.GetQueries(ctx).DB
77+
queries := db.GetQueries(ctx)
7878

79-
query := idb.NewSelect().Model((*db.Bundle)(nil))
79+
q := queries.Select((*db.Bundle)(nil))
8080

8181
user := getAuthUser(ctx)
8282
if user != nil {
83-
query = query.Where("bundle.public = ? OR bundle.owner_id = ?", true, user.ID)
83+
q = q.Where("bundle.public = ? OR bundle.owner_id = ?", true, user.ID)
8484
} else {
85-
query = query.Where("bundle.public = ?", true)
85+
q = q.Where("bundle.public = ?", true)
8686
}
8787

88-
query = applyBundleFilters(query, input)
88+
q = applyBundleFilters(q, input)
8989

90-
total, err := query.Count(ctx)
90+
total, err := q.Count(ctx)
9191
if err != nil {
9292
log.Errorf("count bundles: %v", err)
9393
return nil, huma.Error500InternalServerError("Internal error.")
@@ -103,7 +103,7 @@ func (h *handler) ListBundles(
103103
offset := (input.Page - 1) * perPage
104104

105105
var bundles []db.Bundle
106-
if err := query.Model(&bundles).
106+
if err := q.Model(&bundles).
107107
Relation("Owner").Relation("Project").
108108
OrderExpr("bundle.id ASC").Offset(offset).Limit(perPage).Scan(ctx); err != nil {
109109
log.Errorf("list bundles: %v", err)
@@ -132,17 +132,17 @@ func (h *handler) GetBundle(
132132
ctx context.Context, input *GetBundleInput,
133133
) (*GetBundleOutput, error) {
134134
base := h.apiBase(ctx)
135-
idb := db.GetQueries(ctx).DB
135+
q := db.GetQueries(ctx)
136136

137137
var bundle db.Bundle
138-
if err := idb.NewSelect().Model(&bundle).
138+
if err := q.Select(&bundle).
139139
Relation("Owner").Relation("Project").
140140
Where("bundle.id = ?", input.ID).Scan(ctx); err != nil {
141141
return nil, huma.Error404NotFound("Not found.")
142142
}
143143

144144
bundles := []db.Bundle{bundle}
145-
if err := db.GetQueries(ctx).LoadBundlePatches(bundles); err != nil {
145+
if err := q.LoadBundlePatches(bundles); err != nil {
146146
log.Errorf("load bundle patches: %v", err)
147147
return nil, huma.Error500InternalServerError("Internal error.")
148148
}
@@ -174,7 +174,7 @@ func (h *handler) CreateBundle(
174174

175175
q := db.GetQueries(ctx)
176176
patchIDs := *body.Patches
177-
projectID, err := validateBundlePatches(ctx, q.DB, patchIDs)
177+
projectID, err := validateBundlePatches(ctx, q, patchIDs)
178178
if err != nil {
179179
return nil, huma.Error400BadRequest(err.Error())
180180
}
@@ -194,12 +194,12 @@ func (h *handler) CreateBundle(
194194
return nil, huma.Error400BadRequest("Bundle creation failed.")
195195
}
196196

197-
if err := insertBundlePatches(ctx, q.DB, bundle.ID, patchIDs); err != nil {
197+
if err := insertBundlePatches(ctx, q, bundle.ID, patchIDs); err != nil {
198198
return nil, huma.Error400BadRequest("Bundle creation failed.")
199199
}
200200

201201
// Re-fetch with relations.
202-
if err := q.DB.NewSelect().Model(&bundle).
202+
if err := q.Select(&bundle).
203203
Relation("Owner").Relation("Project").
204204
Where("bundle.id = ?", bundle.ID).Scan(ctx); err != nil {
205205
return nil, huma.Error400BadRequest("Bundle creation failed.")
@@ -230,10 +230,9 @@ func (h *handler) UpdateBundle(
230230
return nil, err
231231
}
232232

233-
idb := db.GetQueries(ctx).DB
233+
q := db.GetQueries(ctx)
234234
var bundle db.Bundle
235-
if err := idb.NewSelect().Model(&bundle).
236-
Where("id = ?", input.ID).Scan(ctx); err != nil {
235+
if err := q.Select(&bundle).Where("id = ?", input.ID).Scan(ctx); err != nil {
237236
return nil, huma.Error404NotFound("Not found.")
238237
}
239238

@@ -247,21 +246,21 @@ func (h *handler) UpdateBundle(
247246
if len(*body.Patches) == 0 {
248247
return nil, huma.Error400BadRequest("Bundles cannot be empty.")
249248
}
250-
projectID, err := validateBundlePatches(ctx, idb, *body.Patches)
249+
projectID, err := validateBundlePatches(ctx, q, *body.Patches)
251250
if err != nil {
252251
return nil, huma.Error400BadRequest(err.Error())
253252
}
254-
if _, err := idb.NewDelete().Model((*db.BundlePatch)(nil)).
253+
if _, err := q.Delete((*db.BundlePatch)(nil)).
255254
Where("bundle_id = ?", input.ID).Exec(ctx); err != nil {
256255
return nil, huma.Error400BadRequest("Update failed.")
257256
}
258-
if err := insertBundlePatches(ctx, idb, input.ID, *body.Patches); err != nil {
257+
if err := insertBundlePatches(ctx, q, input.ID, *body.Patches); err != nil {
259258
return nil, huma.Error400BadRequest("Update failed.")
260259
}
261260
bundle.ProjectID = projectID
262261
}
263262

264-
up := idb.NewUpdate().Model(&bundle).Where("id = ?", input.ID)
263+
up := q.Update(&bundle).Where("id = ?", input.ID)
265264
if body.Name != nil {
266265
up = up.Set("name = ?", *body.Name)
267266
}
@@ -275,15 +274,15 @@ func (h *handler) UpdateBundle(
275274
return nil, huma.Error400BadRequest("Update failed.")
276275
}
277276

278-
if err := idb.NewSelect().Model(&bundle).
277+
if err := q.Select(&bundle).
279278
Relation("Owner").Relation("Project").
280279
Where("bundle.id = ?", input.ID).Scan(ctx); err != nil {
281280
log.Errorf("get bundle: %v", err)
282281
return nil, huma.Error500InternalServerError("Internal error.")
283282
}
284283

285284
bundles := []db.Bundle{bundle}
286-
if err := db.GetQueries(ctx).LoadBundlePatches(bundles); err != nil {
285+
if err := q.LoadBundlePatches(bundles); err != nil {
287286
log.Errorf("load bundle patches: %v", err)
288287
return nil, huma.Error500InternalServerError("Internal error.")
289288
}
@@ -308,24 +307,18 @@ func (h *handler) DeleteBundle(
308307
return nil, err
309308
}
310309

311-
idb := db.GetQueries(ctx).DB
310+
q := db.GetQueries(ctx)
312311

313312
var bundle db.Bundle
314-
if err := idb.NewSelect().Model(&bundle).
315-
Where("id = ?", input.ID).Scan(ctx); err != nil {
313+
if err := q.Select(&bundle).Where("id = ?", input.ID).Scan(ctx); err != nil {
316314
return nil, huma.Error404NotFound("Not found.")
317315
}
318316

319317
if bundle.OwnerID != user.ID {
320318
return nil, ForbiddenErr
321319
}
322320

323-
if _, err := idb.NewDelete().Model((*db.BundlePatch)(nil)).
324-
Where("bundle_id = ?", input.ID).Exec(ctx); err != nil {
325-
return nil, huma.Error400BadRequest("Delete failed.")
326-
}
327-
if _, err := idb.NewDelete().Model((*db.Bundle)(nil)).
328-
Where("id = ?", input.ID).Exec(ctx); err != nil {
321+
if _, err := q.Delete(&bundle).WherePK().Exec(ctx); err != nil {
329322
return nil, huma.Error400BadRequest("Delete failed.")
330323
}
331324

@@ -353,9 +346,9 @@ func applyBundleFilters(q *bun.SelectQuery, input *ListBundlesInput) *bun.Select
353346
return q
354347
}
355348

356-
func validateBundlePatches(ctx context.Context, idb bun.IDB, patchIDs []int) (int, error) {
349+
func validateBundlePatches(ctx context.Context, q *db.Queries, patchIDs []int) (int, error) {
357350
var projectIDs []int
358-
idb.NewSelect().Model((*db.Patch)(nil)).
351+
q.Select((*db.Patch)(nil)).
359352
Column("project_id").
360353
Where("id IN ?", bun.Tuple(patchIDs)).
361354
Scan(ctx, &projectIDs)
@@ -374,14 +367,14 @@ func validateBundlePatches(ctx context.Context, idb bun.IDB, patchIDs []int) (in
374367
return projectID, nil
375368
}
376369

377-
func insertBundlePatches(ctx context.Context, idb bun.IDB, bundleID int, patchIDs []int) error {
370+
func insertBundlePatches(ctx context.Context, q *db.Queries, bundleID int, patchIDs []int) error {
378371
for i, pid := range patchIDs {
379372
bp := db.BundlePatch{
380373
BundleID: bundleID,
381374
PatchID: pid,
382375
Order: int(i),
383376
}
384-
if _, err := idb.NewInsert().Model(&bp).Exec(ctx); err != nil {
377+
if err := q.Insert(&bp); err != nil {
385378
return err
386379
}
387380
}

‎pkg/api/checks.go‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ type ListChecksOutput struct {
7070
func (h *handler) ListChecks(
7171
ctx context.Context, input *ListChecksInput,
7272
) (*ListChecksOutput, error) {
73-
idb := db.GetQueries(ctx).DB
73+
q := db.GetQueries(ctx)
7474
base := h.apiBase(ctx)
7575

76-
total, err := idb.NewSelect().Model((*db.Check)(nil)).
76+
total, err := q.Select((*db.Check)(nil)).
7777
Where("patch_id = ?", input.PatchID).
7878
Count(ctx)
7979
if err != nil {
@@ -91,7 +91,7 @@ func (h *handler) ListChecks(
9191
offset := (input.Page - 1) * perPage
9292

9393
var checks []db.Check
94-
if err := idb.NewSelect().Model(&checks).
94+
if err := q.Select(&checks).
9595
Relation("User").
9696
Where(`ci_check.patch_id = ?`, input.PatchID).
9797
OrderExpr(`ci_check.id ASC`).Offset(offset).Limit(perPage).Scan(ctx); err != nil {
@@ -125,7 +125,7 @@ func (h *handler) GetCheck(
125125
base := h.apiBase(ctx)
126126

127127
var c db.Check
128-
err := db.GetQueries(ctx).DB.NewSelect().Model(&c).
128+
err := db.GetQueries(ctx).Select(&c).
129129
Relation("User").
130130
Where(`ci_check.id = ?`, input.CheckID).
131131
Where(`ci_check.patch_id = ?`, input.PatchID).
@@ -163,7 +163,7 @@ func (h *handler) CreateCheck(
163163
}
164164

165165
var patch db.Patch
166-
if err := q.DB.NewSelect().Model(&patch).
166+
if err := q.Select(&patch).
167167
Where("id = ?", input.PatchID).
168168
Column("id", "project_id").Scan(ctx); err != nil {
169169
return nil, huma.Error404NotFound("Not found.")
@@ -191,7 +191,7 @@ func (h *handler) CreateCheck(
191191
// update it instead of creating a duplicate
192192
var check db.Check
193193
var eventCategory string
194-
err = q.DB.NewSelect().Model(&check).
194+
err = q.Select(&check).
195195
Where("patch_id = ?", input.PatchID).
196196
Where("context = ?", input.Body.Context).
197197
Where("user_id = ?", user.ID).
@@ -202,7 +202,7 @@ func (h *handler) CreateCheck(
202202
check.Date = time.Now()
203203
check.TargetURL = targetURL
204204
check.Description = description
205-
_, err = q.DB.NewUpdate().Model(&check).
205+
_, err = q.Update(&check).
206206
Where("id = ?", check.ID).
207207
Set("state = ?", check.State).
208208
Set("date = ?", check.Date).
@@ -264,7 +264,7 @@ func (h *handler) UpdateCheck(
264264
}
265265

266266
var check db.Check
267-
if err := q.DB.NewSelect().Model(&check).
267+
if err := q.Select(&check).
268268
Relation("User").
269269
Where("ci_check.id = ?", input.CheckID).
270270
Where("ci_check.patch_id = ?", input.PatchID).
@@ -273,7 +273,7 @@ func (h *handler) UpdateCheck(
273273
}
274274

275275
var patch db.Patch
276-
if err := q.DB.NewSelect().Model(&patch).
276+
if err := q.Select(&patch).
277277
Where("id = ?", input.PatchID).
278278
Column("id", "project_id").Scan(ctx); err != nil {
279279
return nil, huma.Error404NotFound("Not found.")
@@ -288,7 +288,7 @@ func (h *handler) UpdateCheck(
288288
return nil, huma.Error400BadRequest("Invalid state.")
289289
}
290290

291-
uq := q.DB.NewUpdate().Model(&check).Where("id = ?", check.ID).
291+
uq := q.Update(&check).Where("id = ?", check.ID).
292292
Set("state = ?", stateVal).
293293
Set("date = ?", time.Now())
294294
if input.Body.TargetURL != nil {
@@ -311,7 +311,7 @@ func (h *handler) UpdateCheck(
311311
})
312312

313313
// re-fetch
314-
if err := q.DB.NewSelect().Model(&check).Relation("User").
314+
if err := q.Select(&check).Relation("User").
315315
Where("ci_check.id = ?", check.ID).Scan(ctx); err != nil {
316316
log.Errorf("get check: %v", err)
317317
return nil, huma.Error500InternalServerError("Internal error.")

‎pkg/api/comments.go‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (h *handler) ListPatchComments(
6868
) (*ListPatchCommentsOutput, error) {
6969
base := h.apiBase(ctx)
7070

71-
q := db.GetQueries(ctx).DB.NewSelect().Model((*db.PatchComment)(nil)).
71+
q := db.GetQueries(ctx).Select((*db.PatchComment)(nil)).
7272
Where("patch_comment.patch_id = ?", input.ID)
7373

7474
total, err := q.Count(ctx)
@@ -119,7 +119,7 @@ func (h *handler) GetPatchComment(
119119
base := h.apiBase(ctx)
120120

121121
var c db.PatchComment
122-
err := db.GetQueries(ctx).DB.NewSelect().Model(&c).
122+
err := db.GetQueries(ctx).Select(&c).
123123
Relation("Submitter").
124124
Where("patch_comment.id = ?", input.CommentID).
125125
Where("patch_comment.patch_id = ?", input.PatchID).
@@ -159,7 +159,7 @@ func (h *handler) UpdatePatchComment(
159159
q := db.GetQueries(ctx)
160160

161161
var c db.PatchComment
162-
err = q.DB.NewSelect().Model(&c).
162+
err = q.Select(&c).
163163
Relation("Submitter").
164164
Where("patch_comment.id = ?", input.CommentID).
165165
Where("patch_comment.patch_id = ?", input.PatchID).
@@ -169,7 +169,7 @@ func (h *handler) UpdatePatchComment(
169169
}
170170

171171
var patch db.Patch
172-
if err := q.DB.NewSelect().Model(&patch).
172+
if err := q.Select(&patch).
173173
Where("id = ?", input.PatchID).
174174
Column("id", "project_id").Scan(ctx); err != nil {
175175
return nil, huma.Error404NotFound("Not found.")
@@ -180,7 +180,7 @@ func (h *handler) UpdatePatchComment(
180180
}
181181

182182
if input.Body.Addressed != nil {
183-
if _, err := q.DB.NewUpdate().Model((*db.PatchComment)(nil)).
183+
if _, err := q.Update((*db.PatchComment)(nil)).
184184
Set("addressed = ?", *input.Body.Addressed).
185185
Where("id = ?", input.CommentID).
186186
Exec(ctx); err != nil {
@@ -214,7 +214,7 @@ func (h *handler) ListCoverComments(
214214
) (*ListCoverCommentsOutput, error) {
215215
base := h.apiBase(ctx)
216216

217-
q := db.GetQueries(ctx).DB.NewSelect().Model((*db.CoverComment)(nil)).
217+
q := db.GetQueries(ctx).Select((*db.CoverComment)(nil)).
218218
Where("cover_comment.cover_id = ?", input.ID)
219219

220220
total, err := q.Count(ctx)
@@ -265,7 +265,7 @@ func (h *handler) GetCoverComment(
265265
base := h.apiBase(ctx)
266266

267267
var c db.CoverComment
268-
err := db.GetQueries(ctx).DB.NewSelect().Model(&c).
268+
err := db.GetQueries(ctx).Select(&c).
269269
Relation("Submitter").
270270
Where("cover_comment.id = ?", input.CommentID).
271271
Where("cover_comment.cover_id = ?", input.CoverID).
@@ -305,7 +305,7 @@ func (h *handler) UpdateCoverComment(
305305
q := db.GetQueries(ctx)
306306

307307
var c db.CoverComment
308-
err = q.DB.NewSelect().Model(&c).
308+
err = q.Select(&c).
309309
Relation("Submitter").
310310
Where("cover_comment.id = ?", input.CommentID).
311311
Where("cover_comment.cover_id = ?", input.CoverID).
@@ -315,7 +315,7 @@ func (h *handler) UpdateCoverComment(
315315
}
316316

317317
var cover db.Cover
318-
if err := q.DB.NewSelect().Model(&cover).
318+
if err := q.Select(&cover).
319319
Where("id = ?", input.CoverID).
320320
Column("id", "project_id").Scan(ctx); err != nil {
321321
return nil, huma.Error404NotFound("Not found.")
@@ -326,7 +326,7 @@ func (h *handler) UpdateCoverComment(
326326
}
327327

328328
if input.Body.Addressed != nil {
329-
if _, err := q.DB.NewUpdate().Model((*db.CoverComment)(nil)).
329+
if _, err := q.Update((*db.CoverComment)(nil)).
330330
Set("addressed = ?", *input.Body.Addressed).
331331
Where("id = ?", input.CommentID).
332332
Exec(ctx); err != nil {

0 commit comments

Comments
 (0)