using TakeoutSaaS.Domain.Billings.Entities;
using TakeoutSaaS.Domain.Tenants.Entities;
namespace TakeoutSaaS.Domain.Tenants.Repositories;
///
/// 租户只读仓储(AdminApi 使用)。
///
public interface ITenantRepository
{
///
/// 依据 ID 获取租户。
///
/// 租户 ID(雪花算法)。
/// 取消标记。
/// 租户实体,未找到返回 null。
Task FindByIdAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 批量获取租户。
///
/// 租户 ID 列表。
/// 取消标记。
/// 租户列表(仅返回找到的租户)。
Task> FindByIdsAsync(IReadOnlyCollection tenantIds, CancellationToken cancellationToken = default);
///
/// 获取所有租户列表(用于下拉选择器)。
///
/// 关键字(租户名称/编码)。
/// 取消标记。
/// 租户列表。
Task> GetAllAsync(string? keyword, CancellationToken cancellationToken = default);
///
/// 获取租户详情(包含认证、订阅、套餐信息)。
///
/// 租户 ID。
/// 取消标记。
/// 租户详情元组,未找到返回 null。
Task GetDetailAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 获取租户配额使用情况列表。
///
/// 租户 ID。
/// 取消标记。
/// 配额使用情况列表。
Task> GetQuotaUsagesAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 获取租户账单列表(分页)。
///
/// 租户 ID。
/// 页码(从 1 开始)。
/// 每页条数。
/// 取消标记。
/// 账单列表和总数。
Task<(IReadOnlyList Items, int TotalCount)> GetBillingsAsync(
long tenantId,
int page,
int pageSize,
CancellationToken cancellationToken = default);
}
///
/// 租户详情查询结果。
///
public sealed record TenantDetailResult(
Tenant Tenant,
TenantVerificationProfile? Verification,
TenantSubscription? Subscription,
TenantPackage? Package);