@Summary Patch template version by ID @ID patch-template-version-by-id @Security CoderSessionToken @Accept json @Produce json @Tags Templates @Param templateversion path string true "Template version ID" format(uuid) @Param request body codersdk.PatchTemplateVersionRequest true "Patch template versi
(rw http.ResponseWriter, r *http.Request)
| 117 | // @Success 200 {object} codersdk.TemplateVersion |
| 118 | // @Router /api/v2/templateversions/{templateversion} [patch] |
| 119 | func (api *API) patchTemplateVersion(rw http.ResponseWriter, r *http.Request) { |
| 120 | ctx := r.Context() |
| 121 | templateVersion := httpmw.TemplateVersionParam(r) |
| 122 | |
| 123 | var params codersdk.PatchTemplateVersionRequest |
| 124 | if !httpapi.Read(ctx, rw, r, ¶ms) { |
| 125 | return |
| 126 | } |
| 127 | |
| 128 | updateParams := database.UpdateTemplateVersionByIDParams{ |
| 129 | ID: templateVersion.ID, |
| 130 | TemplateID: templateVersion.TemplateID, |
| 131 | UpdatedAt: dbtime.Now(), |
| 132 | Name: templateVersion.Name, |
| 133 | Message: templateVersion.Message, |
| 134 | } |
| 135 | |
| 136 | if params.Name != "" { |
| 137 | updateParams.Name = params.Name |
| 138 | } |
| 139 | |
| 140 | if params.Message != nil { |
| 141 | updateParams.Message = *params.Message |
| 142 | } |
| 143 | |
| 144 | errTemplateVersionNameConflict := xerrors.New("template version name must be unique for a template") |
| 145 | |
| 146 | var updatedTemplateVersion database.TemplateVersion |
| 147 | err := api.Database.InTx(func(tx database.Store) error { |
| 148 | if templateVersion.TemplateID.Valid && templateVersion.Name != updateParams.Name { |
| 149 | // User wants to rename the template version |
| 150 | |
| 151 | _, err := tx.GetTemplateVersionByTemplateIDAndName(ctx, database.GetTemplateVersionByTemplateIDAndNameParams{ |
| 152 | TemplateID: templateVersion.TemplateID, |
| 153 | Name: updateParams.Name, |
| 154 | }) |
| 155 | if err != nil && !xerrors.Is(err, sql.ErrNoRows) { |
| 156 | return xerrors.Errorf("error on retrieving conflicting template version: %v", err) |
| 157 | } |
| 158 | if err == nil { |
| 159 | return errTemplateVersionNameConflict |
| 160 | } |
| 161 | } |
| 162 | |
| 163 | // It is not allowed to "patch" the template ID, and reassign it. |
| 164 | var err error |
| 165 | err = tx.UpdateTemplateVersionByID(ctx, updateParams) |
| 166 | if err != nil { |
| 167 | return xerrors.Errorf("error on patching template version: %v", err) |
| 168 | } |
| 169 | |
| 170 | updatedTemplateVersion, err = tx.GetTemplateVersionByID(ctx, updateParams.ID) |
| 171 | if err != nil { |
| 172 | return xerrors.Errorf("error on fetching patched template version: %v", err) |
| 173 | } |
| 174 | |
| 175 | return nil |
| 176 | }, nil) |
no test coverage detected