diff --git a/Repositories/ITenantRepository.cs b/Repositories/ITenantRepository.cs new file mode 100644 index 0000000..12ec6d0 --- /dev/null +++ b/Repositories/ITenantRepository.cs @@ -0,0 +1,16 @@ +using Fengling.AuthService.Models; + +namespace Fengling.Console.Repositories; + +public interface ITenantRepository +{ + Task GetByIdAsync(long id); + Task GetByTenantIdAsync(string tenantId); + Task> GetAllAsync(); + Task> GetPagedAsync(int page, int pageSize, string? name = null, string? tenantId = null, string? status = null); + Task CountAsync(string? name = null, string? tenantId = null, string? status = null); + Task AddAsync(Tenant tenant); + Task UpdateAsync(Tenant tenant); + Task DeleteAsync(Tenant tenant); + Task GetUserCountAsync(long tenantId); +} diff --git a/Repositories/TenantRepository.cs b/Repositories/TenantRepository.cs new file mode 100644 index 0000000..30b7ce6 --- /dev/null +++ b/Repositories/TenantRepository.cs @@ -0,0 +1,101 @@ +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); + } +}