- 新增 AdminRolesController 实现角色 CRUD 和权限管理 - 新增 BillingsController 实现账单查询功能 - 新增 SubscriptionsController 实现订阅管理功能 - 新增 TenantPackagesController 实现套餐管理功能 - 新增租户详情、配额使用、账单列表等查询功能 - 新增 TenantPackage、TenantSubscription 等领域实体 - 新增相关枚举:SubscriptionStatus、TenantPackageType 等 - 更新 appsettings 配置文件 - 更新权限授权策略提供者 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
74 lines
2.9 KiB
C#
74 lines
2.9 KiB
C#
using TakeoutSaaS.Domain.Billings.Entities;
|
||
using TakeoutSaaS.Domain.Tenants.Entities;
|
||
|
||
namespace TakeoutSaaS.Domain.Tenants.Repositories;
|
||
|
||
/// <summary>
|
||
/// 租户只读仓储(AdminApi 使用)。
|
||
/// </summary>
|
||
public interface ITenantRepository
|
||
{
|
||
/// <summary>
|
||
/// 依据 ID 获取租户。
|
||
/// </summary>
|
||
/// <param name="tenantId">租户 ID(雪花算法)。</param>
|
||
/// <param name="cancellationToken">取消标记。</param>
|
||
/// <returns>租户实体,未找到返回 null。</returns>
|
||
Task<Tenant?> FindByIdAsync(long tenantId, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// 批量获取租户。
|
||
/// </summary>
|
||
/// <param name="tenantIds">租户 ID 列表。</param>
|
||
/// <param name="cancellationToken">取消标记。</param>
|
||
/// <returns>租户列表(仅返回找到的租户)。</returns>
|
||
Task<IReadOnlyList<Tenant>> FindByIdsAsync(IReadOnlyCollection<long> tenantIds, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// 获取所有租户列表(用于下拉选择器)。
|
||
/// </summary>
|
||
/// <param name="keyword">关键字(租户名称/编码)。</param>
|
||
/// <param name="cancellationToken">取消标记。</param>
|
||
/// <returns>租户列表。</returns>
|
||
Task<IReadOnlyList<Tenant>> GetAllAsync(string? keyword, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// 获取租户详情(包含认证、订阅、套餐信息)。
|
||
/// </summary>
|
||
/// <param name="tenantId">租户 ID。</param>
|
||
/// <param name="cancellationToken">取消标记。</param>
|
||
/// <returns>租户详情元组,未找到返回 null。</returns>
|
||
Task<TenantDetailResult?> GetDetailAsync(long tenantId, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// 获取租户配额使用情况列表。
|
||
/// </summary>
|
||
/// <param name="tenantId">租户 ID。</param>
|
||
/// <param name="cancellationToken">取消标记。</param>
|
||
/// <returns>配额使用情况列表。</returns>
|
||
Task<IReadOnlyList<TenantQuotaUsage>> GetQuotaUsagesAsync(long tenantId, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// 获取租户账单列表(分页)。
|
||
/// </summary>
|
||
/// <param name="tenantId">租户 ID。</param>
|
||
/// <param name="page">页码(从 1 开始)。</param>
|
||
/// <param name="pageSize">每页条数。</param>
|
||
/// <param name="cancellationToken">取消标记。</param>
|
||
/// <returns>账单列表和总数。</returns>
|
||
Task<(IReadOnlyList<TenantBillingStatement> Items, int TotalCount)> GetBillingsAsync(
|
||
long tenantId,
|
||
int page,
|
||
int pageSize,
|
||
CancellationToken cancellationToken = default);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 租户详情查询结果。
|
||
/// </summary>
|
||
public sealed record TenantDetailResult(
|
||
Tenant Tenant,
|
||
TenantVerificationProfile? Verification,
|
||
TenantSubscription? Subscription,
|
||
TenantPackage? Package);
|