@@ -385,68 +385,77 @@ func (api *API) templateVersionsByTemplate(rw http.ResponseWriter, r *http.Reque
385
385
return
386
386
}
387
387
388
- if paginationParams .AfterID != uuid .Nil {
389
- // See if the record exists first. If the record does not exist, the pagination
390
- // query will not work.
391
- _ , err := api .Database .GetTemplateVersionByID (r .Context (), paginationParams .AfterID )
392
- if err != nil && xerrors .Is (err , sql .ErrNoRows ) {
393
- httpapi .Write (rw , http .StatusBadRequest , httpapi.Response {
394
- Message : fmt .Sprintf ("record at \" after_id\" (%q) does not exists" , paginationParams .AfterID .String ()),
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 := api .Database .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 := api .Database .GetTemplateVersionsByTemplateID (r .Context (), database.GetTemplateVersionsByTemplateIDParams {
409
+ TemplateID : template .ID ,
410
+ AfterID : paginationParams .AfterID ,
411
+ LimitOpt : int32 (paginationParams .Limit ),
412
+ OffsetOpt : int32 (paginationParams .Offset ),
413
+ })
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 ),
395
421
})
396
- return
397
- } else if err != nil {
422
+ return err
423
+ }
424
+
425
+ jobIDs := make ([]uuid.UUID , 0 , len (versions ))
426
+ for _ , version := range versions {
427
+ jobIDs = append (jobIDs , version .JobID )
428
+ }
429
+ jobs , err := api .Database .GetProvisionerJobsByIDs (r .Context (), jobIDs )
430
+ if err != nil {
398
431
httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
399
- Message : fmt .Sprintf ("get template version at after_id : %s" , err ),
432
+ Message : fmt .Sprintf ("get jobs : %s" , err ),
400
433
})
401
- return
434
+ return err
435
+ }
436
+ jobByID := map [string ]database.ProvisionerJob {}
437
+ for _ , job := range jobs {
438
+ jobByID [job .ID .String ()] = job
402
439
}
403
- }
404
440
405
- apiVersion := []codersdk.TemplateVersion {}
406
- versions , err := api .Database .GetTemplateVersionsByTemplateID (r .Context (), database.GetTemplateVersionsByTemplateIDParams {
407
- TemplateID : template .ID ,
408
- AfterID : paginationParams .AfterID ,
409
- LimitOpt : int32 (paginationParams .Limit ),
410
- OffsetOpt : int32 (paginationParams .Offset ),
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
411
453
})
412
- if errors .Is (err , sql .ErrNoRows ) {
413
- httpapi .Write (rw , http .StatusOK , apiVersion )
414
- return
415
- }
416
454
if err != nil {
417
- httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
418
- Message : fmt .Sprintf ("get template version: %s" , err ),
419
- })
420
455
return
421
456
}
422
- jobIDs := make ([]uuid.UUID , 0 , len (versions ))
423
- for _ , version := range versions {
424
- jobIDs = append (jobIDs , version .JobID )
425
- }
426
- jobs , err := api .Database .GetProvisionerJobsByIDs (r .Context (), jobIDs )
427
- if err != nil {
428
- httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
429
- Message : fmt .Sprintf ("get jobs: %s" , err ),
430
- })
431
- return
432
- }
433
- jobByID := map [string ]database.ProvisionerJob {}
434
- for _ , job := range jobs {
435
- jobByID [job .ID .String ()] = job
436
- }
437
-
438
- for _ , version := range versions {
439
- job , exists := jobByID [version .JobID .String ()]
440
- if ! exists {
441
- httpapi .Write (rw , http .StatusInternalServerError , httpapi.Response {
442
- Message : fmt .Sprintf ("job %q doesn't exist for version %q" , version .JobID , version .ID ),
443
- })
444
- return
445
- }
446
- apiVersion = append (apiVersion , convertTemplateVersion (version , convertProvisionerJob (job )))
447
- }
448
457
449
- httpapi .Write (rw , http .StatusOK , apiVersion )
458
+ httpapi .Write (rw , http .StatusOK , apiVersions )
450
459
}
451
460
452
461
func (api * API ) templateVersionByName (rw http.ResponseWriter , r * http.Request ) {
0 commit comments