internal static QueueItem FromDto(QueueItemDto queueItem) { return(new QueueItem { Id = queueItem.Id.Value, QueueDefinitionId = queueItem.QueueDefinitionId.Value, ProcessingExceptionReason = queueItem.ProcessingException?.Reason, SpecificContent = queueItem.SpecificContent.DynamicProperties, Output = queueItem.Output?.DynamicProperties, OutputData = queueItem.OutputData, Status = queueItem.Status, ReviewStatus = queueItem.ReviewStatus, Key = queueItem.Key, Reference = queueItem.Reference, ProcessingExceptionType = queueItem.ProcessingExceptionType, DueDate = queueItem.DueDate, Priority = queueItem.Priority, RobotId = queueItem.Robot?.Id, DeferDate = queueItem.DeferDate, StartProcessing = queueItem.StartProcessing, EndProcessing = queueItem.EndProcessing, SecondsInPreviousAttempts = queueItem.SecondsInPreviousAttempts, AncestorId = queueItem.AncestorId, RetryNumber = queueItem.RetryNumber, SpecificData = queueItem.SpecificData, CreationTime = queueItem.CreationTime, Progress = queueItem.Progress, RowVersion = queueItem.RowVersion }); }
/// <summary> /// Post a new entity to EntitySet QueueItems /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='queueItemDto'> /// The entity to post /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async Task <object> PostAsync(this IQueueItems operations, QueueItemDto queueItemDto, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { using (var _result = await operations.PostWithHttpMessagesAsync(queueItemDto, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
public async Task <IActionResult> GetNextQueueItem([FromQuery] int projectId) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } //var projectitem = await _context.Projectitem.Include(e => e.Project).FirstOrDefaultAsync( // d => d.Status == ProjectItemStatus.New); var assignedItemId = 0; while (true) // simple solution for synchronize racing condition { assignedItemId = await _redis.AssignQueueItemToUser( projectId, _accessValidation.GetUserSubId(), _accessValidation.GetUserTeamId()); if (assignedItemId == 0) { return(NoContent()); } else if (assignedItemId == -1) { throw new Exception("Failed to acquire lock, please try again later."); } var dbItem = await _context.Projectitem.FindAsync(assignedItemId); if (dbItem != null && dbItem.Status == ProjectItemStatus.New) { break; } } var pojectInfo = await _redis.GetProjectInfo(projectId); QueueItemDto result = new QueueItemDto { ProjectId = projectId, ProjectName = pojectInfo.ProjectName, TotalProjectItems = pojectInfo.TotalItems, RemainingProjectItems = pojectInfo.RemainingItems, ProjectItemId = assignedItemId, }; return(Ok(result)); }
internal static QueueItem FromDto(QueueItemDto queueItem) => queueItem.To <QueueItem>();
/// <summary> /// Update entity in EntitySet QueueItems /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='id'> /// key: Id /// </param> /// <param name='queueItemDto'> /// The entity to patch /// </param> public static object PatchById(this IQueueItems operations, long id, QueueItemDto queueItemDto) { return(operations.PatchByIdAsync(id, queueItemDto).GetAwaiter().GetResult()); }
/// <summary> /// Post a new entity to EntitySet QueueItems /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='queueItemDto'> /// The entity to post /// </param> public static object Post(this IQueueItems operations, QueueItemDto queueItemDto) { return(operations.PostAsync(queueItemDto).GetAwaiter().GetResult()); }