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,17 @@
using TakeoutSaaS.Application.Dictionary.Models;
namespace TakeoutSaaS.Application.Dictionary.Abstractions;
/// <summary>
/// CSV 字典导入解析器。
/// </summary>
public interface ICsvDictionaryParser
{
/// <summary>
/// 解析 CSV 数据。
/// </summary>
/// <param name="stream">输入流。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <returns>解析后的记录列表。</returns>
Task<IReadOnlyList<DictionaryImportRow>> ParseAsync(Stream stream, CancellationToken cancellationToken = default);
}

View File

@@ -0,0 +1,26 @@
using TakeoutSaaS.Domain.Dictionary.Enums;
namespace TakeoutSaaS.Application.Dictionary.Abstractions;
/// <summary>
/// 字典两级缓存访问接口。
/// </summary>
public interface IDictionaryHybridCache
{
/// <summary>
/// 读取缓存,不存在时通过工厂生成并回填。
/// </summary>
Task<T?> GetOrCreateAsync<T>(
string key,
TimeSpan ttl,
Func<CancellationToken, Task<T?>> factory,
CancellationToken cancellationToken = default);
/// <summary>
/// 按前缀失效缓存。
/// </summary>
Task InvalidateAsync(
string prefix,
CacheInvalidationOperation operation = CacheInvalidationOperation.Update,
CancellationToken cancellationToken = default);
}

View File

@@ -0,0 +1,17 @@
using TakeoutSaaS.Application.Dictionary.Models;
namespace TakeoutSaaS.Application.Dictionary.Abstractions;
/// <summary>
/// JSON 字典导入解析器。
/// </summary>
public interface IJsonDictionaryParser
{
/// <summary>
/// 解析 JSON 数据。
/// </summary>
/// <param name="stream">输入流。</param>
/// <param name="cancellationToken">取消标记。</param>
/// <returns>解析后的记录列表。</returns>
Task<IReadOnlyList<DictionaryImportRow>> ParseAsync(Stream stream, CancellationToken cancellationToken = default);
}