Beispiel #1
0
 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);
     }
 }
Beispiel #3
0
        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));
        }
Beispiel #4
0
 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());
 }