private void ValidateAddOrUpdateJobCommand(AddOrUpdateJobCommand command) { if (string.IsNullOrWhiteSpace(command.CallAddress)) { throw new InvalidOperationException("callAddress is required"); } if (string.IsNullOrWhiteSpace(command.JobName)) { throw new InvalidOperationException("jobName is required"); } try { JObject.Parse(command.ParamJson); } catch { throw new InvalidOperationException("paramJson is not valid object json string"); } switch (command.JobType) { case JobType.None: throw new InvalidOperationException("invalid jobType"); case JobType.RecurringJob: if (string.IsNullOrWhiteSpace(command.Cron)) { throw new InvalidOperationException("cron is required for recurringJob"); } break; case JobType.FireAndForgetJob: break; case JobType.DelayedJob: if (command.DelayMinutes <= 0) { throw new InvalidOperationException("delayMinutes is required for delayedJob"); } break; case JobType.ContinuationsJob: if (string.IsNullOrWhiteSpace(command.ParentJobId)) { throw new InvalidOperationException("parentJobId is required for continuationsJob"); } break; default: throw new InvalidOperationException("invalid jobType"); } }
public async Task SubmitJobAsync(Job job) { var httpClient = _httpClientFactory.CreateClient(); var url = "http://localhost:10000/api/job/addOrUpdate"; var command = new AddOrUpdateJobCommand { CallAddress = job.CallAddress, Cron = job.Cron, Group = job.Group, JobId = string.Empty, JobName = job.Name, JobType = JobType.RecurringJob, ParamJson = job.ParamJson, Remarks = job.Remarks }; var json = System.Text.Json.JsonSerializer.Serialize(command); var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var result = await httpClient.PostAsync(url, stringContent); }
public async Task <IActionResult> AddOrUpdateAsync([FromBody] AddOrUpdateJobCommand command) { if (string.IsNullOrWhiteSpace(command.ParamJson)) { command.ParamJson = JsonConvert.SerializeObject(new { }); } ValidateAddOrUpdateJobCommand(command); string jobId = string.Empty; switch (command.JobType) { case JobType.RecurringJob: jobId = await _cronJobService.AddOrUpdateRecurringJobAsync(command.JobId, command.JobName, command.CallAddress, command.ParamJson, command.Cron, command.Group, command.Remarks, string.Empty); break; case JobType.FireAndForgetJob: jobId = await _cronJobService.AddFireAndForgetJobAsync(command.JobName, command.CallAddress, command.ParamJson, command.Group, command.Remarks); break; case JobType.DelayedJob: jobId = await _cronJobService.AddDelayedJobAsync(command.JobName, command.CallAddress, command.ParamJson, command.DelayMinutes, command.Group, command.Remarks); break; case JobType.ContinuationsJob: jobId = await _cronJobService.AddContinuationsJobAsync(command.ParentJobId, command.JobName, command.CallAddress, command.ParamJson, command.Group, command.Remarks); break; default: break; } return(Ok(new { jobId })); }