ViewController.php 5.2 KB

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