feat: 实现字典管理后端

This commit is contained in:
2025-12-30 19:38:13 +08:00
parent a427b0f22a
commit dc9f6136d6
83 changed files with 6901 additions and 50 deletions

View File

@@ -0,0 +1,46 @@
using System.Collections.Concurrent;
using TakeoutSaaS.Application.Dictionary.Abstractions;
using TakeoutSaaS.Domain.Dictionary.Enums;
namespace TakeoutSaaS.Integration.Tests.Fixtures;
public sealed class TestDictionaryHybridCache : IDictionaryHybridCache
{
private readonly ConcurrentDictionary<string, object> _cache = new(StringComparer.OrdinalIgnoreCase);
public async Task<T?> GetOrCreateAsync<T>(
string key,
TimeSpan ttl,
Func<CancellationToken, Task<T?>> factory,
CancellationToken cancellationToken = default)
{
if (_cache.TryGetValue(key, out var cached) && cached is T typed)
{
return typed;
}
var value = await factory(cancellationToken);
if (value is not null)
{
_cache[key] = value;
}
return value;
}
public Task InvalidateAsync(
string prefix,
CacheInvalidationOperation operation = CacheInvalidationOperation.Update,
CancellationToken cancellationToken = default)
{
foreach (var key in _cache.Keys)
{
if (key.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
{
_cache.TryRemove(key, out _);
}
}
return Task.CompletedTask;
}
}