ArticleGroupUserRepository.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using AutoMapper;
  5. using GxPress.Common.AppOptions;
  6. using GxPress.Common.Exceptions;
  7. using GxPress.Common.Tools;
  8. using GxPress.Entity;
  9. using GxPress.Repository.Interface;
  10. using GxPress.Request.ArticleGroupUser;
  11. using GxPress.Result.ArticleGroupUser;
  12. using Microsoft.Extensions.Options;
  13. using Datory;
  14. using System.Transactions;
  15. namespace GxPress.Repository.Implement
  16. {
  17. public class ArticleGroupUserRepository : IArticleGroupUserRepository
  18. {
  19. private readonly Repository<ArticleGroupUser> _repository;
  20. private readonly Repository<ArticleGroup> _articleGroupRepository;
  21. private readonly Repository<User> _userRepository;
  22. private readonly IMapper _mapper;
  23. public ArticleGroupUserRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor, IMapper mapper)
  24. {
  25. var databaseType = StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  26. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  27. _repository = new Repository<ArticleGroupUser>(database);
  28. _articleGroupRepository = new Repository<ArticleGroup>(database);
  29. _userRepository = new Repository<User>(database);
  30. _mapper = mapper;
  31. }
  32. public IDatabase Database => _repository.Database;
  33. public string TableName => _repository.TableName;
  34. public List<TableColumn> TableColumns => _repository.TableColumns;
  35. /// <summary>
  36. /// 添加
  37. /// </summary>
  38. /// <param name="request"></param>
  39. /// <returns></returns>
  40. public async Task<int> InsertAsync(ArticleGroupUserInRequest request)
  41. {
  42. var user = await _userRepository.GetAsync(request.UserId);
  43. if (user == null)
  44. throw new BusinessException("用户不存在");
  45. var articleGroup = await _articleGroupRepository.GetAsync(request.ArticleGroupId);
  46. if (articleGroup == null)
  47. throw new BusinessException("频道不存在");
  48. //查询是否存在
  49. var articleGroupUserCount = await _repository.CountAsync(Q.Where(nameof(ArticleGroupUser.UserId), request.UserId)
  50. .Where(nameof(ArticleGroupUser.ArticleGroupId), request.ArticleGroupId));
  51. if (articleGroupUserCount > 0)
  52. throw new BusinessException("频道已存在");
  53. var articleGroupUserEntity = new ArticleGroupUser
  54. {
  55. ArticleGroupId = request.ArticleGroupId,
  56. UserId = request.UserId
  57. };
  58. return await _repository.InsertAsync(articleGroupUserEntity);
  59. }
  60. /// <summary>
  61. /// 添加
  62. /// </summary>
  63. /// <param name="request"></param>
  64. /// <returns></returns>
  65. public async Task<bool> InsertAsync(ArticleGroupUserInNewRequest request)
  66. {
  67. var user = await _userRepository.GetAsync(request.UserId);
  68. if (user == null)
  69. throw new BusinessException("用户不存在");
  70. try
  71. {
  72. using (var transactionScope = new TransactionScope())
  73. {
  74. //删除
  75. await _repository.DeleteAsync(Q.Where(nameof(ArticleGroupUser.UserId), request.UserId));
  76. foreach (var item in request.ArticleGroupId)
  77. {
  78. var articleGroupUserEntity = new ArticleGroupUser
  79. {
  80. ArticleGroupId = item,
  81. UserId = request.UserId
  82. };
  83. await _repository.InsertAsync(articleGroupUserEntity);
  84. }
  85. transactionScope.Complete();
  86. }
  87. }
  88. catch
  89. {
  90. return false;
  91. }
  92. return true;
  93. }
  94. /// <summary>
  95. /// 删除用户频道
  96. /// </summary>
  97. /// <param name="id"></param>
  98. /// <returns></returns>
  99. public async Task<bool> DeleteAsync(int id)
  100. {
  101. var articleGroup = await _repository.GetAsync(id);
  102. if (articleGroup == null)
  103. throw new BusinessException("频道不存在");
  104. return await _repository.DeleteAsync(id);
  105. }
  106. /// <summary>
  107. /// 根据用户ID查询用户的频道
  108. /// </summary>
  109. /// <param name="request"></param>
  110. /// <returns></returns>
  111. public async Task<IEnumerable<ArticleGroupUserListResult>> GetListAsync(ArticleGroupUserSearchRequest request)
  112. {
  113. var result = new List<ArticleGroupUserListResult>();
  114. var articleGroups = await _articleGroupRepository.GetAllAsync(Q.Where(nameof(Entity.ArticleGroup.IsSystemDefault), true));
  115. foreach (var item in articleGroups)
  116. result.Add(new ArticleGroupUserListResult
  117. {
  118. Id = 0,
  119. ArticleGroupId = item.IsSystemDefault == true && item.Id == 63 ? 0 : item.Id,
  120. ArticleGroupName = item.Name,
  121. IsSystemDefault = item.IsSystemDefault,
  122. UserId = request.UserId
  123. });
  124. var list = await _repository.GetAllAsync(Q.Where(nameof(ArticleGroupUser.UserId), request.UserId));
  125. var listArray = list.Select(n => _mapper.Map<ArticleGroupUserListResult>(n)).ToList();
  126. foreach (var item in listArray)
  127. {
  128. var articleGroup = await _articleGroupRepository.GetAsync(item.ArticleGroupId);
  129. if (articleGroup == null)
  130. continue;
  131. item.ArticleGroupName = articleGroup == null ? "" : articleGroup.Name;
  132. result.Add(item);
  133. }
  134. //result.AddRange(listArray);
  135. return result;
  136. }
  137. }
  138. }