nolint:revive
(archive bool)
| 1273 | |
| 1274 | //nolint:revive |
| 1275 | func (api *API) setArchiveTemplateVersion(archive bool) func(rw http.ResponseWriter, r *http.Request) { |
| 1276 | return func(rw http.ResponseWriter, r *http.Request) { |
| 1277 | var ( |
| 1278 | ctx = r.Context() |
| 1279 | templateVersion = httpmw.TemplateVersionParam(r) |
| 1280 | auditor = *api.Auditor.Load() |
| 1281 | aReq, commitAudit = audit.InitRequest[database.TemplateVersion](rw, &audit.RequestParams{ |
| 1282 | Audit: auditor, |
| 1283 | Log: api.Logger, |
| 1284 | Request: r, |
| 1285 | Action: database.AuditActionWrite, |
| 1286 | OrganizationID: templateVersion.OrganizationID, |
| 1287 | }) |
| 1288 | ) |
| 1289 | defer commitAudit() |
| 1290 | aReq.Old = templateVersion |
| 1291 | |
| 1292 | verb := "archived" |
| 1293 | if !archive { |
| 1294 | verb = "unarchived" |
| 1295 | } |
| 1296 | if templateVersion.Archived == archive { |
| 1297 | httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{ |
| 1298 | Message: fmt.Sprintf("Template version already %s", verb), |
| 1299 | }) |
| 1300 | return |
| 1301 | } |
| 1302 | |
| 1303 | if !templateVersion.TemplateID.Valid { |
| 1304 | // Maybe we should allow this? |
| 1305 | httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{ |
| 1306 | Message: "Cannot archive template versions not associate with a template.", |
| 1307 | }) |
| 1308 | return |
| 1309 | } |
| 1310 | |
| 1311 | var err error |
| 1312 | if archive { |
| 1313 | archived, archiveError := api.Database.ArchiveUnusedTemplateVersions(ctx, database.ArchiveUnusedTemplateVersionsParams{ |
| 1314 | UpdatedAt: dbtime.Now(), |
| 1315 | TemplateID: templateVersion.TemplateID.UUID, |
| 1316 | TemplateVersionID: templateVersion.ID, |
| 1317 | JobStatus: database.NullProvisionerJobStatus{}, |
| 1318 | }) |
| 1319 | |
| 1320 | if archiveError != nil { |
| 1321 | err = archiveError |
| 1322 | } else if len(archived) == 0 { |
| 1323 | err = xerrors.New("Unable to archive specified version, the version is likely in use by a workspace or currently set to the active version") |
| 1324 | } |
| 1325 | } else { |
| 1326 | err = api.Database.UnarchiveTemplateVersion(ctx, database.UnarchiveTemplateVersionParams{ |
| 1327 | UpdatedAt: dbtime.Now(), |
| 1328 | TemplateVersionID: templateVersion.ID, |
| 1329 | }) |
| 1330 | } |
| 1331 | |
| 1332 | if httpapi.Is404Error(err) { |
no test coverage detected