CircleRepository.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/6/5
  6. * Time: 16:03
  7. */
  8. namespace App\Repositories\Circle;
  9. use App\Models\InterestCircle;
  10. use App\Models\InterestCirclePicture;
  11. use Illuminate\Database\QueryException;
  12. use Dingo\Api\Http\Response;
  13. use Illuminate\Support\Carbon;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Log;
  16. use Illuminate\Support\Facades\Redis;
  17. class CircleRepository
  18. {
  19. public function __construct(InterestCircle $interestCircle, InterestCirclePicture $interestCirclePicture)
  20. {
  21. $this->interestCircle = $interestCircle;
  22. $this->interestCirclePicture = $interestCirclePicture;
  23. }
  24. /**
  25. * 创建圈子
  26. */
  27. public function create($request)
  28. {
  29. Log::debug('request-circle:'.var_export($request,true));
  30. $data = [
  31. 'name' => $request['name'],
  32. 'notice' => $request['notice'],
  33. 'image' => $request['image'] ?? '',
  34. 'join_limit' => $request['join_limit'],
  35. 'limit_condition' => $request['limit_condition'],
  36. 'join_question' => json_encode($request['join_question']) ?? '',
  37. 'limit_article_ids' => $request['limit_article_ids'] ?? '',
  38. 'contains_function' => json_encode($request['contains_function']) ?? '',
  39. ];
  40. DB::beginTransaction();
  41. try {
  42. $circle = $this->interestCircle->create($data);
  43. DB::commit();
  44. return Response::create();
  45. } catch (QueryException $exception) {
  46. DB::rollBack();
  47. Log::debug('创建圈子exception:' . $exception->getMessage());
  48. return Response::create([
  49. 'message' => '创建失败,请重试',
  50. 'error' => $exception->getMessage(),
  51. 'status_code' => 500
  52. ]);
  53. }
  54. }
  55. /**
  56. * 修改圈子
  57. */
  58. public function update($request)
  59. {
  60. $data = [
  61. 'name' => $request['name'],
  62. 'notice' => $request['notice'],
  63. 'image' => $request['image'] ?? '',
  64. 'join_limit' => $request['join_limit'],
  65. 'limit_condition' => $request['limit_condition'],
  66. 'join_question' => $request['join_question'] ?? '',
  67. 'limit_article_ids' => $request['limit_article_ids'] ?? '',
  68. 'contains_function' => $request['contains_function'] ?? '',
  69. ];
  70. DB::beginTransaction();
  71. try {
  72. $circle = $this->interestCircle->where('id', $request['id'])->update($data);
  73. DB::commit();
  74. return Response::create();
  75. } catch (QueryException $exception) {
  76. DB::rollBack();
  77. Log::debug('修改圈子exception:' . $exception->getMessage());
  78. return Response::create([
  79. 'message' => '修改失败,请重试',
  80. 'error' => $exception->getMessage(),
  81. 'status_code' => 500
  82. ]);
  83. }
  84. }
  85. /**
  86. * 圈子列表
  87. */
  88. public function circleLists($request)
  89. {
  90. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  91. $where = [];
  92. if (isset($request['is_open'])) {
  93. $where[] = ['is_open', $request['is_open']];
  94. }
  95. return $this->interestCircle
  96. ->where($where)
  97. ->where(function ($query) use ($request) {
  98. if (isset($request['keyword'])) {
  99. $query->Where('name', 'like', "%{$request['keyword']}%");
  100. }
  101. })
  102. ->orderBy('is_recommend', 'desc')
  103. ->orderBy('created_at', 'desc')
  104. ->paginate($perPage);
  105. }
  106. /**
  107. * 圈子详情
  108. */
  109. public function detail($request, $isTrashed = false)
  110. {
  111. $model = $this->interestCircle;
  112. if ($isTrashed) {
  113. $model->withTrashed();
  114. }
  115. return $model->find($request['id']);
  116. }
  117. /**
  118. * 推荐圈子
  119. */
  120. public function circleRecommend($request)
  121. {
  122. $circle = $this->interestCircle->where('id', $request['id'])->first();
  123. if (!$circle) {
  124. return Response::create([
  125. 'message' => '获取圈子信息失败',
  126. 'status_code' => 500
  127. ]);
  128. }
  129. if ($circle->is_recommend == 1) {
  130. $circle->is_recommend = 0;
  131. } else {
  132. $circle->is_recommend = 1;
  133. }
  134. DB::beginTransaction();
  135. try {
  136. $circle->save();
  137. DB::commit();
  138. return Response::create();
  139. } catch (QueryException $exception) {
  140. DB::rollBack();
  141. Log::debug('推荐圈子:' . $request['id'] . $exception->getMessage());
  142. return Response::create([
  143. 'message' => '操作失败,请重试',
  144. 'error' => $exception->getMessage(),
  145. 'status_code' => 500
  146. ]);
  147. }
  148. }
  149. /**
  150. * 开启/关闭圈子
  151. */
  152. public function circleStatus($request)
  153. {
  154. $circle = $this->interestCircle->where('id', $request['id'])->first();
  155. if (!$circle) {
  156. return Response::create([
  157. 'message' => '获取圈子信息失败',
  158. 'status_code' => 500
  159. ]);
  160. }
  161. if ($circle->is_open == 1) {
  162. $circle->is_open = 0;
  163. } else {
  164. $circle->is_open = 1;
  165. }
  166. DB::beginTransaction();
  167. try {
  168. $circle->save();
  169. DB::commit();
  170. return Response::create();
  171. } catch (QueryException $exception) {
  172. DB::rollBack();
  173. Log::debug('操作圈子:' . $request['id'] . $exception->getMessage());
  174. return Response::create([
  175. 'message' => '操作失败,请重试',
  176. 'error' => $exception->getMessage(),
  177. 'status_code' => 500
  178. ]);
  179. }
  180. }
  181. /**
  182. * 相册列表
  183. */
  184. public function pictureLists($request)
  185. {
  186. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  187. $where = [];
  188. if (isset($request['circle_id'])) {
  189. $where[] = ['circle_id', $request['circle_id']];
  190. }
  191. if (isset($request['uid'])) {
  192. $where[] = ['uid', $request['uid']];
  193. }
  194. return $this->interestCirclePicture
  195. ->where($where)
  196. ->orderBy('created_at', 'desc')
  197. ->paginate($perPage);
  198. }
  199. /**
  200. * 删除相册图片
  201. */
  202. public function deletePicture($request)
  203. {
  204. $circle = $this->interestCirclePicture->where('id', $request['id'])->first();
  205. if (!$circle) {
  206. return Response::create([
  207. 'message' => '获取图片信息失败',
  208. 'status_code' => 500
  209. ]);
  210. }
  211. DB::beginTransaction();
  212. try {
  213. $circle->delete();
  214. DB::commit();
  215. return Response::create();
  216. } catch (QueryException $exception) {
  217. DB::rollBack();
  218. Log::debug('删除相册图片:' . $request['id'] . $exception->getMessage());
  219. return Response::create([
  220. 'message' => '操作失败,请重试',
  221. 'error' => $exception->getMessage(),
  222. 'status_code' => 500
  223. ]);
  224. }
  225. }
  226. }