TopicAnalyzeRepository.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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.Page;
  8. using GxPress.Common.Tools;
  9. using GxPress.Entity;
  10. using GxPress.Entity.Topic;
  11. using GxPress.Repository.Interface;
  12. using GxPress.Request.App.TopicAnalyze;
  13. using GxPress.Result.App.Topic;
  14. using Microsoft.Extensions.Options;
  15. using Datory;
  16. using SqlKata;
  17. namespace GxPress.Repository.Implement
  18. {
  19. public class TopicAnalyzeRepository: ITopicAnalyzeRepository
  20. {
  21. private readonly Repository<TopicAnalyze> _repository;
  22. private readonly Repository<User> _userRepository;
  23. private readonly Repository<TopicComment> _topicCommentRepository;
  24. private readonly Repository<Entity.Topic.Topic> _topicRepository;
  25. private readonly Repository<Department> _departmentRepository;
  26. private readonly IMapper _mapper;
  27. public TopicAnalyzeRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor, IMapper mapper)
  28. {
  29. var databaseType = StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  30. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  31. _repository = new Repository<TopicAnalyze>(database);
  32. _userRepository = new Repository<User>(database);
  33. _topicCommentRepository = new Repository<TopicComment>(database);
  34. _topicRepository = new Repository<Entity.Topic.Topic>(database);
  35. _departmentRepository=new Repository<Department>(database);
  36. _mapper = mapper;
  37. }
  38. public IDatabase Database => _repository.Database;
  39. public string TableName => _repository.TableName;
  40. public List<TableColumn> TableColumns => _repository.TableColumns;
  41. /// <summary>
  42. /// 设置 点赞 转发 收藏
  43. /// </summary>
  44. /// <param name="request"></param>
  45. /// <returns></returns>
  46. public async Task<bool> SetTopicAnalyzeAsync(TopicAnalyzeRequest request)
  47. {
  48. var user = await _userRepository.GetAsync(request.UserId);
  49. if (user == null) throw new BusinessException("不存在该账号");
  50. var topicAnalyze = await _repository.GetAsync(Q.Where(nameof(TopicAnalyze.AnalyzeType), request.TopicAnalyzeType)
  51. .Where(nameof(TopicAnalyze.TopicId), request.TopicId).Where(nameof(TopicAnalyze.TopicCommentId),request.TopicCommentId)
  52. .Where(nameof(TopicAnalyze.UserId), request.UserId));
  53. if (topicAnalyze != null && topicAnalyze.Id > 0)
  54. //throw new BusinessException("你已经点赞过了~!");
  55. return await _repository.DeleteAsync(topicAnalyze.Id);
  56. //查询该用户是否已经点赞过
  57. if (request.TopicAnalyzeType == 2)
  58. {
  59. if(request.TopicCommentId==0)
  60. throw new BusinessException("评论Id必传!");
  61. //没有点赞则新增数据点赞条数
  62. var comment = await _topicCommentRepository.GetAsync(request.TopicCommentId);
  63. comment.Laud++;
  64. await _topicCommentRepository.UpdateAsync(comment);
  65. }
  66. return await InsertAsync(request);
  67. }
  68. /// <summary>
  69. /// 添加
  70. /// </summary>
  71. /// <param name="request"></param>
  72. /// <returns></returns>
  73. public async Task<bool> InsertAsync(TopicAnalyzeRequest request)
  74. {
  75. var topicAnalyze = new TopicAnalyze()
  76. {
  77. AnalyzeType = request.TopicAnalyzeType,
  78. TopicId = request.TopicId,
  79. TopicCommentId = request.TopicCommentId,
  80. UserId = request.UserId
  81. };
  82. return await _repository.InsertAsync(topicAnalyze) > 0;
  83. }
  84. /// <summary>
  85. /// 获取文章点赞数据
  86. /// </summary>
  87. /// <param name="request"></param>
  88. /// <returns></returns>
  89. public async Task<PagedList<TopicPraisePageResult>> GetTopicPraisePageAsync(TopicPraisePageSearchRequest request)
  90. {
  91. var query = Q.NewQuery();
  92. query.Where(nameof(TopicAnalyze.AnalyzeType), 1).Where(nameof(TopicAnalyze.TopicId), request.TopicId);
  93. if(request.Sort=="desc")
  94. query.OrderByDesc(nameof(TopicAnalyze.CreatedDate));
  95. var pagedList = new PagedList<TopicPraisePageResult>
  96. {
  97. Total = await _repository.CountAsync(query)
  98. };
  99. var list = await _repository.GetAllAsync(query.ForPage(request.Page, request.PerPage));
  100. var items = list.Select(user => _mapper.Map<TopicPraisePageResult>(user)).ToList();
  101. //获取文章名称
  102. var topic = await _topicRepository.GetAsync(request.TopicId);
  103. foreach (var item in items)
  104. {
  105. //获取用户
  106. var user = await _userRepository.GetAsync(item.UserId);
  107. item.TopicName = topic.Title;
  108. item.UserName = user.Name;
  109. item.Signature = user.Signature;
  110. item.AvatarUrl =StringUtils.AddDomain(user.AvatarUrl);
  111. //获取部门
  112. var department = await _departmentRepository.GetAsync(user.DepartmentId);
  113. item.DepartmentName = department != null ? department.Name : "";
  114. }
  115. pagedList.Items = items;
  116. return pagedList;
  117. }
  118. public async Task<int> CountAsync(Query query)
  119. {
  120. return await _repository.CountAsync(query);
  121. }
  122. public async Task<TopicAnalyze> GetAsync(Query query)
  123. {
  124. return await _repository.GetAsync(query);
  125. }
  126. public async Task<bool> DeleteAsync(int id)
  127. {
  128. return await _repository.DeleteAsync(id);
  129. }
  130. }
  131. }