예제 #1
0
        public async Task AddRecurrentJob(JobDb job)
        {
            var collection = _mongoClientProvider.GetCollection <JobMongoModel>();

            var update = Builders <JobMongoModel> .Update
                         .Set(x => x.Cron, job.Cron)
                         .Set(x => x.StartAt, job.StartAt);

            var needsProperties =
                _jobDbProperties.Where(x => x.Name != nameof(JobMongoModel.Cron) &&
                                       x.Name != nameof(JobMongoModel.StartAt));

            //Если джоб уже существет апдейтем только 2 поля
            //Если нужно создать, то устанавливаем все остальные поля
            foreach (var jobDbProperty in needsProperties)
            {
                update = update.SetOnInsert(jobDbProperty.Name, jobDbProperty.GetValue(job));
            }

            await IMongoCollectionExtensions.UpdateOneAsync(collection, x => x.JobKey == job.JobKey &&
                                                            (x.Status == JobStatus.Executing || x.Status == JobStatus.Ready),
                                                            update,
                                                            new UpdateOptions
            {
                IsUpsert = true
            });
        }