Пример #1
0
        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");
            }
        }
Пример #2
0
        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");
            }
        }