@@ -385,51 +385,77 @@ func (api *API) templateVersionsByTemplate(rw http.ResponseWriter, r *http.Reque
385
385
return
386
386
}
387
387
388
- apiVersion := []codersdk. TemplateVersion {}
389
- versions , err := api . Database . GetTemplateVersionsByTemplateID ( r . Context (), database. GetTemplateVersionsByTemplateIDParams {
390
- TemplateID : template . ID ,
391
- AfterID : paginationParams .AfterID ,
392
- LimitOpt : int32 ( paginationParams . Limit ),
393
- OffsetOpt : int32 ( paginationParams . Offset ),
394
- } )
395
- if errors .Is (err , sql .ErrNoRows ) {
396
- httpapi .Write (rw , http .StatusOK , apiVersion )
397
- return
398
- }
399
- if err != nil {
400
- httpapi . Write ( rw , http . StatusInternalServerError , httpapi. Response {
401
- Message : fmt . Sprintf ( "get template version: %s" , err ),
402
- })
403
- return
404
- }
405
- jobIDs := make ([]uuid. UUID , 0 , len ( versions ))
406
- for _ , version := range versions {
407
- jobIDs = append ( jobIDs , version . JobID )
408
- }
409
- jobs , err := api . Database . GetProvisionerJobsByIDs ( r . Context (), jobIDs )
410
- if err != nil {
411
- httpapi . Write ( rw , http . StatusInternalServerError , httpapi. Response {
412
- Message : fmt . Sprintf ( "get jobs: %s" , err ),
388
+ var err error
389
+ apiVersions := []codersdk. TemplateVersion {}
390
+ err = api . Database . InTx ( func ( store database. Store ) error {
391
+ if paginationParams .AfterID != uuid . Nil {
392
+ // See if the record exists first. If the record does not exist, the pagination
393
+ // query will not work.
394
+ _ , err := store . GetTemplateVersionByID ( r . Context (), paginationParams . AfterID )
395
+ if err != nil && xerrors .Is (err , sql .ErrNoRows ) {
396
+ httpapi .Write (rw , http .StatusBadRequest , httpapi. Response {
397
+ Message : fmt . Sprintf ( "record at \" after_id \" (%q) does not exists" , paginationParams . AfterID . String ()),
398
+ })
399
+ return err
400
+ } else if err != nil {
401
+ httpapi . Write ( rw , http . StatusInternalServerError , httpapi. Response {
402
+ Message : fmt . Sprintf ( "get template version at after_id: %s" , err ),
403
+ })
404
+ return err
405
+ }
406
+ }
407
+
408
+ versions , err := store . GetTemplateVersionsByTemplateID ( r . Context (), database. GetTemplateVersionsByTemplateIDParams {
409
+ TemplateID : template . ID ,
410
+ AfterID : paginationParams . AfterID ,
411
+ LimitOpt : int32 ( paginationParams . Limit ),
412
+ OffsetOpt : int32 ( paginationParams . Offset ),
413
413
})
414
- return
415
- }
416
- jobByID := map [string ]database.ProvisionerJob {}
417
- for _ , job := range jobs {
418
- jobByID [job .ID .String ()] = job
419
- }
414
+ if errors .Is (err , sql .ErrNoRows ) {
415
+ httpapi .Write (rw , http .StatusOK , apiVersions )
416
+ return err
417
+ }
418
+ if err != nil {
419
+ httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
420
+ Message : fmt .Sprintf ("get template version: %s" , err ),
421
+ })
422
+ return err
423
+ }
420
424
421
- for _ , version := range versions {
422
- job , exists := jobByID [version .JobID .String ()]
423
- if ! exists {
425
+ jobIDs := make ([]uuid.UUID , 0 , len (versions ))
426
+ for _ , version := range versions {
427
+ jobIDs = append (jobIDs , version .JobID )
428
+ }
429
+ jobs , err := store .GetProvisionerJobsByIDs (r .Context (), jobIDs )
430
+ if err != nil {
424
431
httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
425
- Message : fmt .Sprintf ("job %q doesn't exist for version %q " , version . JobID , version . ID ),
432
+ Message : fmt .Sprintf ("get jobs: %s " , err ),
426
433
})
427
- return
434
+ return err
428
435
}
429
- apiVersion = append (apiVersion , convertTemplateVersion (version , convertProvisionerJob (job )))
436
+ jobByID := map [string ]database.ProvisionerJob {}
437
+ for _ , job := range jobs {
438
+ jobByID [job .ID .String ()] = job
439
+ }
440
+
441
+ for _ , version := range versions {
442
+ job , exists := jobByID [version .JobID .String ()]
443
+ if ! exists {
444
+ httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
445
+ Message : fmt .Sprintf ("job %q doesn't exist for version %q" , version .JobID , version .ID ),
446
+ })
447
+ return err
448
+ }
449
+ apiVersions = append (apiVersions , convertTemplateVersion (version , convertProvisionerJob (job )))
450
+ }
451
+
452
+ return nil
453
+ })
454
+ if err != nil {
455
+ return
430
456
}
431
457
432
- httpapi .Write (rw , http .StatusOK , apiVersion )
458
+ httpapi .Write (rw , http .StatusOK , apiVersions )
433
459
}
434
460
435
461
func (api * API ) templateVersionByName (rw http.ResponseWriter , r * http.Request ) {
@@ -582,7 +608,7 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
582
608
}
583
609
}
584
610
585
- provisionerJob , err = api . Database .InsertProvisionerJob (r .Context (), database.InsertProvisionerJobParams {
611
+ provisionerJob , err = db .InsertProvisionerJob (r .Context (), database.InsertProvisionerJobParams {
586
612
ID : jobID ,
587
613
CreatedAt : database .Now (),
588
614
UpdatedAt : database .Now (),
@@ -606,7 +632,7 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
606
632
}
607
633
}
608
634
609
- templateVersion , err = api . Database .InsertTemplateVersion (r .Context (), database.InsertTemplateVersionParams {
635
+ templateVersion , err = db .InsertTemplateVersion (r .Context (), database.InsertTemplateVersionParams {
610
636
ID : uuid .New (),
611
637
TemplateID : templateID ,
612
638
OrganizationID : organization .ID ,
0 commit comments