using Fengling.Console.Models.Entities; using Fengling.Console.Stores; using Microsoft.AspNetCore.Identity; namespace Fengling.Console.Managers; public interface ITenantManager { Task FindByIdAsync(int tenantId, CancellationToken cancellationToken = default); Task FindByTenantCodeAsync(string tenantCode, CancellationToken cancellationToken = default); Task> GetAllAsync(CancellationToken cancellationToken = default); Task> GetPagedAsync(int page, int pageSize, string? name = null, string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default); Task GetCountAsync(string? name = null, string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default); Task CreateAsync(Tenant tenant, CancellationToken cancellationToken = default); Task UpdateAsync(Tenant tenant, CancellationToken cancellationToken = default); Task DeleteAsync(Tenant tenant, CancellationToken cancellationToken = default); Task GetUserCountAsync(int tenantId, CancellationToken cancellationToken = default); Task SetTenantCodeAsync(Tenant tenant, string code, CancellationToken cancellationToken = default); } public class TenantManager : ITenantManager { private readonly ITenantStore _store; public TenantManager(ITenantStore store) { _store = store; } public virtual async Task FindByIdAsync(int tenantId, CancellationToken cancellationToken = default) { return await _store.FindByIdAsync(tenantId, cancellationToken); } public virtual async Task FindByTenantCodeAsync(string tenantCode, CancellationToken cancellationToken = default) { return await _store.FindByTenantCodeAsync(tenantCode, cancellationToken); } public virtual async Task> GetAllAsync(CancellationToken cancellationToken = default) { return await _store.GetAllAsync(cancellationToken); } public virtual async Task> GetPagedAsync(int page, int pageSize, string? name = null, string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default) { return await _store.GetPagedAsync(page, pageSize, name, tenantCode, status, cancellationToken); } public virtual async Task GetCountAsync(string? name = null, string? tenantCode = null, TenantStatus? status = null, CancellationToken cancellationToken = default) { return await _store.GetCountAsync(name, tenantCode, status, cancellationToken); } public virtual async Task CreateAsync(Tenant tenant, CancellationToken cancellationToken = default) { return await _store.CreateAsync(tenant, cancellationToken); } public virtual async Task UpdateAsync(Tenant tenant, CancellationToken cancellationToken = default) { return await _store.UpdateAsync(tenant, cancellationToken); } public virtual async Task DeleteAsync(Tenant tenant, CancellationToken cancellationToken = default) { return await _store.DeleteAsync(tenant, cancellationToken); } public virtual async Task GetUserCountAsync(int tenantId, CancellationToken cancellationToken = default) { return await _store.GetUserCountAsync(tenantId, cancellationToken); } public virtual async Task SetTenantCodeAsync(Tenant tenant, string code, CancellationToken cancellationToken = default) { var existing = await _store.FindByTenantCodeAsync(code, cancellationToken); if (existing != null && existing.Id != tenant.Id) { return IdentityResult.Failed(new IdentityError { Description = "租户编码已存在" }); } await _store.SetTenantCodeAsync(tenant, code, cancellationToken); return IdentityResult.Success; } }