public async Task <bool> UpdateAsync(int id, [FromBody] SpiderViewObject vo) { if (ModelState.IsValid) { var spider = await _dbContext.Spiders.FirstOrDefaultAsync(x => x.Id == id); if (spider == null) { throw new ApplicationException($"Spider {id} exists"); } try { TriggerBuilder.Create().WithCronSchedule(vo.Cron).Build(); } catch { throw new ApplicationException($"Cron {vo.Cron} is invalid"); } var reSched = spider.Cron != vo.Cron; spider = _mapper.Map(vo, spider); spider.LastModificationTime = DateTimeOffset.Now; _dbContext.Spiders.Update(spider); await _dbContext.SaveChangesAsync(); if (reSched) { var jobId = id.ToString(); var deleted = await _sched.DeleteJob(new JobKey(jobId)); if (!deleted) { throw new ApplicationException("Delete quartz job failed"); } await ScheduleJobAsync(spider.Cron, jobId, spider.Name); } return(true); } else { throw new ApplicationException("ModelState is invalid"); } }
public async Task <bool> CreateAsync(SpiderViewObject vo) { if (ModelState.IsValid) { var exists = await _dbContext.Spiders.AnyAsync(x => x.Name == vo.Name); if (exists) { throw new ApplicationException($"Name {vo.Name} exists"); } try { TriggerBuilder.Create().WithCronSchedule(vo.Cron).Build(); } catch { throw new ApplicationException($"Cron {vo.Cron} is invalid"); } var spider = _mapper.Map <Data.Spider>(vo); spider.Enabled = true; spider.CreationTime = DateTimeOffset.Now; spider.LastModificationTime = DateTimeOffset.Now; await _dbContext.Spiders.AddAsync(spider); await _dbContext.SaveChangesAsync(); var id = spider.Id.ToString(); await ScheduleJobAsync(vo.Cron, id, spider.Name); return(true); } else { throw new ApplicationException("ModelState is invalid"); } }