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; } }