using Microsoft.EntityFrameworkCore; using TakeoutSaaS.Domain.Tenants.Entities; using TakeoutSaaS.Domain.Tenants.Enums; using TakeoutSaaS.Domain.Tenants.Repositories; using TakeoutSaaS.Infrastructure.App.Persistence; namespace TakeoutSaaS.Infrastructure.App.Repositories; /// /// EF 租户账单仓储。 /// public sealed class EfTenantBillingRepository(TakeoutAppDbContext context) : ITenantBillingRepository { /// public Task> SearchAsync( long tenantId, TenantBillingStatus? status, DateTime? from, DateTime? to, CancellationToken cancellationToken = default) { var query = context.TenantBillingStatements.AsNoTracking() .Where(x => x.TenantId == tenantId); if (status.HasValue) { query = query.Where(x => x.Status == status.Value); } if (from.HasValue) { query = query.Where(x => x.PeriodStart >= from.Value); } if (to.HasValue) { query = query.Where(x => x.PeriodEnd <= to.Value); } return query .OrderByDescending(x => x.PeriodEnd) .ToListAsync(cancellationToken) .ContinueWith(t => (IReadOnlyList)t.Result, cancellationToken); } /// public Task FindByIdAsync(long tenantId, long billingId, CancellationToken cancellationToken = default) { return context.TenantBillingStatements.AsNoTracking() .FirstOrDefaultAsync(x => x.TenantId == tenantId && x.Id == billingId, cancellationToken); } /// public Task FindByStatementNoAsync(long tenantId, string statementNo, CancellationToken cancellationToken = default) { return context.TenantBillingStatements.AsNoTracking() .FirstOrDefaultAsync(x => x.TenantId == tenantId && x.StatementNo == statementNo, cancellationToken); } /// public Task AddAsync(TenantBillingStatement bill, CancellationToken cancellationToken = default) { return context.TenantBillingStatements.AddAsync(bill, cancellationToken).AsTask(); } /// public Task UpdateAsync(TenantBillingStatement bill, CancellationToken cancellationToken = default) { context.TenantBillingStatements.Update(bill); return Task.CompletedTask; } /// public Task SaveChangesAsync(CancellationToken cancellationToken = default) { return context.SaveChangesAsync(cancellationToken); } }