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; } }