| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- using Abp.Configuration;
- using Abp.Dependency;
- using Abp.Domain.Repositories;
- using Abp.Domain.Uow;
- using Abp.MultiTenancy;
- using VberZero.BaseSystem;
- namespace VberZero.Settings;
- /// <summary>
- /// Implements <see cref="ISettingStore"/>.
- /// </summary>
- public class SettingStore : ISettingStore, ITransientDependency
- {
- private readonly IRepository<SysSetting, long> _settingRepository;
- private readonly IUnitOfWorkManager _unitOfWorkManager;
- #pragma warning disable CS0162
- private readonly int? _tenantId = VzConsts.MultiTenancyEnabled ? null : MultiTenancyConsts.DefaultTenantId;
- #pragma warning restore CS0162
- /// <summary>
- /// Constructor.
- /// </summary>
- public SettingStore(
- IRepository<SysSetting, long> settingRepository,
- IUnitOfWorkManager unitOfWorkManager)
- {
- _settingRepository = settingRepository;
- _unitOfWorkManager = unitOfWorkManager;
- }
- public virtual async Task<List<SettingInfo>> GetAllListAsync(int? tenantId, long? userId)
- {
- /* Combined SetTenantId and DisableFilter for backward compatibility.
- * SetTenantId switches database (for tenant) if needed.
- * DisableFilter and Where condition ensures to work even if tenantId is null for single db approach.
- * 组合 SetTenantId 和 DisableFilter 以实现向后兼容性。
- * 如果需要,SetTenantId 切换数据库(用于租户)。
- * DisableFilter 和 Where 条件确保即使对于单个 db 方法来说,tenantId 为 null 也能正常工作。
- */
- return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(tenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- var settingList = await _settingRepository.GetAllListAsync(s =>
- s.UserId == userId && s.TenantId == tenantId
- );
- return settingList
- .Select(s => s.ToSettingInfo())
- .ToList();
- }
- }
- });
- }
- public virtual List<SettingInfo> GetAllList(int? tenantId, long? userId)
- {
- /* Combined SetTenantId and DisableFilter for backward compatibility.
- * SetTenantId switches database (for tenant) if needed.
- * DisableFilter and Where condition ensures to work even if tenantId is null for single db approach.
- */
- return _unitOfWorkManager.WithUnitOfWork(() =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(tenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- return _settingRepository.GetAllList(s =>
- s.UserId == userId && s.TenantId == tenantId
- )
- .Select(s => s.ToSettingInfo())
- .ToList();
- }
- }
- });
- }
- public virtual async Task<SettingInfo> GetSettingOrNullAsync(int? tenantId, long? userId, string name)
- {
- return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(tenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- var settingInfo = await _settingRepository.FirstOrDefaultAsync(s =>
- s.UserId == userId && s.Name == name && s.TenantId == tenantId
- );
- return settingInfo.ToSettingInfo();
- }
- }
- });
- }
- public virtual SettingInfo GetSettingOrNull(int? tenantId, long? userId, string name)
- {
- return _unitOfWorkManager.WithUnitOfWork(() =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(tenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- return _settingRepository.FirstOrDefault(s =>
- s.UserId == userId && s.Name == name && s.TenantId == tenantId
- ).ToSettingInfo();
- }
- }
- });
- }
- public virtual async Task DeleteAsync(SettingInfo settingInfo)
- {
- await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- await _settingRepository.DeleteAsync(
- s => s.UserId == settingInfo.UserId && s.Name == settingInfo.Name &&
- s.TenantId == settingInfo.TenantId
- );
- await _unitOfWorkManager.Current.SaveChangesAsync();
- }
- }
- });
- }
- public virtual void Delete(SettingInfo settingInfo)
- {
- _unitOfWorkManager.WithUnitOfWork(() =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- _settingRepository.Delete(
- s => s.UserId == settingInfo.UserId && s.Name == settingInfo.Name &&
- s.TenantId == settingInfo.TenantId
- );
- _unitOfWorkManager.Current.SaveChanges();
- }
- }
- });
- }
- public virtual async Task CreateAsync(SettingInfo settingInfo)
- {
- await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- await _settingRepository.InsertAsync(settingInfo.ToSetting());
- await _unitOfWorkManager.Current.SaveChangesAsync();
- }
- }
- });
- }
- public virtual void Create(SettingInfo settingInfo)
- {
- _unitOfWorkManager.WithUnitOfWork(() =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- _settingRepository.Insert(settingInfo.ToSetting()!);
- _unitOfWorkManager.Current.SaveChanges();
- }
- }
- });
- }
- public virtual async Task UpdateAsync(SettingInfo settingInfo)
- {
- await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- var setting = await _settingRepository.FirstOrDefaultAsync(
- s => s.TenantId == settingInfo.TenantId &&
- s.UserId == settingInfo.UserId &&
- s.Name == settingInfo.Name
- );
- if (setting != null)
- {
- setting.Value = settingInfo.Value;
- }
- await _unitOfWorkManager.Current.SaveChangesAsync();
- }
- }
- });
- }
- public virtual void Update(SettingInfo settingInfo)
- {
- _unitOfWorkManager.WithUnitOfWork(() =>
- {
- using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- var setting = _settingRepository.FirstOrDefault(
- s => s.TenantId == settingInfo.TenantId &&
- s.UserId == settingInfo.UserId &&
- s.Name == settingInfo.Name
- );
- if (setting != null)
- {
- setting.Value = settingInfo.Value;
- }
- _unitOfWorkManager.Current.SaveChanges();
- }
- }
- });
- }
- }
|