using Fengling.AuthService.Data; using Fengling.AuthService.Models; using Microsoft.EntityFrameworkCore; namespace Fengling.Console.Repositories; public class TenantRepository : ITenantRepository { private readonly ApplicationDbContext _context; public TenantRepository(ApplicationDbContext context) { _context = context; } 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); } }