@Summary Pause task @ID pause-task @Security CoderSessionToken @Produce json @Tags Tasks @Param user path string true "Username, user ID, or 'me' for the authenticated user" @Param task path string true "Task ID" format(uuid) @Success 202 {object} codersdk.PauseTaskResponse @Router /api/v2/tasks/{us
(rw http.ResponseWriter, r *http.Request)
| 1261 | // @Success 202 {object} codersdk.PauseTaskResponse |
| 1262 | // @Router /api/v2/tasks/{user}/{task}/pause [post] |
| 1263 | func (api *API) pauseTask(rw http.ResponseWriter, r *http.Request) { |
| 1264 | var ( |
| 1265 | ctx = r.Context() |
| 1266 | apiKey = httpmw.APIKey(r) |
| 1267 | task = httpmw.TaskParam(r) |
| 1268 | ) |
| 1269 | |
| 1270 | if !task.WorkspaceID.Valid { |
| 1271 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 1272 | Message: "Task does not have a workspace.", |
| 1273 | }) |
| 1274 | return |
| 1275 | } |
| 1276 | |
| 1277 | workspace, err := api.Database.GetWorkspaceByID(ctx, task.WorkspaceID.UUID) |
| 1278 | if err != nil { |
| 1279 | if httpapi.Is404Error(err) { |
| 1280 | httpapi.ResourceNotFound(rw) |
| 1281 | return |
| 1282 | } |
| 1283 | httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ |
| 1284 | Message: "Internal error fetching task workspace.", |
| 1285 | Detail: err.Error(), |
| 1286 | }) |
| 1287 | return |
| 1288 | } |
| 1289 | |
| 1290 | buildReq := codersdk.CreateWorkspaceBuildRequest{ |
| 1291 | Transition: codersdk.WorkspaceTransitionStop, |
| 1292 | Reason: codersdk.CreateWorkspaceBuildReasonTaskManualPause, |
| 1293 | } |
| 1294 | build, err := api.postWorkspaceBuildsInternal( |
| 1295 | ctx, |
| 1296 | apiKey, |
| 1297 | workspace, |
| 1298 | buildReq, |
| 1299 | func(action policy.Action, object rbac.Objecter) bool { |
| 1300 | return api.Authorize(r, action, object) |
| 1301 | }, |
| 1302 | audit.WorkspaceBuildBaggageFromRequest(r), |
| 1303 | ) |
| 1304 | if err != nil { |
| 1305 | httperror.WriteWorkspaceBuildError(ctx, rw, err) |
| 1306 | return |
| 1307 | } |
| 1308 | |
| 1309 | if _, err := api.NotificationsEnqueuer.Enqueue( |
| 1310 | // nolint:gocritic // Need notifier actor to enqueue notifications. |
| 1311 | dbauthz.AsNotifier(ctx), |
| 1312 | workspace.OwnerID, |
| 1313 | notifications.TemplateTaskPaused, |
| 1314 | map[string]string{ |
| 1315 | "task": task.Name, |
| 1316 | "task_id": task.ID.String(), |
| 1317 | "workspace": workspace.Name, |
| 1318 | "pause_reason": "manual", |
| 1319 | }, |
| 1320 | "api-task-pause", |
no test coverage detected