using TakeoutSaaS.Domain.Dictionary.Entities;
using TakeoutSaaS.Domain.Dictionary.Enums;
using TakeoutSaaS.Domain.Dictionary.ValueObjects;
namespace TakeoutSaaS.Domain.Dictionary.Repositories;
///
/// 字典分组仓储契约。
///
public interface IDictionaryGroupRepository
{
///
/// 按 ID 获取字典分组。
///
/// 分组 ID。
/// 取消标记。
/// 分组实体或 null。
Task GetByIdAsync(long groupId, CancellationToken cancellationToken = default);
///
/// 按编码获取字典分组。
///
/// 租户 ID。
/// 分组编码。
/// 取消标记。
/// 分组实体或 null。
Task GetByCodeAsync(long tenantId, DictionaryCode code, CancellationToken cancellationToken = default);
///
/// 分页获取字典分组。
///
/// 租户 ID。
/// 作用域过滤。
/// 关键字过滤。
/// 启用状态过滤。
/// 页码。
/// 页大小。
/// 排序字段。
/// 是否降序。
/// 取消标记。
/// 分组集合。
Task> GetPagedAsync(
long tenantId,
DictionaryScope? scope,
string? keyword,
bool? isEnabled,
int page,
int pageSize,
string? sortBy,
bool sortDescending,
CancellationToken cancellationToken = default);
///
/// 获取满足条件的分组数量。
///
/// 租户 ID。
/// 作用域过滤。
/// 关键字过滤。
/// 启用状态过滤。
/// 取消标记。
/// 分组数量。
Task CountAsync(
long tenantId,
DictionaryScope? scope,
string? keyword,
bool? isEnabled,
CancellationToken cancellationToken = default);
///
/// 批量获取字典分组。
///
/// 分组 ID 列表。
/// 取消标记。
/// 分组集合。
Task> GetByIdsAsync(IEnumerable groupIds, CancellationToken cancellationToken = default);
///
/// 新增分组。
///
/// 分组实体。
/// 取消标记。
Task AddAsync(DictionaryGroup group, CancellationToken cancellationToken = default);
///
/// 更新分组。
///
/// 分组实体。
/// 取消标记。
Task UpdateAsync(DictionaryGroup group, CancellationToken cancellationToken = default);
///
/// 删除分组。
///
/// 分组实体。
/// 取消标记。
Task RemoveAsync(DictionaryGroup group, CancellationToken cancellationToken = default);
///
/// 持久化更改。
///
/// 取消标记。
/// 异步任务。
Task SaveChangesAsync(CancellationToken cancellationToken = default);
}