| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- using System.Globalization;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using Abp;
- using Abp.Application.Features;
- using Abp.Domain.Repositories;
- using Abp.Domain.Services;
- using Abp.Domain.Uow;
- using Abp.Events.Bus.Entities;
- using Abp.Events.Bus.Handlers;
- using Abp.Localization;
- using Abp.Runtime.Caching;
- using Abp.UI;
- using IwbZero.Authorization.Base.Users;
- namespace IwbZero.MultiTenancy
- {
- /// <summary>
- /// Tenant manager.
- /// Implements domain logic for <see cref="IwbTenant{TUser}"/>.
- /// </summary>
- /// <typeparam name="TTenant">Type of the application Tenant</typeparam>
- /// <typeparam name="TUser">Type of the application User</typeparam>
- public class IwbTenantManager<TTenant, TUser> : IDomainService,
- IEventHandler<EntityChangedEventData<TTenant>>
- where TTenant : IwbTenant<TUser>
- where TUser : UserBase
- {
- // public AbpEditionManager EditionManager { get; set; }
- public ILocalizationManager LocalizationManager { get; set; }
- protected string LocalizationSourceName { get; set; }
- public ICacheManager CacheManager { get; set; }
- public IFeatureManager FeatureManager { get; set; }
- public IUnitOfWorkManager UnitOfWorkManager { get; set; }
- protected IRepository<TTenant> TenantRepository { get; set; }
- public IwbTenantManager(
- IRepository<TTenant> tenantRepository)
- {
- TenantRepository = tenantRepository;
- LocalizationManager = NullLocalizationManager.Instance;
- LocalizationSourceName = IwbZeroConsts.LocalizationSourceName;
- }
- public virtual IQueryable<TTenant> Tenants => TenantRepository.GetAll();
- public virtual async Task CreateAsync(TTenant tenant)
- {
- await ValidateTenantAsync(tenant);
- if (await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenant.TenancyName) != null)
- {
- throw new UserFriendlyException(string.Format(L("TenancyNameIsAlreadyTaken"), tenant.TenancyName));
- }
- await TenantRepository.InsertAsync(tenant);
- }
- public virtual async Task UpdateAsync(TTenant tenant)
- {
- if (await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenant.TenancyName && t.Id != tenant.Id) != null)
- {
- throw new UserFriendlyException(string.Format(L("TenancyNameIsAlreadyTaken"), tenant.TenancyName));
- }
- await TenantRepository.UpdateAsync(tenant);
- }
- public virtual async Task<TTenant> FindByIdAsync(int id)
- {
- return await TenantRepository.FirstOrDefaultAsync(a => a.Id == id);
- }
- public virtual async Task<TTenant> GetByIdAsync(int id)
- {
- var tenant = await FindByIdAsync(id);
- if (tenant == null)
- {
- throw new AbpException("There is no tenant with id: " + id);
- }
- return tenant;
- }
- public virtual Task<TTenant> FindByTenancyNameAsync(string tenancyName)
- {
- return TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenancyName);
- }
- public virtual async Task DeleteAsync(TTenant tenant)
- {
- await TenantRepository.DeleteAsync(tenant);
- }
- protected virtual async Task ValidateTenantAsync(TTenant tenant)
- {
- await ValidateTenancyNameAsync(tenant.TenancyName);
- }
- protected virtual Task ValidateTenancyNameAsync(string tenancyName)
- {
- if (!Regex.IsMatch(tenancyName, TenantBase.TenancyNameRegex))
- {
- throw new UserFriendlyException(L("InvalidTenancyName"));
- }
- return Task.FromResult(0);
- }
- protected virtual string L(string name)
- {
- return LocalizationManager.GetString(LocalizationSourceName, name);
- }
- protected virtual string L(string name, CultureInfo cultureInfo)
- {
- return LocalizationManager.GetString(LocalizationSourceName, name, cultureInfo);
- }
- public void HandleEvent(EntityChangedEventData<TTenant> eventData)
- {
- if (eventData.Entity.IsTransient())
- {
- }
- //CacheManager.GetTenantFeatureCache().Remove(eventData.Entity.Id);
- }
- }
- }
|