| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Abp.Configuration;
- using Abp.Dependency;
- using Abp.Domain.Repositories;
- using Abp.Domain.Uow;
- using IwbZero.Authorization.Base.SystemInfo;
- namespace IwbZero.Configuration
- {
- /// <summary>
- /// Implements <see cref="ISettingStore"/>.
- /// </summary>
- public class SettingStore : ISettingStore, ITransientDependency
- {
- private readonly IRepository<SysSetting, long> _settingRepository;
- private readonly IUnitOfWorkManager _unitOfWorkManager;
- /// <summary>
- /// Constructor.
- /// </summary>
- public SettingStore(
- IRepository<SysSetting, long> settingRepository,
- IUnitOfWorkManager unitOfWorkManager)
- {
- _settingRepository = settingRepository;
- _unitOfWorkManager = unitOfWorkManager;
- }
- [UnitOfWork]
- 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.
- */
- using (_unitOfWorkManager.Current.SetTenantId(tenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- return
- (await _settingRepository.GetAllListAsync(s => s.UserId == userId && s.TenantId == tenantId))
- .Select(s => s.ToSettingInfo())
- .ToList();
- }
- }
- }
- [UnitOfWork]
- public virtual async Task<SettingInfo> GetSettingOrNullAsync(int? tenantId, long? userId, string name)
- {
- using (_unitOfWorkManager.Current.SetTenantId(tenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- return (await _settingRepository.FirstOrDefaultAsync(s => s.UserId == userId && s.Name == name && s.TenantId == tenantId))
- .ToSettingInfo();
- }
- }
- }
- [UnitOfWork]
- public virtual async Task DeleteAsync(SettingInfo settingInfo)
- {
- 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();
- }
- }
- }
- [UnitOfWork]
- public virtual async Task CreateAsync(SettingInfo settingInfo)
- {
- using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
- {
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- var setting = await _settingRepository.FirstOrDefaultAsync(
- s => (s.TenantId == null || s.TenantId ==1 ) &&
- s.Name == settingInfo.Name
- );
- if (setting != null)
- {
- await _settingRepository.InsertAsync(new SysSetting(settingInfo.TenantId, settingInfo.UserId, settingInfo.Name, settingInfo.Value, setting.DisplayName, setting.Type)
- {
- Description = setting.Description
- });
- }
- await _unitOfWorkManager.Current.SaveChangesAsync();
- }
- }
- }
- [UnitOfWork]
- public virtual async Task UpdateAsync(SettingInfo settingInfo)
- {
- 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();
- }
- }
- }
- }
- }
|