ViewController.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\View;
  4. use App\Models\ProgressChapter;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Str;
  7. class ViewController extends Controller
  8. {
  9. private function getTargetId($request){
  10. /*
  11. *根据target type 和不同类型的不同参数
  12. */
  13. $target_id = FALSE;
  14. switch ($request->get("target_type")) {
  15. case 'chapter-instance':
  16. # code...
  17. $target_id = $request->get("target_id");
  18. break;
  19. case 'chapter':
  20. # code...
  21. $channel = $request->get("channel");
  22. $book = $request->get("book");
  23. $para = $request->get("para");
  24. $target_id = ProgressChapter::where("channel_id",$request->get("channel"))
  25. ->where("book",$request->get("book"))
  26. ->where("para",$request->get("para"))
  27. ->value("uid");
  28. break;
  29. case 'article-instance':
  30. # code...
  31. break;
  32. case 'article':
  33. # code...
  34. break;
  35. default:
  36. $target_id = $request->get("target_id");
  37. # code...
  38. break;
  39. }
  40. if(Str::isUuid($target_id)){
  41. return $target_id;
  42. }else{
  43. return false;
  44. }
  45. }
  46. /**
  47. * Display a listing of the resource.
  48. *
  49. * @return \Illuminate\Http\Response
  50. */
  51. public function index(Request $request)
  52. {
  53. //
  54. switch ($request->get("view")) {
  55. case 'count':
  56. #获取 target id
  57. $target_id = $this->getTargetId($request);
  58. if($target_id){
  59. $count = View::where("target_id",$target_id)->count();
  60. }else{
  61. $count = 0;
  62. }
  63. return $this->ok($count);
  64. break;
  65. case 'user-recent':
  66. if(!isset($_COOKIE["user_uid"])){
  67. return $this->error("no login");
  68. }
  69. $user_id = $_COOKIE["user_uid"];
  70. $items = View::where("user_id",$user_id)
  71. ->orderBy('created_at','desc')
  72. ->take(10)->get();
  73. foreach ($items as $key => $item) {
  74. # 根据不同的资源类型查找标题
  75. switch ($item->target_type) {
  76. case 'chapter':
  77. # code...
  78. $items[$key]['title'] = ProgressChapter::where('uid',$item->target_id)
  79. ->value('title');
  80. break;
  81. default:
  82. # code...
  83. $items[$key]['title'] = "unknow";
  84. break;
  85. }
  86. }
  87. return $this->ok($items);
  88. break;
  89. default:
  90. # code...
  91. break;
  92. }
  93. }
  94. /**
  95. * Store a newly created resource in storage.
  96. *
  97. * @param \Illuminate\Http\Request $request
  98. * @return \Illuminate\Http\Response
  99. */
  100. public function store(Request $request)
  101. {
  102. /*
  103. $rules = array(
  104. 'target_type' => 'required'
  105. );
  106. $validator = Validator::make($request->all(), $rules);
  107. // process the login
  108. if ($validator->fails()) {
  109. return $this->error($validator);
  110. }
  111. */
  112. //根据target type 获取 target id
  113. $target_id = $this->getTargetId($request);
  114. $clientIp = request()->ip();
  115. $param = [
  116. 'target_id' => $target_id,
  117. 'target_type' => $request->get("target_type"),
  118. ];
  119. if(isset($_COOKIE['user_uid'])){
  120. //已经登陆
  121. $user_id = $_COOKIE['user_uid'];
  122. $param['user_id'] = $user_id;
  123. }else{
  124. $param['user_ip'] = $clientIp;
  125. }
  126. $new = View::firstOrNew($param);
  127. $new->user_ip = $clientIp;
  128. $new->save();
  129. $count = View::where("target_id",$new->target_id)->count();
  130. return $this->ok($count);
  131. }
  132. /**
  133. * Display the specified resource.
  134. *
  135. * @param \App\Models\View $view
  136. * @return \Illuminate\Http\Response
  137. */
  138. public function show(View $view)
  139. {
  140. //
  141. }
  142. /**
  143. * Update the specified resource in storage.
  144. *
  145. * @param \Illuminate\Http\Request $request
  146. * @param \App\Models\View $view
  147. * @return \Illuminate\Http\Response
  148. */
  149. public function update(Request $request, View $view)
  150. {
  151. //
  152. }
  153. /**
  154. * Remove the specified resource from storage.
  155. *
  156. * @param \App\Models\View $view
  157. * @return \Illuminate\Http\Response
  158. */
  159. public function destroy(View $view)
  160. {
  161. //
  162. }
  163. }