LikeController.php 5.1 KB

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