using Fengling.Console.Datas; using Fengling.Console.Models.Entities; using Microsoft.EntityFrameworkCore; namespace Fengling.Console.Repositories; public class TenantRepository(ApplicationDbContext context) : ITenantRepository { public async Task GetByIdAsync(long id) { return await context.Tenants.FindAsync(id); } public async Task GetByTenantIdAsync(string tenantId) { return await context.Tenants.FirstOrDefaultAsync(t => t.TenantId == tenantId); } public async Task> GetAllAsync() { return await context.Tenants.ToListAsync(); } public async Task> GetPagedAsync(int page, int pageSize, string? name = null, string? tenantId = null, string? status = null) { var query = context.Tenants.AsQueryable(); if (!string.IsNullOrEmpty(name)) { query = query.Where(t => t.Name.Contains(name)); } if (!string.IsNullOrEmpty(tenantId)) { query = query.Where(t => t.TenantId.Contains(tenantId)); } if (!string.IsNullOrEmpty(status)) { query = query.Where(t => t.Status == status); } return await query .OrderByDescending(t => t.CreatedAt) .Skip((page - 1) * pageSize) .Take(pageSize) .ToListAsync(); } public async Task CountAsync(string? name = null, string? tenantId = null, string? status = null) { var query = context.Tenants.AsQueryable(); if (!string.IsNullOrEmpty(name)) { query = query.Where(t => t.Name.Contains(name)); } if (!string.IsNullOrEmpty(tenantId)) { query = query.Where(t => t.TenantId.Contains(tenantId)); } if (!string.IsNullOrEmpty(status)) { query = query.Where(t => t.Status == status); } return await query.CountAsync(); } public async Task AddAsync(Tenant tenant) { context.Tenants.Add(tenant); await context.SaveChangesAsync(); } public async Task UpdateAsync(Tenant tenant) { context.Tenants.Update(tenant); await context.SaveChangesAsync(); } public async Task DeleteAsync(Tenant tenant) { context.Tenants.Remove(tenant); await context.SaveChangesAsync(); } public async Task GetUserCountAsync(long tenantId) { return await context.Users.CountAsync(u => u.TenantInfo.Id == tenantId && !u.IsDeleted); } }