using BuildFlow.Domain.Interfaces; namespace BuildFlow.Rag.Tests.Stub; /// /// Stub IChatMessageCache:内存字典模拟 Redis cache,验证双写一致性。 /// public sealed class StubChatMessageCache : IChatMessageCache { private readonly Dictionary> _store = new(); public Task?> GetMessagesAsync(Guid conversationId, CancellationToken ct = default) { _store.TryGetValue(conversationId, out var list); return Task.FromResult(list); } public Task SetMessagesAsync(Guid conversationId, List messages, CancellationToken ct = default) { _store[conversationId] = messages.ToList(); return Task.CompletedTask; } public Task AppendMessageAsync(Guid conversationId, CachedChatMessage message, CancellationToken ct = default) { if (!_store.TryGetValue(conversationId, out var list)) { list = []; _store[conversationId] = list; } list.Add(message); return Task.CompletedTask; } public Task RemoveAsync(Guid conversationId, CancellationToken ct = default) { _store.Remove(conversationId); return Task.CompletedTask; } /// 测试辅助:获取某会话缓存消息数。 public int Count(Guid conversationId) => _store.TryGetValue(conversationId, out var list) ? list.Count : 0; }