57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Svrnty.CQRS.Sagas.Abstractions;
|
|
|
|
namespace Svrnty.CQRS.Sagas;
|
|
|
|
/// <summary>
|
|
/// Implementation of saga context providing runtime information during step execution.
|
|
/// </summary>
|
|
public class SagaContext : ISagaContext
|
|
{
|
|
private readonly SagaState _state;
|
|
|
|
/// <summary>
|
|
/// Creates a new saga context from a saga state.
|
|
/// </summary>
|
|
/// <param name="state">The saga state.</param>
|
|
public SagaContext(SagaState state)
|
|
{
|
|
_state = state ?? throw new ArgumentNullException(nameof(state));
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public Guid SagaId => _state.SagaId;
|
|
|
|
/// <inheritdoc />
|
|
public Guid CorrelationId => _state.CorrelationId;
|
|
|
|
/// <inheritdoc />
|
|
public string SagaType => _state.SagaType;
|
|
|
|
/// <inheritdoc />
|
|
public int CurrentStepIndex => _state.CurrentStepIndex;
|
|
|
|
/// <inheritdoc />
|
|
public string CurrentStepName => _state.CurrentStepName ?? string.Empty;
|
|
|
|
/// <inheritdoc />
|
|
public IReadOnlyDictionary<string, object?> StepResults => _state.StepResults;
|
|
|
|
/// <inheritdoc />
|
|
public T? GetStepResult<T>(string stepName)
|
|
{
|
|
if (_state.StepResults.TryGetValue(stepName, out var value) && value is T result)
|
|
{
|
|
return result;
|
|
}
|
|
return default;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void SetStepResult<T>(T result)
|
|
{
|
|
_state.StepResults[CurrentStepName] = result;
|
|
}
|
|
}
|