@@ -640,6 +640,71 @@ func (api *API) templateVersionByOrganizationAndName(rw http.ResponseWriter, r *
640640 httpapi .Write (ctx , rw , http .StatusOK , convertTemplateVersion (templateVersion , convertProvisionerJob (job ), user ))
641641}
642642
643+ func (api * API ) previousTemplateVersionByOrganizationAndName (rw http.ResponseWriter , r * http.Request ) {
644+ ctx := r .Context ()
645+ organization := httpmw .OrganizationParam (r )
646+ templateVersionName := chi .URLParam (r , "templateversionname" )
647+ templateVersion , err := api .Database .GetTemplateVersionByOrganizationAndName (ctx , database.GetTemplateVersionByOrganizationAndNameParams {
648+ OrganizationID : organization .ID ,
649+ Name : templateVersionName ,
650+ })
651+ if err != nil {
652+ if xerrors .Is (err , sql .ErrNoRows ) {
653+ httpapi .Write (ctx , rw , http .StatusNotFound , codersdk.Response {
654+ Message : fmt .Sprintf ("No template version found by name %q." , templateVersionName ),
655+ })
656+ return
657+ }
658+
659+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
660+ Message : "Internal error fetching template version." ,
661+ Detail : err .Error (),
662+ })
663+ return
664+ }
665+
666+ previousTemplateVersion , err := api .Database .GetPreviousTemplateVersion (ctx , database.GetPreviousTemplateVersionParams {
667+ OrganizationID : organization .ID ,
668+ Name : templateVersionName ,
669+ TemplateID : templateVersion .TemplateID ,
670+ })
671+
672+ if err != nil {
673+ if xerrors .Is (err , sql .ErrNoRows ) {
674+ httpapi .Write (ctx , rw , http .StatusNotFound , codersdk.Response {
675+ Message : fmt .Sprintf ("No previous template version found for %q." , templateVersionName ),
676+ })
677+ return
678+ }
679+
680+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
681+ Message : "Internal error fetching the previous template version." ,
682+ Detail : err .Error (),
683+ })
684+ return
685+ }
686+
687+ job , err := api .Database .GetProvisionerJobByID (ctx , previousTemplateVersion .JobID )
688+ if err != nil {
689+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
690+ Message : "Internal error fetching provisioner job." ,
691+ Detail : err .Error (),
692+ })
693+ return
694+ }
695+
696+ user , err := api .Database .GetUserByID (ctx , templateVersion .CreatedBy )
697+ if err != nil {
698+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
699+ Message : "Internal error on fetching user." ,
700+ Detail : err .Error (),
701+ })
702+ return
703+ }
704+
705+ httpapi .Write (ctx , rw , http .StatusOK , convertTemplateVersion (previousTemplateVersion , convertProvisionerJob (job ), user ))
706+ }
707+
643708func (api * API ) patchActiveTemplateVersion (rw http.ResponseWriter , r * http.Request ) {
644709 var (
645710 ctx = r .Context ()
0 commit comments