using TakeoutSaaS.Domain.Dictionary.Entities;
using TakeoutSaaS.Domain.Dictionary.Enums;
namespace TakeoutSaaS.Domain.Dictionary.Repositories;
///
/// 参数字典仓储契约。
///
public interface IDictionaryRepository
{
///
/// 依据 ID 获取分组。
///
/// 分组 ID。
/// 取消标记。
/// 分组实体或 null。
Task FindGroupByIdAsync(long id, CancellationToken cancellationToken = default);
///
/// 依据编码获取分组。
///
/// 分组编码。
/// 取消标记。
/// 分组实体或 null。
Task FindGroupByCodeAsync(string code, CancellationToken cancellationToken = default);
///
/// 搜索分组,可按作用域过滤。
///
/// 作用域。
/// 取消标记。
/// 分组集合。
Task> SearchGroupsAsync(DictionaryScope? scope, CancellationToken cancellationToken = default);
///
/// 新增分组。
///
/// 分组实体。
/// 取消标记。
/// 异步任务。
Task AddGroupAsync(DictionaryGroup group, CancellationToken cancellationToken = default);
///
/// 删除分组。
///
/// 分组实体。
/// 取消标记。
/// 异步任务。
Task RemoveGroupAsync(DictionaryGroup group, CancellationToken cancellationToken = default);
///
/// 依据 ID 获取字典项。
///
/// 字典项 ID。
/// 取消标记。
/// 字典项或 null。
Task FindItemByIdAsync(long id, CancellationToken cancellationToken = default);
///
/// 获取某分组下的所有字典项。
///
/// 分组 ID。
/// 取消标记。
/// 字典项集合。
Task> GetItemsByGroupIdAsync(long groupId, CancellationToken cancellationToken = default);
///
/// 按分组编码集合获取字典项(可包含系统参数)。
///
/// 分组编码集合。
/// 租户 ID。
/// 是否包含系统分组。
/// 取消标记。
/// 字典项集合。
Task> GetItemsByCodesAsync(IEnumerable codes, long tenantId, bool includeSystem, CancellationToken cancellationToken = default);
///
/// 新增字典项。
///
/// 字典项实体。
/// 取消标记。
/// 异步任务。
Task AddItemAsync(DictionaryItem item, CancellationToken cancellationToken = default);
///
/// 删除字典项。
///
/// 字典项实体。
/// 取消标记。
/// 异步任务。
Task RemoveItemAsync(DictionaryItem item, CancellationToken cancellationToken = default);
///
/// 持久化更改。
///
/// 取消标记。
/// 异步任务。
Task SaveChangesAsync(CancellationToken cancellationToken = default);
}