ArticleController.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Article;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Str;
  6. use App\Http\Resources\ArticleResource;
  7. use App\Http\Api\AuthApi;
  8. use Illuminate\Support\Facades\DB;
  9. class ArticleController 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. $indexCol = ['uid','title','subtitle','summary','owner','lang','status','updated_at','created_at'];
  20. switch ($request->get('view')) {
  21. case 'studio':
  22. # 获取studio内所有channel
  23. $user = \App\Http\Api\AuthApi::current($request);
  24. if($user){
  25. //判断当前用户是否有指定的studio的权限
  26. if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('name'))){
  27. $table = Article::select($indexCol)->where('owner', $user["user_uid"]);
  28. }else{
  29. return $this->error(__('auth.failed'));
  30. }
  31. }else{
  32. return $this->error(__('auth.failed'));
  33. }
  34. break;
  35. }
  36. //处理搜索
  37. if($request->has("search") && !empty($request->has("search"))){
  38. $table = $table->where('title', 'like', "%".$request->get("search")."%");
  39. }
  40. //获取记录总条数
  41. $count = $table->count();
  42. //处理排序
  43. if(isset($_GET["order"]) && isset($_GET["dir"])){
  44. $table = $table->orderBy($_GET["order"],$_GET["dir"]);
  45. }else{
  46. //默认排序
  47. $table = $table->orderBy('updated_at','desc');
  48. }
  49. //处理分页
  50. if($request->has("limit")){
  51. if($request->has("offset")){
  52. $offset = $request->get("offset");
  53. }else{
  54. $offset = 0;
  55. }
  56. $table = $table->skip($offset)->take($request->get("limit"));
  57. }
  58. //获取数据
  59. $result = $table->get();
  60. if($result){
  61. /*
  62. foreach ($result as $key => $value) {
  63. # 获取studio信息
  64. $studio = $userinfo->getName($value->owner_uid);
  65. $value->studio = [
  66. 'id'=>$value->owner_uid,
  67. 'nickName'=>$studio['nickname'],
  68. 'studioName'=>$studio['username'],
  69. 'avastar'=>'',
  70. 'owner' => [
  71. 'id'=>$value->owner_uid,
  72. 'nickName'=>$studio['nickname'],
  73. 'userName'=>$studio['username'],
  74. 'avastar'=>'',
  75. ]
  76. ];
  77. }*/
  78. return $this->ok(["rows"=>$result,"count"=>$count]);
  79. }else{
  80. return $this->error("没有查询到数据");
  81. }
  82. }
  83. /**
  84. * Store a newly created resource in storage.
  85. *
  86. * @param \Illuminate\Http\Request $request
  87. * @return \Illuminate\Http\Response
  88. */
  89. public function store(Request $request)
  90. {
  91. //
  92. $user = \App\Http\Api\AuthApi::current($request);
  93. if($user){
  94. //判断当前用户是否有指定的studio的权限
  95. if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('studio'))){
  96. //查询是否重复
  97. if(Article::where('title',$request->get('title'))->where('owner',$user['user_uid'])->exists()){
  98. return $this->error(__('validation.exists'));
  99. }else{
  100. $newOne = new Article;
  101. $newOne->id = app('snowflake')->id();
  102. $newOne->uid = Str::uuid();
  103. $newOne->title = $request->get('title');
  104. $newOne->lang = $request->get('lang');
  105. $newOne->owner = $user['user_uid'];
  106. $newOne->owner_id = $user['user_id'];
  107. $newOne->editor_id = $user['user_id'];
  108. $newOne->create_time = time()*1000;
  109. $newOne->modify_time = time()*1000;
  110. $newOne->save();
  111. return $this->ok($newOne);
  112. }
  113. }else{
  114. return $this->error(__('auth.failed'));
  115. }
  116. }else{
  117. return $this->error(__('auth.failed'));
  118. }
  119. }
  120. /**
  121. * Display the specified resource.
  122. * @param \Illuminate\Http\Request $request
  123. * @param \App\Models\Article $article
  124. * @return \Illuminate\Http\Response
  125. */
  126. public function show(Request $request,Article $article)
  127. {
  128. //
  129. if(!$article){
  130. return $this->error("no recorder");
  131. }
  132. if($article->status<30){
  133. //私有文章,判断权限
  134. $user = \App\Http\Api\AuthApi::current($request);
  135. if(!$user){
  136. //判断当前用户是否有指定的studio的权限
  137. return $this->error(__('auth.failed'));
  138. }
  139. if($user['user_uid'] !== $article->owner){
  140. //非所有者
  141. return $this->error(__('auth.failed'));
  142. }else{
  143. //TODO 判断是否协作
  144. }
  145. }
  146. return $this->ok(new ArticleResource($article));
  147. }
  148. /**
  149. * Update the specified resource in storage.
  150. *
  151. * @param \Illuminate\Http\Request $request
  152. * @param \App\Models\Article $article
  153. * @return \Illuminate\Http\Response
  154. */
  155. public function update(Request $request, Article $article)
  156. {
  157. //
  158. if($article){
  159. //鉴权
  160. $user = \App\Http\Api\AuthApi::current($request);
  161. if($user && $article->owner === $user["user_uid"]){
  162. $article->title = $request->get('title');
  163. $article->subtitle = $request->get('subtitle');
  164. $article->summary = $request->get('summary');
  165. $article->content = $request->get('content');
  166. $article->lang = $request->get('lang');
  167. $article->status = $request->get('status');
  168. $article->modify_time = time()*1000;
  169. $article->save();
  170. return $this->ok($article);
  171. }else{
  172. //鉴权失败
  173. //TODO 判断是否为协作
  174. return $this->error(__('auth.failed'));
  175. }
  176. }else{
  177. return $this->error("no recorder");
  178. }
  179. }
  180. /**
  181. * Remove the specified resource from storage.
  182. * @param \Illuminate\Http\Request $request
  183. * @param \App\Models\Article $article
  184. * @return \Illuminate\Http\Response
  185. */
  186. public function destroy(Request $request,Article $article)
  187. {
  188. //
  189. $user = AuthApi::current($request);
  190. if(!$user){
  191. return $this->error(__('auth.failed'));
  192. }
  193. //判断当前用户是否有指定的studio的权限
  194. if($user['user_uid'] !== $article->owner){
  195. return $this->error(__('auth.failed'));
  196. }
  197. $delete = 0;
  198. DB::transaction(function() use($article,$delete){
  199. //TODO 删除文集中的文章
  200. $delete = $article->delete();
  201. });
  202. return $this->ok($delete);
  203. }
  204. }