@@ -596,56 +596,58 @@ func (api *API) patchCancelWorkspaceBuild(rw http.ResponseWriter, r *http.Reques
596
596
return
597
597
}
598
598
599
+ code := http .StatusOK
600
+ resp := codersdk.Response {}
599
601
err = api .Database .InTx (func (store database.Store ) error {
600
- valid , err := api . verifyUserCanCancelWorkspaceBuilds (ctx , store , httpmw .APIKey (r ).UserID , workspace .TemplateID )
602
+ valid , err := verifyUserCanCancelWorkspaceBuilds (ctx , store , httpmw .APIKey (r ).UserID , workspace .TemplateID )
601
603
if err != nil {
602
- httpapi . Write ( ctx , rw , http .StatusInternalServerError , codersdk. Response {
603
- Message : "Internal error verifying permission to cancel workspace build." ,
604
- Detail : err .Error (),
605
- })
606
- return nil
604
+ code = http .StatusInternalServerError
605
+ resp . Message = "Internal error verifying permission to cancel workspace build."
606
+ resp . Detail = err .Error ()
607
+
608
+ return xerrors . Errorf ( "verify user can cancel workspace builds: %w" , err )
607
609
}
608
610
if ! valid {
609
- httpapi . Write ( ctx , rw , http .StatusForbidden , codersdk. Response {
610
- Message : "User is not allowed to cancel workspace builds. Owner role is required." ,
611
- })
612
- return nil
611
+ code = http .StatusForbidden
612
+ resp . Message = "User is not allowed to cancel workspace builds. Owner role is required."
613
+
614
+ return xerrors . Errorf ( "user is not allowed to cancel workspace builds" )
613
615
}
614
616
615
617
job , err := store .GetProvisionerJobByID (ctx , workspaceBuild .JobID )
616
618
if err != nil {
617
- httpapi . Write ( ctx , rw , http .StatusInternalServerError , codersdk. Response {
618
- Message : "Internal error fetching provisioner job." ,
619
- Detail : err .Error (),
620
- })
621
- return nil
619
+ code = http .StatusInternalServerError
620
+ resp . Message = "Internal error fetching provisioner job."
621
+ resp . Detail = err .Error ()
622
+
623
+ return xerrors . Errorf ( "get provisioner job: %w" , err )
622
624
}
623
625
if job .CompletedAt .Valid {
624
- httpapi . Write ( ctx , rw , http .StatusBadRequest , codersdk. Response {
625
- Message : "Job has already completed!" ,
626
- })
627
- return nil
626
+ code = http .StatusBadRequest
627
+ resp . Message = "Job has already completed!"
628
+
629
+ return xerrors . Errorf ( "job has already completed" )
628
630
}
629
631
if job .CanceledAt .Valid {
630
- httpapi . Write ( ctx , rw , http .StatusBadRequest , codersdk. Response {
631
- Message : "Job has already been marked as canceled!" ,
632
- })
633
- return nil
632
+ code = http .StatusBadRequest
633
+ resp . Message = "Job has already been marked as canceled!"
634
+
635
+ return xerrors . Errorf ( "job has already been marked as canceled" )
634
636
}
635
637
636
638
if expectStatus != "" {
637
639
if expectStatus != "running" && expectStatus != "pending" {
638
- httpapi . Write ( ctx , rw , http .StatusBadRequest , codersdk. Response {
639
- Message : "Invalid expect_status. Only 'running' or 'pending' are allowed." ,
640
- })
641
- return nil
640
+ code = http .StatusBadRequest
641
+ resp . Message = "Invalid expect_status. Only 'running' or 'pending' are allowed."
642
+
643
+ return xerrors . Errorf ( "invalid expect_status" )
642
644
}
643
645
644
646
if job .JobStatus != database .ProvisionerJobStatus (expectStatus ) {
645
- httpapi . Write ( ctx , rw , http .StatusPreconditionFailed , codersdk. Response {
646
- Message : "Job is not in the expected state." ,
647
- })
648
- return nil
647
+ code = http .StatusPreconditionFailed
648
+ resp . Message = "Job is not in the expected state."
649
+
650
+ return xerrors . Errorf ( "job is not in the expected state" )
649
651
}
650
652
}
651
653
@@ -662,20 +664,17 @@ func (api *API) patchCancelWorkspaceBuild(rw http.ResponseWriter, r *http.Reques
662
664
},
663
665
})
664
666
if err != nil {
665
- httpapi . Write ( ctx , rw , http .StatusInternalServerError , codersdk. Response {
666
- Message : "Internal error updating provisioner job." ,
667
- Detail : err .Error (),
668
- })
669
- return nil
667
+ code = http .StatusInternalServerError
668
+ resp . Message = "Internal error updating provisioner job."
669
+ resp . Detail = err .Error ()
670
+
671
+ return xerrors . Errorf ( "update provisioner job: %w" , err )
670
672
}
671
673
672
674
return nil
673
675
}, nil )
674
676
if err != nil {
675
- httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
676
- Message : "Internal error updating provisioner job." ,
677
- Detail : err .Error (),
678
- })
677
+ httpapi .Write (ctx , rw , code , resp )
679
678
return
680
679
}
681
680
@@ -689,7 +688,7 @@ func (api *API) patchCancelWorkspaceBuild(rw http.ResponseWriter, r *http.Reques
689
688
})
690
689
}
691
690
692
- func ( * API ) verifyUserCanCancelWorkspaceBuilds (ctx context.Context , store database.Store , userID uuid.UUID , templateID uuid.UUID ) (bool , error ) {
691
+ func verifyUserCanCancelWorkspaceBuilds (ctx context.Context , store database.Store , userID uuid.UUID , templateID uuid.UUID ) (bool , error ) {
693
692
template , err := store .GetTemplateByID (ctx , templateID )
694
693
if err != nil {
695
694
return false , xerrors .New ("no template exists for this workspace" )
0 commit comments