PostRepositories.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: edz
  5. * Date: 2019-06-10
  6. * Time: 17:53
  7. */
  8. namespace App\Repositories;
  9. use App\Models\Behavior;
  10. use App\Models\Post;
  11. use App\Models\PostCollect;
  12. use App\Models\PostComment;
  13. use App\Models\PostData;
  14. use App\Models\PostLike;
  15. use Illuminate\Support\Facades\Log;
  16. use Illuminate\Support\Facades\Redis;
  17. class PostRepositories
  18. {
  19. public function __construct(Post $post,PostComment $postComment)
  20. {
  21. $this->post = $post;
  22. $this->postComment = $postComment;
  23. }
  24. /**
  25. * 内容列表
  26. */
  27. public function lists($request)
  28. {
  29. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  30. return $this->post
  31. ->join('post_data', 'post_data.post_id', '=', 'post.id')
  32. ->select('post.*')
  33. ->where(function($query) use ($request){
  34. if(isset($request['keyword'])){
  35. $query->where('title', 'like', "%{$request['keyword']}%")
  36. ->orWhere('content', 'like', "%{$request['keyword']}%");
  37. }
  38. })
  39. ->orderBy('weight','desc')
  40. ->paginate($perPage);
  41. }
  42. /**
  43. * 推荐内容列表
  44. */
  45. public function suggestPost($request)
  46. {
  47. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  48. return $this->post
  49. ->join('post_data', 'post_data.post_id', '=', 'post.id')
  50. ->select('post.*')
  51. ->orderBy('weight','desc')
  52. ->paginate($perPage);
  53. }
  54. /**
  55. * 评论列表
  56. */
  57. public function commentList($request)
  58. {
  59. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  60. return $this->postComment
  61. ->where('post_id', $request['post_id'])
  62. ->where('parent_id', 0)
  63. ->orderBy('id','desc')
  64. ->paginate($perPage);
  65. }
  66. /**
  67. * 回复列表
  68. */
  69. public function replyList($request)
  70. {
  71. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  72. return $this->postComment
  73. ->where('parent_id', $request['id'])
  74. ->orderBy('id','desc')
  75. ->paginate($perPage);
  76. }
  77. /**
  78. * 评论详情
  79. */
  80. public function commentDetail($request)
  81. {
  82. return $this->postComment
  83. ->where('id', $request['id'])
  84. ->first();
  85. }
  86. /**
  87. * 更新帖子统计数量
  88. * @param $request
  89. * @return mixed
  90. */
  91. public function updatePostData($request)
  92. {
  93. $postId = $request['post_id'];
  94. $post = PostData::where('post_id', $postId)->first();
  95. if (isset($request['behavior_flag']) && $request['behavior_flag'] == 'read') {
  96. $post->pv += 1;
  97. $post->pv_real += 1;
  98. Log::debug("帖子:".$postId."被阅读,pv +1");
  99. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'unlike') {
  100. $post->dislike += 1;
  101. Log::debug("帖子:".$postId."被不喜欢,unlike +1");
  102. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'like') {
  103. if($request['behavior_value']){
  104. $post->praise_count += 1;
  105. $post->praise_real_count += 1;
  106. PostLike::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
  107. Log::debug("帖子:".$postId."被点赞,praise_count +1");
  108. }else{
  109. $post->praise_count -= 1;
  110. $post->praise_real_count -= 1;
  111. PostLike::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
  112. Log::debug("帖子:".$postId."被取消点赞,praise_count -1");
  113. }
  114. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'forward') {
  115. $post->share_count += 1;
  116. $post->share_real_count += 1;
  117. Log::debug("帖子:".$postId."被分享,share_count +1");
  118. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'comment') {
  119. $post->comment_count += 1;
  120. Log::debug("帖子:".$postId."被评论,comment_count +1");
  121. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'collect') {
  122. if($request['behavior_value']) {
  123. $post->collect_count += 1;
  124. $post->collect_real_count += 1;
  125. PostCollect::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
  126. Log::debug("帖子:".$postId."被收藏,collect_count +1");
  127. }else{
  128. $post->collect_count -= 1;
  129. $post->collect_real_count -= 1;
  130. PostCollect::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
  131. Log::debug("帖子:".$postId."被取消收藏,collect_count -1");
  132. }
  133. }
  134. return $post->save();
  135. }
  136. /**
  137. * 收集所有有操作的帖子,存入redis
  138. * 供后续计算帖子权重
  139. * @param $id
  140. */
  141. public function collectPostId($id)
  142. {
  143. $key = "community_calc_post_score";
  144. Redis::sadd($key,$id);
  145. }
  146. }