using System.Collections.Concurrent; using System.Linq; using System.Threading.Tasks; using SequenceAuth.Lib; namespace SequenceAuth.Example.Tests; public class InMemorySequenceStore : ISequenceStore { private readonly ConcurrentDictionary _store = new(); public Task> GetSequenceAsync(string sequenceId) { if (_store.TryGetValue(sequenceId, out var data)) { return Task.FromResult(Option.Some(data)); } return Task.FromResult(Option.None()); } public Task SaveSequenceAsync(string sequenceId, SequenceData data) { _store[sequenceId] = data; return Task.FromResult(StoreOutcome.Success); } public Task InvalidateUserSessionsAsync(string userId) { var keysToRemove = _store.Where(kvp => kvp.Value.UserId == userId).Select(kvp => kvp.Key).ToList(); foreach (var key in keysToRemove) { _store.TryRemove(key, out _); } return Task.FromResult(StoreOutcome.Success); } }