dotnet-cqrs/Svrnty.CQRS.Events/Storage/InMemoryCorrelationStore.cs

31 lines
1.1 KiB
C#

using System.Collections.Concurrent;
using Svrnty.CQRS.Events.Storage;
using Svrnty.CQRS.Events.Abstractions.Correlation;
using System.Threading;
using System.Threading.Tasks;
using Svrnty.CQRS.Events.Abstractions;
namespace Svrnty.CQRS.Events.Storage;
/// <summary>
/// In-memory implementation of ICorrelationStore.
/// Suitable for development and testing. Data is lost on application restart.
/// For production, implement ICorrelationStore with persistent storage (SQL, Redis, etc.).
/// </summary>
internal sealed class InMemoryCorrelationStore : ICorrelationStore
{
private readonly ConcurrentDictionary<string, string> _store = new();
public Task<string?> GetCorrelationIdAsync(string keyHash, CancellationToken cancellationToken = default)
{
_store.TryGetValue(keyHash, out var correlationId);
return Task.FromResult(correlationId);
}
public Task SetCorrelationIdAsync(string keyHash, string correlationId, CancellationToken cancellationToken = default)
{
_store[keyHash] = correlationId;
return Task.CompletedTask;
}
}