diff --git a/Fengling.Platform.Infrastructure/Repositories/TenantRepository.cs b/Fengling.Platform.Infrastructure/Repositories/TenantRepository.cs index 7c6fb44..fd67ecd 100644 --- a/Fengling.Platform.Infrastructure/Repositories/TenantRepository.cs +++ b/Fengling.Platform.Infrastructure/Repositories/TenantRepository.cs @@ -10,6 +10,10 @@ public interface ITenantRepository : IRepository { Task GetByTenantIdAsync(string tenantId, CancellationToken cancellationToken = default); Task GetByIdIncludeH5Async(TenantId id, CancellationToken cancellationToken = default); + Task GetByIdAsync(long id, CancellationToken cancellationToken = default); + Task> GetPagedAsync(int page, int pageSize, string? name = null, string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default); + Task CountAsync(string? name = null, string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default); + Task GetUserCountAsync(TenantId tenantId, CancellationToken cancellationToken = default); } public class TenantRepository(PlatformDbContext context) @@ -24,4 +28,51 @@ public class TenantRepository(PlatformDbContext context) { return await DbContext.Tenants.FirstOrDefaultAsync(t => t.Id == id, cancellationToken); } + + public async Task GetByIdAsync(long id, CancellationToken cancellationToken = default) + { + return await DbContext.Tenants.FindAsync(new object[] { id }, cancellationToken); + } + + public async Task> GetPagedAsync(int page, int pageSize, string? name = null, + string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default) + { + var query = DbContext.Tenants.AsQueryable(); + + if (!string.IsNullOrEmpty(name)) + query = query.Where(t => t.Name.Contains(name)); + + if (!string.IsNullOrEmpty(tenantCode)) + query = query.Where(t => t.TenantCode.Contains(tenantCode)); + + if (status.HasValue) + query = query.Where(t => t.Status == status); + + return await query + .OrderByDescending(t => t.CreatedAt) + .Skip((page - 1) * pageSize) + .Take(pageSize) + .ToListAsync(cancellationToken); + } + + public async Task CountAsync(string? name = null, string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default) + { + var query = DbContext.Tenants.AsQueryable(); + + if (!string.IsNullOrEmpty(name)) + query = query.Where(t => t.Name.Contains(name)); + + if (!string.IsNullOrEmpty(tenantCode)) + query = query.Where(t => t.TenantCode.Contains(tenantCode)); + + if (status.HasValue) + query = query.Where(t => t.Status == status); + + return await query.CountAsync(cancellationToken); + } + + public async Task GetUserCountAsync(TenantId tenantId, CancellationToken cancellationToken = default) + { + return 0; + } }