using Easy.AuthorityManagement.Clean.Shared.IServices; using Easy.DDD.Domain; using Easy.Snowflakes; namespace Easy.AuthorityManagement.Clean.Domain.Services; public class TenantManager : DomainService, ITenantManager { protected IRepository TenantRepository { get; } protected ISnowflakeIdGenerator SnowflakeIdGenerator => LazyServiceProvider.LazyGetService(); public TenantManager(IRepository tenantRepository) { TenantRepository = tenantRepository; } public virtual async Task CreateAsync(string name) { await ValidateNameAsync(name); return new Tenant(SnowflakeIdGenerator.Create(), name); } public virtual async Task ChangeNameAsync(Tenant tenant, string name) { await ValidateNameAsync(name, tenant.Id); tenant.SetName(name); } protected virtual async Task ValidateNameAsync(string name, long? expectedId = null) { When.Is(string.IsNullOrEmpty(name), "租户名称不能为空"); var tenant = await TenantRepository.Set.Where(o => o.TenantName == name).FirstOrDefaultAsync(); When.Is(tenant != null && tenant.Id != expectedId, "重复的租户名称: " + name); } }