Header menu logo FCQRS

SagaRecovery Module

Helper module to eliminate boilerplate saga recovery logic

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: Effect * 'b option * 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: Effect * 'b option * ExecuteCommand list

initSaga actorApi env sagaData userHandleEvent userApplySideEffects userApply originatorFactory sagaName

Full Usage: initSaga actorApi env sagaData userHandleEvent userApplySideEffects userApply originatorFactory sagaName

Parameters:
Returns: EntityFac<obj>

High-level saga initialization that handles all wrapping automatically

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

wrapApplySideEffects userApplySideEffects originatorFactory sagaState startingEvent recovering

Full Usage: wrapApplySideEffects userApplySideEffects originatorFactory sagaState startingEvent recovering

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

Wraps user's applySideEffects to handle NotStarted/Started automatically

userApplySideEffects : 'UserState -> bool -> Effect * 'UserState option * ExecuteCommand list
originatorFactory : string -> IEntityRef<obj>
sagaState : SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>
startingEvent : SagaStartingEvent<Event<'TEvent>> option
recovering : bool
Returns: Effect * SagaStateWrapper<'UserState, 'TEvent> option * 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 -> 'UserState option -> EventAction<'UserState>
event : obj
sagaState : SagaState<'SagaData, SagaStateWrapper<'UserState, 'TEvent>>
Returns: EventAction<SagaStateWrapper<'UserState, 'TEvent>>

Type something to start searching.