2
0

LikeController.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Api\UserApi;
  4. use App\Http\Resources\LikeResource;
  5. use App\Models\Like;
  6. use App\Services\AuthService;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Http\Response;
  9. use Illuminate\Support\Str;
  10. class LikeController extends Controller
  11. {
  12. /**
  13. * Display a listing of the resource.
  14. *
  15. * @return Response
  16. */
  17. public function index(Request $request)
  18. {
  19. //
  20. switch ($request->input('view')) {
  21. case 'count':
  22. // code...
  23. $result = Like::where('target_id', $request->input('target_id'))
  24. ->groupBy('type')
  25. ->select('type')
  26. ->selectRaw('count(*)')
  27. ->get();
  28. $user = AuthService::current($request);
  29. if ($user) {
  30. foreach ($result as $key => $value) {
  31. $curr = Like::where([
  32. 'target_id' => $request->input('target_id'),
  33. 'type' => $value->type,
  34. 'user_id' => $user['user_uid'],
  35. ])->first();
  36. if ($curr) {
  37. $result[$key]->selected = true;
  38. $result[$key]->my_id = $curr->id;
  39. }
  40. }
  41. }
  42. return $this->ok($result);
  43. break;
  44. case 'target':
  45. $table = Like::where('target_id', $request->input('target_id'));
  46. break;
  47. default:
  48. // code...
  49. break;
  50. }
  51. if ($request->has('type')) {
  52. $table = $table->where('type', $request->input('type'));
  53. }
  54. $count = $table->count();
  55. $result = $table->get();
  56. return $this->ok([
  57. 'rows' => LikeResource::collection($result),
  58. 'count' => $count,
  59. ]);
  60. }
  61. /**
  62. * Store a newly created resource in storage.
  63. *
  64. * @return Response
  65. */
  66. public function store(Request $request)
  67. {
  68. //
  69. $user = AuthService::current($request);
  70. if (! $user) {
  71. return $this->error(__('auth.failed'));
  72. }
  73. $param = $request->all();
  74. $user_id = $request->input('user_id', $user['user_uid']);
  75. $like = Like::firstOrNew(
  76. [
  77. 'type' => $param['type'],
  78. 'target_id' => $param['target_id'],
  79. 'target_type' => $param['target_type'],
  80. 'user_id' => $user_id,
  81. ],
  82. [
  83. 'id' => Str::uuid(),
  84. ]
  85. );
  86. $like->save();
  87. $output = [
  88. 'id' => $like->id,
  89. 'type' => $param['type'],
  90. 'target_id' => $param['target_id'],
  91. 'target_type' => $param['target_type'],
  92. 'user_id' => $user_id,
  93. 'count' => Like::where('target_id', $param['target_id'])
  94. ->where('type', $param['type'])->count(),
  95. 'selected' => true,
  96. 'my_id' => $like->id,
  97. 'user' => UserApi::getByUuid($user_id),
  98. ];
  99. return $this->ok($output);
  100. }
  101. /**
  102. * Display the specified resource.
  103. *
  104. * @return Response
  105. */
  106. public function show(Like $like)
  107. {
  108. //
  109. }
  110. /**
  111. * Update the specified resource in storage.
  112. *
  113. * @return Response
  114. */
  115. public function update(Request $request, Like $like)
  116. {
  117. //
  118. }
  119. /**
  120. * Remove the specified resource from storage.
  121. *
  122. * @return Response
  123. */
  124. public function destroy(Request $request, Like $like)
  125. {
  126. //
  127. $user = AuthService::current($request);
  128. if (! $user) {
  129. return $this->error(__('auth.failed'));
  130. }
  131. if ($like->user_id === $user['user_uid']) {
  132. // 移除自己
  133. $delete = $like->delete();
  134. if ($delete) {
  135. $output = [
  136. 'type' => $like['type'],
  137. 'count' => Like::where('target_id', $like['target_id'])
  138. ->where('type', $like['type'])->count(),
  139. 'selected' => false,
  140. ];
  141. return $this->ok($output);
  142. } else {
  143. $this->error('未知错误', 200, 200);
  144. }
  145. } else {
  146. return $this->error(_('auth.failed'), 403, 403);
  147. }
  148. }
  149. public function delete(Request $request)
  150. {
  151. if (! isset($_COOKIE['user_uid'])) {
  152. return $this->error('no login');
  153. }
  154. $param = [
  155. 'id' => $request->input('id'),
  156. 'user_id' => $_COOKIE['user_uid'],
  157. ];
  158. $del = Like::where($param)->delete();
  159. $count = Like::where('target_id', $request->input('target_id'))
  160. ->where('type', $request->input('type'))
  161. ->count();
  162. return $this->ok([
  163. 'deleted' => $del,
  164. 'count' => $count,
  165. ]);
  166. }
  167. }