Example #1
0
        public ISagaModel Build()
        {
            builder.
            Name(nameof(IfElseSagaBuilder)).

            Start <CreateIfElseSagaEvent>().
            TransitionTo <Init>().

            During <Init>().
            When <Test1Event>().
            HandleBy <Test1EventHandler>().
            If(c => c.Data.Condition == 1, b => b.
               Then(c => c.Data.Value1 = new TrueValue())).
            TransitionTo <SecondState>().

            During <Init>().
            When <Test2Event>().
            HandleBy <Test2EventHandler>().
            If(c => c.Data.Condition == 1, b => b.
               Then(c => c.Data.Value1 = new TrueValue())).
            TransitionTo <SecondState>().

            During <Init>().
            When <Test3Event>().
            HandleBy <Test3EventHandler>().
            If(c => c.Data.Condition == 1, b => b.
               Then(c => c.Data.Value1 = new TrueValue())).
            Else(b => b.
                 Then(c => c.Data.Value1 = new FalseValue())).
            TransitionTo <SecondState>();

            return(builder.
                   Build());
        }
        public ISagaModel Build()
        {
            builder.
            Name(nameof(WhileSagaBuilder)).

            Start <CreateWhileSagaEvent>().
            TransitionTo <Init>().

            During <Init>().
            When <Test1Event>().
            HandleBy <Test1EventHandler>().
            While(c => c.Data.Counter > 0, b => b.
                  Then(c => c.Data.Value += 10).
                  Then(c => c.Data.Counter--)).
            TransitionTo <SecondState>().

            During <Init>().
            When <Test2Event>().
            HandleBy <Test2EventHandler>().
            While(c => c.Data.Counter > 0, b => b.
                  Then(c => c.Data.Value += 10).
                  Then(c => c.Data.Counter--)).
            Then(c => c.Data.SecondValue = 1).
            Then(c => throw new System.Exception("!!!"));

            return(builder.
                   Build());
        }
        public ISagaModel Build()
        {
            builder.
            Name(nameof(IfElseIfElseSagaBuilder)).

            Start <CreateIfElseSagaEvent>().
            TransitionTo <Init>().

            During <Init>().
            When <Test4Event>().
            HandleBy <Test4EventHandler>().
            If(c => c.Data.Condition == 1, b => b.
               Then(c => c.Data.Value1 = 1)).
            ElseIf(c => c.Data.Condition == 2, b => b.
                   Then(c => c.Data.Value1 = 2)).
            ElseIf(c => c.Data.Condition == 3, b => b.
                   If(c => c.Data.SubCondition == 0, b => b.
                      Then(c => c.Data.Value1 = 3)).
                   Else(b => b.
                        Then(c => c.Data.Value1 = 33))).
            ElseIf(c => c.Data.Condition == 4, b => b.
                   If(c => c.Data.SubCondition == 1, b => b.
                      Then(c => c.Data.Value1 = 4))).
            ElseIf(c => c.Data.Condition == 5, b => b.
                   Then(c => c.Data.Value1 = 5)).
            Else(b => b.
                 Then(c => c.Data.Value1 = 100));

            return(builder.
                   Build());
        }
        public ISagaModel Build()
        {
            builder.
            Name(nameof(ChildStepsSagaBuilder));

            builder.
            Start <SagaCreateWithDoStepEvent>().
            Do(b => b.
               Then <InnerActivity1>().
               Do(b => b.
                  Then <InnerActivity2>()).
               Then <InnerActivity3>()).
            TransitionTo <Init>();

            builder.
            Start <SagaCreateWithIfStepEvent>().
            Then <InnerActivity1>().
            If <Condition1>(b => b.
                            Then <InnerActivity1>().
                            Then <InnerActivity3>()).
            TransitionTo <Init>();

            return(builder.
                   Build());
        }
Example #5
0
        public ISagaModel Build()
        {
            builder.
            Name(nameof(TransitionsSagaBuilder));

            builder.
            Start <CreateEvent>().
            TransitionTo <Init>();

            builder.
            During <Init>().
            When <InvalidUpdateEvent>().
            TransitionTo <SecondState>().
            Then(ctx => { throw new Exception(); }).
            // RetryBy<InvalidUpdateEvent>().
            Finish();

            return(builder.
                   Build());
        }
Example #6
0
        public ISagaModel Build()
        {
            builder.
            Name(nameof(OrderSagaBuilder));

            builder.
            Start <OrderCreatedEvent, OrderCreatedEventHandler>("OrderCreatedEventStep0").
            Then("OrderCreatedEventStep1", ctx => Task.CompletedTask).
            TransitionTo <StateCreated>();

            builder.
            During <StateCreated>().
            When <OrderCompletedEvent>().
            Then("OrderCompletedEventStep1", ctx => Task.CompletedTask).
            Then <SendEmailToClientEvent>("email").
            Then <SendMessageToTheManagerEvent>("SendMessageToTheManagerEventStep").
            Then <OrderCourierEvent>("OrderCourierEventStep").
            TransitionTo <StateCompleted>();

            builder.
            During <StateCompleted>().
            When <OrderSendEvent>().
            Then("OrderSendEventStep1", ctx => Task.CompletedTask).
            TransitionTo <StateOrderSend>();

            builder.
            During <StateOrderSend>().
            When <DeliveredEvent>().
            Then("DeliveredEventStep1", ctx => Task.CompletedTask).
            Finish();

            builder.
            During <StateCreated>().
            When <ToAlternative1Event>().
            TransitionTo <StateAlternative1>().
            When <ToAlternative2Event>().
            TransitionTo <StateAlternative2>();

            return(builder.
                   Build());
        }
        public ISagaModel Build()
        {
            builder.
            Name(nameof(ResumeSagaBuilder)).

            Settings(b => b.
                     OnResumeDoCurrentStepCompensation().
                     InHistoryStoreOnlyCurrentStep()).

            Start <CreateEvent>().
            TransitionTo <Init>().

            Start <CreateWithBreakEvent>().
            Then(async ctx => { if (ResumeSagaSettings.StopSagaExecution)
                                {
                                    await ctx.Stop();
                                }
                 }).
            TransitionTo <Init>().

            Start <CreateWithErrorEvent>().
            Then(async ctx => { if (ResumeSagaSettings.StopSagaExecution)
                                {
                                    await ctx.Stop();
                                }
                 }).
            Then(async ctx => throw new System.Exception("!!!")).

            During <Init>().
            When <ResumeSagaUpdateEvent>().
            Then(async ctx => { if (ResumeSagaSettings.StopSagaExecution)
                                {
                                    await ctx.Stop();
                                }
                 }).
            TransitionTo <SecondState>();

            return(builder.
                   Build());
        }
        public ISagaModel Build()
        {
            builder.
            Name(nameof(SendTestsBuilder));

            builder.
            Start <SendCreateEvent>().
            TransitionTo <Init>();

            builder.
            Start <SendAlternativeCreateEvent>().
            TransitionTo <AkternativeInit>();

            builder.
            During <Init>().
            When <TestSendActionEvent>().
            Publish <SendAlternativeCreateEvent>((ctx, ev) =>
                                                 ctx.Data.CreatedSagaID = ev.ID = Guid.NewGuid()).
            TransitionTo <AfterInit>();

            return(builder.
                   Build());
        }
Example #9
0
        public ISagaModel Build()
        {
            builder.
            Name(nameof(ResumeSagaBuilder)).

            Settings(b => b.
                     OnResumeDoCurrentStepCompensation().
                     InHistoryStoreOnlyCurrentStep()).

            Start <CreateEvent>().
            TransitionTo <InitState>().

            Start <CreateNewSaga>().
            HandleBy <CreateNewSagaHandler1>().
            HandleBy <CreateNewSagaHandler2>().
            HandleBy <CreateNewSagaHandler3>().
            Then(async ctx => { }).

            /*Then(async ctx => { }).
             * Then(async ctx => { }).
             * Then(async ctx =>
             * {
             *  if (ResumeSagaSettings.StopSagaExecution) await ctx.Stop();
             *  if (ResumeSagaSettings.ThrowError) throw new System.Exception("!!");
             * }).*/
            TransitionTo <SecondState>().

            Start <CreateWithBreakEvent>().
            Then(async ctx => { if (ResumeSagaSettings.StopSagaExecution)
                                {
                                    await ctx.Stop();
                                }
                 }).
            TransitionTo <InitState>().

            Start <CreateWithErrorEvent>().
            Then(async ctx => { if (ResumeSagaSettings.StopSagaExecution)
                                {
                                    await ctx.Stop();
                                }
                 }).
            Then(async ctx => throw new System.Exception("!!!")).

            During <InitState>().
            When <ResumeSagaUpdateEvent>().
            Then(async ctx => { if (ResumeSagaSettings.StopSagaExecution)
                                {
                                    await ctx.Stop();
                                }
                 }).
            TransitionTo <SecondState>().
            When <CreateNewSagaEvent>().
            Publish <CreateNewSaga>((data, @event) =>
            {
                @event.ID = (data.ExecutionState.CurrentEvent as CreateNewSagaEvent).NewID;
            }).
            Then(async ctx =>
            {
                if (ResumeSagaSettings.StopSagaExecution)
                {
                    await ctx.Stop();
                }
            }).
            TransitionTo <SecondState>();

            return(builder.
                   Build());
        }
Example #10
0
        public ISagaModel Build()
        {
            builder.
            Name(nameof(InvalidSagaBuilder));

            builder.
            Start <InvalidCreatedEvent, InvalidCreatedEventHandler>().
            ThenAsync(
                "InvalidCreatedEvent1",
                ctx => Task.CompletedTask,
                ctx => Task.CompletedTask).
            Then(
                "InvalidCreatedEvent2",
                ctx => throw new TestSagaException("error"),
                ctx => Task.CompletedTask).
            Finish();

            builder.
            Start <ValidCreatedEvent, ValidCreatedEventHandler>().
            TransitionTo <StateCreated>();

            builder.
            During <StateCreated>().
            When <InvalidUpdateEvent>().
            ThenAsync(
                "InvalidUpdateEvent1",
                ctx => Task.CompletedTask,
                ctx => Task.CompletedTask).
            Then(
                "InvalidUpdateEvent2",
                ctx => Task.CompletedTask,
                ctx => Task.CompletedTask).
            Then(
                "InvalidUpdateEvent3",
                ctx => throw new TestSagaException("error"),
                ctx => Task.CompletedTask).
            Finish();

            builder.
            During <StateCreated>().
            When <InvalidCompensationEvent>().
            ThenAsync(
                "InvalidCompensationEventStep1",
                ctx => Task.CompletedTask,
                ctx => Task.CompletedTask).
            Then(
                "InvalidCompensationEventStep2",
                ctx => Task.CompletedTask,
                ctx => Task.CompletedTask).
            Then(
                "InvalidCompensationEventStep3",
                ctx => throw new TestSagaException("error"),
                ctx => throw new TestCompensationException("compensation error")).
            Finish();

            builder.
            During <StateCreated>().
            When <ValidUpdateEvent>().
            TransitionTo <StateUpdated>();

            return(builder.
                   Build());
        }