Header menu logo FCQRS

SagaBuilder Module

Contains types and functions for building and initializing sagas

Types

Type Description

SagaStateWrapper<'UserState, 'TEvent>

Standard wrapper for saga states that includes NotStarted/Started

Functions and values

Function or value Description

createInitialState data

Full Usage: createInitialState data

Parameters:
    data : 'SagaData

Returns: SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>

Creates initial saga state with NotStarted

data : 'SagaData
Returns: SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>

handleStartedState recovering startingEvent originatorFactory

Full Usage: handleStartedState recovering startingEvent originatorFactory

Parameters:
Returns: SagaTransition<'b> * ExecuteCommand list

Standard recovery logic for Started state that all sagas should use Handles the version checking handshake with the originator aggregate

recovering : bool
startingEvent : SagaStartingEvent<Event<'a>> option
originatorFactory : string -> IEntityRef<obj>
Returns: SagaTransition<'b> * ExecuteCommand list

init actorApi sagaData userHandleEvent userApplySideEffects userApply originatorFactory sagaName

Full Usage: init actorApi sagaData userHandleEvent userApplySideEffects userApply originatorFactory sagaName

Parameters:
Returns: EntityFac<obj>

High-level saga initialization that handles all wrapping automatically

actorApi : IActor
sagaData : 'SagaData
userHandleEvent : obj -> SagaState<'SagaData, 'UserState option> -> EventAction<'UserState>
userApplySideEffects : SagaState<'SagaData, 'UserState> -> bool -> SagaTransition<'UserState> * ExecuteCommand list
userApply : SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>> -> SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>
originatorFactory : string -> IEntityRef<obj>
sagaName : string
Returns: EntityFac<obj>

initSimple actorApi sagaData userHandleEvent userApplySideEffects userApply originatorFactory sagaName

Full Usage: initSimple actorApi sagaData userHandleEvent userApplySideEffects userApply originatorFactory sagaName

Parameters:
Returns: EntityFac<obj>

Simplified saga initialization with unwrapped apply function

actorApi : IActor
sagaData : 'SagaData
userHandleEvent : obj -> SagaState<'SagaData, 'UserState option> -> EventAction<'UserState>
userApplySideEffects : SagaState<'SagaData, 'UserState> -> bool -> SagaTransition<'UserState> * ExecuteCommand list
userApply : SagaState<'SagaData, 'UserState> -> SagaState<'SagaData, 'UserState>
originatorFactory : string -> IEntityRef<obj>
sagaName : string
Returns: EntityFac<obj>

wrapApply userApply sagaState

Full Usage: wrapApply userApply sagaState

Parameters:
Returns: SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>

Wraps user's apply function to handle NotStarted/Started automatically

userApply : SagaState<'SagaData, 'UserState> -> SagaState<'SagaData, 'UserState>
sagaState : SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>
Returns: SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>

wrapApplySideEffects userApplySideEffects originatorFactory sagaState startingEvent recovering

Full Usage: wrapApplySideEffects userApplySideEffects originatorFactory sagaState startingEvent recovering

Parameters:
Returns: SagaTransition<SagaStateWrapper<'UserState, 'TEvent>> * ExecuteCommand list

Wraps user's applySideEffects to handle NotStarted/Started automatically

userApplySideEffects : SagaState<'SagaData, 'UserState> -> bool -> SagaTransition<'UserState> * ExecuteCommand list
originatorFactory : string -> IEntityRef<obj>
sagaState : SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>
startingEvent : SagaStartingEvent<Event<'TEvent>> option
recovering : bool
Returns: SagaTransition<SagaStateWrapper<'UserState, 'TEvent>> * ExecuteCommand list

wrapHandleEvent userHandleEvent event sagaState

Full Usage: wrapHandleEvent userHandleEvent event sagaState

Parameters:
Returns: EventAction<SagaStateWrapper<'UserState, 'TEvent>>

Wraps user's handleEvent to skip NotStarted but allow Started states

userHandleEvent : obj -> SagaState<'SagaData, 'UserState option> -> EventAction<'UserState>
event : obj
sagaState : SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>
Returns: EventAction<SagaStateWrapper<'UserState, 'TEvent>>

Type something to start searching.