fengling-console/Repositories/TenantRepository.cs
2026-02-05 14:15:02 +08:00

102 lines
2.7 KiB
C#

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<Tenant?> GetByIdAsync(long id)
{
return await _context.Tenants.FindAsync(id);
}
public async Task<Tenant?> GetByTenantIdAsync(string tenantId)
{
return await _context.Tenants.FirstOrDefaultAsync(t => t.TenantId == tenantId);
}
public async Task<IEnumerable<Tenant>> GetAllAsync()
{
return await _context.Tenants.ToListAsync();
}
public async Task<IEnumerable<Tenant>> 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<int> 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<int> GetUserCountAsync(long tenantId)
{
return await _context.Users.CountAsync(u => u.TenantInfo.Id == tenantId && !u.IsDeleted);
}
}