using System;
using System.Threading;
using System.Threading.Tasks;
using Svrnty.CQRS.Sagas.Abstractions;
namespace Svrnty.CQRS.Sagas.Builders;
///
/// Builder for configuring local saga steps.
///
/// The saga data type.
public class LocalSagaStepBuilder : ISagaStepBuilder
where TData : class, ISagaData
{
private readonly SagaBuilder _parent;
private readonly LocalSagaStepDefinition _definition;
///
/// Creates a new local step builder.
///
/// The parent saga builder.
/// The step name.
/// The step order.
public LocalSagaStepBuilder(SagaBuilder parent, string name, int order)
{
_parent = parent;
_definition = new LocalSagaStepDefinition
{
Name = name,
Order = order
};
}
///
public ISagaStepBuilder Execute(Func action)
{
_definition.ExecuteAction = action;
return this;
}
///
public ISagaStepBuilder Compensate(Func action)
{
_definition.CompensateAction = action;
return this;
}
///
public ISagaBuilder Then()
{
_parent.AddStep(_definition);
return _parent;
}
}