using TakeoutSaaS.Domain.Tenants.Entities;
using TakeoutSaaS.Domain.Tenants.Enums;
namespace TakeoutSaaS.Domain.Tenants.Repositories;
///
/// 租户聚合仓储。
///
public interface ITenantRepository
{
///
/// 依据 ID 获取租户。
///
/// 租户 ID(雪花算法)。
/// 取消标记。
/// 租户实体,未找到返回 null。
Task FindByIdAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 按状态与关键词查询租户列表。
///
/// 租户状态,为空不按状态过滤。
/// 名称或编码关键字,为空不按关键字过滤。
/// 取消标记。
/// 符合条件的租户列表。
Task> SearchAsync(
TenantStatus? status,
string? keyword,
CancellationToken cancellationToken = default);
///
/// 新增租户。
///
/// 租户实体。
/// 取消标记。
/// 异步任务。
Task AddTenantAsync(Tenant tenant, CancellationToken cancellationToken = default);
///
/// 更新租户。
///
/// 租户实体。
/// 取消标记。
/// 异步任务。
Task UpdateTenantAsync(Tenant tenant, CancellationToken cancellationToken = default);
///
/// 判断编码是否存在。
///
/// 租户编码。
/// 取消标记。
/// 存在返回 true,否则 false。
Task ExistsByCodeAsync(string code, CancellationToken cancellationToken = default);
///
/// 判断联系人手机号是否存在。
///
/// 联系人手机号。
/// 取消标记。
/// 存在返回 true,否则 false。
Task ExistsByContactPhoneAsync(string phone, CancellationToken cancellationToken = default);
///
/// 获取实名资料。
///
/// 租户 ID(雪花算法)。
/// 取消标记。
/// 实名资料实体,未提交返回 null。
Task GetVerificationProfileAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 新增或更新实名资料。
///
/// 实名资料实体。
/// 取消标记。
/// 异步任务。
Task UpsertVerificationProfileAsync(TenantVerificationProfile profile, CancellationToken cancellationToken = default);
///
/// 获取当前订阅。
///
/// 租户 ID(雪花算法)。
/// 取消标记。
/// 当前有效订阅,若无则 null。
Task GetActiveSubscriptionAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 依据订阅 ID 查询。
///
/// 租户 ID(雪花算法)。
/// 订阅 ID(雪花算法)。
/// 取消标记。
/// 订阅实体,未找到返回 null。
Task FindSubscriptionByIdAsync(long tenantId, long subscriptionId, CancellationToken cancellationToken = default);
///
/// 新增订阅。
///
/// 订阅实体。
/// 取消标记。
/// 异步任务。
Task AddSubscriptionAsync(TenantSubscription subscription, CancellationToken cancellationToken = default);
///
/// 更新订阅。
///
/// 订阅实体。
/// 取消标记。
/// 异步任务。
Task UpdateSubscriptionAsync(TenantSubscription subscription, CancellationToken cancellationToken = default);
///
/// 记录订阅历史。
///
/// 订阅历史实体。
/// 取消标记。
/// 异步任务。
Task AddSubscriptionHistoryAsync(TenantSubscriptionHistory history, CancellationToken cancellationToken = default);
///
/// 获取订阅历史。
///
/// 租户 ID(雪花算法)。
/// 取消标记。
/// 订阅历史列表。
Task> GetSubscriptionHistoryAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 新增审核日志。
///
/// 审核日志实体。
/// 取消标记。
/// 异步任务。
Task AddAuditLogAsync(TenantAuditLog log, CancellationToken cancellationToken = default);
///
/// 查询审核日志。
///
/// 租户 ID(雪花算法)。
/// 取消标记。
/// 审核日志列表。
Task> GetAuditLogsAsync(long tenantId, CancellationToken cancellationToken = default);
///
/// 持久化。
///
/// 取消标记。
/// 异步任务。
Task SaveChangesAsync(CancellationToken cancellationToken = default);
}