feat: 新增租户审核领取和审核日志接口

- 新增 TenantReviewClaim 和 TenantAuditLog 实体
- 新增 TenantAuditAction 枚举
- 新增审核领取相关接口:GET/POST /review/claim, /review/force-claim, /review/release
- 新增审核日志接口:GET /audits
- 更新 ITenantRepository 和 EfTenantRepository
- 更新 TakeoutAppDbContext 添加 DbSet

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
MSuMshk
2026-02-02 20:22:03 +08:00
parent a586407e60
commit 6ffcc09c26
19 changed files with 865 additions and 0 deletions

View File

@@ -69,6 +69,14 @@ public class TakeoutAppDbContext(
/// </summary>
public DbSet<TenantPayment> TenantPayments => Set<TenantPayment>();
/// <summary>
/// 租户审核领取记录。
/// </summary>
public DbSet<TenantReviewClaim> TenantReviewClaims => Set<TenantReviewClaim>();
/// <summary>
/// 租户审核日志。
/// </summary>
public DbSet<TenantAuditLog> TenantAuditLogs => Set<TenantAuditLog>();
/// <summary>
/// 商户实体。
/// </summary>
public DbSet<Merchant> Merchants => Set<Merchant>();

View File

@@ -236,4 +236,54 @@ public sealed class EfTenantRepository(TakeoutAdminDbContext context) : ITenantR
// 1. 保存变更
return context.SaveChangesAsync(cancellationToken);
}
/// <inheritdoc />
public Task<TenantReviewClaim?> GetActiveReviewClaimAsync(long tenantId, CancellationToken cancellationToken = default)
{
// 1. 查询当前有效的审核领取记录(未释放的)
return context.TenantReviewClaims
.Where(c => c.TenantId == tenantId && c.ReleasedAt == null && c.DeletedAt == null)
.OrderByDescending(c => c.ClaimedAt)
.FirstOrDefaultAsync(cancellationToken);
}
/// <inheritdoc />
public async Task AddReviewClaimAsync(TenantReviewClaim claim, CancellationToken cancellationToken = default)
{
// 1. 新增审核领取记录
await context.TenantReviewClaims.AddAsync(claim, cancellationToken);
}
/// <inheritdoc />
public async Task AddAuditLogAsync(TenantAuditLog auditLog, CancellationToken cancellationToken = default)
{
// 1. 新增审核日志
await context.TenantAuditLogs.AddAsync(auditLog, cancellationToken);
}
/// <inheritdoc />
public async Task<(IReadOnlyList<TenantAuditLog> Items, int TotalCount)> GetAuditLogsAsync(
long tenantId,
int page,
int pageSize,
CancellationToken cancellationToken = default)
{
// 1. 构建基础查询
var query = context.TenantAuditLogs
.AsNoTracking()
.Where(a => a.TenantId == tenantId && a.DeletedAt == null);
// 2. 获取总数
var totalCount = await query.CountAsync(cancellationToken);
// 3. 分页查询(按创建时间倒序)
var items = await query
.OrderByDescending(a => a.CreatedAt)
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToListAsync(cancellationToken);
// 4. 返回结果
return (items, totalCount);
}
}