public async Task <IHttpActionResult> CancelJob([FromBody] JobCancellationRequest request) { if (request == null) { return(BadRequest("null request encountered")); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var currentUser = new ReferenceUser(this.User.Identity.GetUserId(), this.User.Identity.GetUserName()) { Name = this.User.Identity.GetUserFullName() }; var job = await repository.GetJob(request.JobId); var result = await repository.CancelJob(job, request.Reason); Task.Factory.StartNew(() => { var activity = new JobActivity(job, JobActivityOperationNames.Cancel, currentUser); activitySubject.OnNext(activity); }); return(Ok(result)); }
public async Task<UpdateResult<Job>> CancelJob(JobCancellationRequest request) { var job = await GetJob(request.JobId); job.State = JobState.CANCELLED; job.CancellationReason = request.Reason ?? request.Reason; var jobTaskToCancel = job.Tasks.LastOrDefault(x => x.State >= JobTaskState.IN_PROGRESS); jobTaskToCancel = jobTaskToCancel ?? job.Tasks.First(); jobTaskToCancel.State = JobTaskState.CANCELLED; var result = await UpdateJob(job); return new UpdateResult<Job>(result.MatchedCount, result.ModifiedCount, job); }