31 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|