public async Task <JobId> Create(QueueId queue, JobAttributes attributes) { var newId = JobId.Generate(); await _collection.InsertOneAsync(new Job { Id = newId, QueueId = queue, Attributes = attributes }).ConfigureAwait(false); return(newId); }
public async Task Complete(QueueId queueId, JobId jobId, JobResult result) { var matchesQueueId = Builders <Job> .Filter.Eq(x => x.QueueId, queueId); var matchesJobId = Builders <Job> .Filter.Eq(x => x.Id, jobId); var matchesJobIdAndQueueId = Builders <Job> .Filter.And(matchesJobId, matchesQueueId); var update = Builders <Job> .Update.Set(x => x.Result, result); await _collection.UpdateOneAsync(matchesJobIdAndQueueId, update).ConfigureAwait(false); }
public async Task AddReport(QueueId queue, JobId id, JobReport report) { var builder = Builders <Job> .Filter; var matchesQueue = builder.Eq(x => x.QueueId, queue); var matchesId = builder.Eq(x => x.Id, id); var hasAcknowledgment = builder.Not(builder.Eq(x => x.Acknowledgment, null)); var matchesQueueAndId = builder.And(matchesId, matchesQueue, hasAcknowledgment); var update = Builders <Job> .Update.Push(x => x.Reports, report); await _jobs.FindOneAndUpdateAsync(matchesQueueAndId, update).ConfigureAwait(false); }
public async Task <AcknowledgmentResult> Ack(QueueId queue, JobId id, JobAcknowledgment acknowledgment) { var builder = Builders <Job> .Filter; var matchesQueue = builder.Eq(x => x.QueueId, queue); var matchesId = builder.Eq(x => x.Id, id); var hasNotBeenAcknowledged = builder.Eq(x => x.Acknowledgment, null); var filter = builder.And(matchesQueue, matchesId, hasNotBeenAcknowledged); var update = Builders <Job> .Update.Set(x => x.Acknowledgment, acknowledgment); var modifiedJob = await _jobs.FindOneAndUpdateAsync(filter, update).ConfigureAwait(false); return(new AcknowledgmentResult { Success = modifiedJob != null }); }