using Quadarax.Foundation.Core.Business.Processor.Enums;
using Quadarax.Foundation.Core.Business.Processor.Queue;
using Quadarax.Foundation.Core.Logging;
using Quadarax.Foundation.Core.Object;
using Quadarax.Foundation.Core.Value.Extensions;
namespace Quadarax.Foundation.Core.Business.Processor.Task
{
internal class TaskItem : ITaskItem
{
#region *** Properties ***
///
///
///
public long Id { get; }
///
///
///
public ProcessQueueTypeEnum QueueType { get; }
///
///
///
public DateTime Created { get; }
///
///
///
public DateTime? Changed { get; }
///
///
///
public IAffinityToken AffinityToken { get; }
///
///
///
public string Reference { get; }
///
///
///
public ProcessStatusEnum Status { get; }
///
///
///
public string ProviderClass { get; }
///
///
///
public byte Priority { get; }
///
///
///
public DateTime ProcessingValidFrom { get; }
///
///
///
public DateTime? ProcessingValidTo { get; }
///
///
///
public int AttemptsLeft { get; }
///
///
///
public TimeSpan? AttemptTimeout { get; }
///
///
///
public DateTime StatStarted { get; }
///
///
///
public DateTime StatFinished { get; }
///
///
///
public TimeSpan StatLastAttemptDuration { get; }
///
///
///
public ITaskStatusLogItem[] StatusLog => _statusLog.ToArray();
public TypedArgument[] Arguments => _arguments.ToArray();
#endregion
#region *** Private Fields ***
private readonly List _statusLog = new();
private readonly List _arguments = new();
private ILog _log;
private ProcessQueue _parent;
#endregion
#region *** Constructors ***
private TaskItem(ProcessQueue parent, long id, ProcessStatusEnum initialStatus, string reference, string source, TypedArgument[] initialArguments, byte priority, int attepts, TimeSpan? attemptTimeout, DateTime validFrom, DateTime? validTo, ITaskStatusLogItem[]? initialStatusLog):
this(parent, reference, source, initialArguments, priority, attepts, attemptTimeout, validFrom, validTo, initialStatusLog)
{
Id = id;
Status = initialStatus;
}
public TaskItem(ProcessQueue parent, string reference, string providerClass, TypedArgument[] initialArguments, byte priority, int attepts, TimeSpan? attemptTimeout, DateTime validFrom, DateTime? validTo, ITaskStatusLogItem[]? initialStatusLog)
{
_parent = parent ?? throw new ArgumentNullException(nameof(parent));
_log = new ConsoleLogger().GetLogger(GetType());
Priority = priority;
Reference = reference;
ProviderClass = providerClass;
Arguments.Setup(initialArguments);
AttemptTimeout = attemptTimeout;
AttemptsLeft = attepts;
ProcessingValidFrom = validFrom;
ProcessingValidTo = validTo;
Created = DateTime.Now;
if (initialStatusLog != null)
_statusLog.Setup(initialStatusLog);
Status = ProcessStatusEnum.Pending;
Id = long.MinValue;
}
#endregion
#region *** Public Operations ***
public void Postpone(TimeSpan postponeInterval, string reason)
{
throw new NotImplementedException();
}
public void Stop(string reason, bool willPause = true, bool willFail = false)
{
throw new NotImplementedException();
}
public void Reset(string reason, TimeSpan postponeValid)
{
throw new NotImplementedException();
}
public void Delete(string reason, bool immediate = false)
{
throw new NotImplementedException();
}
#endregion
}
}