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;
///
/// 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.).
///
internal sealed class InMemoryCorrelationStore : ICorrelationStore
{
private readonly ConcurrentDictionary _store = new();
public Task 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;
}
}