You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.2 KiB

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<Tenant> TenantRepository { get; }
protected ISnowflakeIdGenerator SnowflakeIdGenerator => LazyServiceProvider.LazyGetService<ISnowflakeIdGenerator>();
public TenantManager(IRepository<Tenant> tenantRepository)
{
TenantRepository = tenantRepository;
}
public virtual async Task<Tenant> 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);
}
}