feat(admin-api): 实现 TD-001 和 TD-002 后端接口

TD-001 - PUT /api/admin/v1/tenants/{tenantId}:
- 新增 UpdateTenantCommand + UpdateTenantCommandHandler
- Controller 新增 Update 端点(tenant:update 权限)
- 校验:租户存在、name 非空、name/contactPhone 冲突返回 409
- 仓储扩展:ITenantRepository.ExistsByNameAsync

TD-002 - GET /api/admin/v1/tenants/{tenantId}/quota-usage-history:
- 新增 CQRS Query/Handler/DTO/Validator
- 支持分页(Page>=1, PageSize 1~100)
- 支持时间范围和 QuotaType 过滤
- 新增 tenant_quota_usage_histories 表(含迁移)
- 写入点:CheckTenantQuotaCommandHandler + PurchaseQuotaPackageCommandHandler

构建验证:dotnet build 通过
数据库迁移:已应用 20251218121053_AddTenantQuotaUsageHistories
This commit is contained in:
2025-12-18 20:19:33 +08:00
parent 40e914dc92
commit 907c9938ae
20 changed files with 8072 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;
namespace TakeoutSaaS.Domain.Tenants.Entities;
/// <summary>
/// 租户配额使用历史记录(用于追踪配额上下限与使用量的时间序列变化)。
/// </summary>
public sealed class TenantQuotaUsageHistory : MultiTenantEntityBase
{
/// <summary>
/// 配额类型。
/// </summary>
public TenantQuotaType QuotaType { get; set; }
/// <summary>
/// 已使用值(记录时刻的快照)。
/// </summary>
public decimal UsedValue { get; set; }
/// <summary>
/// 限额值(记录时刻的快照)。
/// </summary>
public decimal LimitValue { get; set; }
/// <summary>
/// 记录时间UTC
/// </summary>
public DateTime RecordedAt { get; set; }
/// <summary>
/// 变更类型。
/// </summary>
public TenantQuotaUsageHistoryChangeType ChangeType { get; set; } = TenantQuotaUsageHistoryChangeType.Snapshot;
/// <summary>
/// 变更量(可选)。
/// </summary>
public decimal? ChangeAmount { get; set; }
/// <summary>
/// 变更原因(可选)。
/// </summary>
public string? ChangeReason { get; set; }
}