SettingStore.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Abp.Configuration;
  5. using Abp.Dependency;
  6. using Abp.Domain.Repositories;
  7. using Abp.Domain.Uow;
  8. using IwbZero.Authorization.Base.SystemInfo;
  9. namespace IwbZero.Configuration
  10. {
  11. /// <summary>
  12. /// Implements <see cref="ISettingStore"/>.
  13. /// </summary>
  14. public class SettingStore : ISettingStore, ITransientDependency
  15. {
  16. private readonly IRepository<SysSetting, long> _settingRepository;
  17. private readonly IUnitOfWorkManager _unitOfWorkManager;
  18. /// <summary>
  19. /// Constructor.
  20. /// </summary>
  21. public SettingStore(
  22. IRepository<SysSetting, long> settingRepository,
  23. IUnitOfWorkManager unitOfWorkManager)
  24. {
  25. _settingRepository = settingRepository;
  26. _unitOfWorkManager = unitOfWorkManager;
  27. }
  28. [UnitOfWork]
  29. public virtual async Task<List<SettingInfo>> GetAllListAsync(int? tenantId, long? userId)
  30. {
  31. /* Combined SetTenantId and DisableFilter for backward compatibility.
  32. * SetTenantId switches database (for tenant) if needed.
  33. * DisableFilter and Where condition ensures to work even if tenantId is null for single db approach.
  34. */
  35. using (_unitOfWorkManager.Current.SetTenantId(tenantId))
  36. {
  37. using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
  38. {
  39. return
  40. (await _settingRepository.GetAllListAsync(s => s.UserId == userId && s.TenantId == tenantId))
  41. .Select(s => s.ToSettingInfo())
  42. .ToList();
  43. }
  44. }
  45. }
  46. [UnitOfWork]
  47. public virtual async Task<SettingInfo> GetSettingOrNullAsync(int? tenantId, long? userId, string name)
  48. {
  49. using (_unitOfWorkManager.Current.SetTenantId(tenantId))
  50. {
  51. using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
  52. {
  53. return (await _settingRepository.FirstOrDefaultAsync(s => s.UserId == userId && s.Name == name && s.TenantId == tenantId))
  54. .ToSettingInfo();
  55. }
  56. }
  57. }
  58. [UnitOfWork]
  59. public virtual async Task DeleteAsync(SettingInfo settingInfo)
  60. {
  61. using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
  62. {
  63. using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
  64. {
  65. await _settingRepository.DeleteAsync(
  66. s => s.UserId == settingInfo.UserId && s.Name == settingInfo.Name && s.TenantId == settingInfo.TenantId
  67. );
  68. await _unitOfWorkManager.Current.SaveChangesAsync();
  69. }
  70. }
  71. }
  72. [UnitOfWork]
  73. public virtual async Task CreateAsync(SettingInfo settingInfo)
  74. {
  75. using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
  76. {
  77. using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
  78. {
  79. var setting = await _settingRepository.FirstOrDefaultAsync(
  80. s => (s.TenantId == null || s.TenantId ==1 ) &&
  81. s.Name == settingInfo.Name
  82. );
  83. if (setting != null)
  84. {
  85. await _settingRepository.InsertAsync(new SysSetting(settingInfo.TenantId, settingInfo.UserId, settingInfo.Name, settingInfo.Value, setting.DisplayName, setting.Type)
  86. {
  87. Description = setting.Description
  88. });
  89. }
  90. await _unitOfWorkManager.Current.SaveChangesAsync();
  91. }
  92. }
  93. }
  94. [UnitOfWork]
  95. public virtual async Task UpdateAsync(SettingInfo settingInfo)
  96. {
  97. using (_unitOfWorkManager.Current.SetTenantId(settingInfo.TenantId))
  98. {
  99. using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
  100. {
  101. var setting = await _settingRepository.FirstOrDefaultAsync(
  102. s => s.TenantId == settingInfo.TenantId &&
  103. s.UserId == settingInfo.UserId &&
  104. s.Name == settingInfo.Name
  105. );
  106. if (setting != null)
  107. {
  108. setting.Value = settingInfo.Value;
  109. }
  110. await _unitOfWorkManager.Current.SaveChangesAsync();
  111. }
  112. }
  113. }
  114. }
  115. }