86 lines
2.2 KiB
C#
86 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Svrnty.CQRS.Sagas.Abstractions;
|
|
|
|
/// <summary>
|
|
/// Represents the persistent state of a saga instance.
|
|
/// </summary>
|
|
public class SagaState
|
|
{
|
|
/// <summary>
|
|
/// Unique identifier for this saga instance.
|
|
/// </summary>
|
|
public Guid SagaId { get; set; } = Guid.NewGuid();
|
|
|
|
/// <summary>
|
|
/// The fully qualified type name of the saga.
|
|
/// </summary>
|
|
public string SagaType { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Correlation ID for tracing across services.
|
|
/// </summary>
|
|
public Guid CorrelationId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Current execution status.
|
|
/// </summary>
|
|
public SagaStatus Status { get; set; } = SagaStatus.NotStarted;
|
|
|
|
/// <summary>
|
|
/// Index of the current step being executed.
|
|
/// </summary>
|
|
public int CurrentStepIndex { get; set; }
|
|
|
|
/// <summary>
|
|
/// Name of the current step being executed.
|
|
/// </summary>
|
|
public string? CurrentStepName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Results from completed steps, keyed by step name.
|
|
/// </summary>
|
|
public Dictionary<string, object?> StepResults { get; set; } = new();
|
|
|
|
/// <summary>
|
|
/// Names of steps that have been completed.
|
|
/// </summary>
|
|
public List<string> CompletedSteps { get; set; } = new();
|
|
|
|
/// <summary>
|
|
/// Errors that occurred during saga execution.
|
|
/// </summary>
|
|
public List<SagaStepError> Errors { get; set; } = new();
|
|
|
|
/// <summary>
|
|
/// Serialized saga data (JSON).
|
|
/// </summary>
|
|
public string? SerializedData { get; set; }
|
|
|
|
/// <summary>
|
|
/// When the saga was created.
|
|
/// </summary>
|
|
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
|
|
|
|
/// <summary>
|
|
/// When the saga was last updated.
|
|
/// </summary>
|
|
public DateTimeOffset? UpdatedAt { get; set; }
|
|
|
|
/// <summary>
|
|
/// When the saga completed (successfully or compensated).
|
|
/// </summary>
|
|
public DateTimeOffset? CompletedAt { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Represents an error that occurred during saga step execution.
|
|
/// </summary>
|
|
public record SagaStepError(
|
|
string StepName,
|
|
string ErrorMessage,
|
|
string? StackTrace,
|
|
DateTimeOffset OccurredAt
|
|
);
|