ArticleController.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Http\Controllers\Main;
  3. use App\Article;
  4. use App\Http\Controllers\Controller;
  5. use App\Like;
  6. use Validator;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Auth;
  9. class ArticleController extends Controller
  10. {
  11. public function store(Request $request)
  12. {
  13. $validate = Validator::make($request->all(), [
  14. "body" => ["required", "string", "max:1000"]
  15. ]);
  16. if ($validate->fails()) {
  17. return response()->json($validate->messages())->setStatusCode(400);
  18. }
  19. Article::create([
  20. "user_id" => Auth::id(),
  21. "body" => $request->body
  22. ]);
  23. return response()->json([
  24. "user" => [
  25. "id" => Auth::id(),
  26. "name" => Auth::user()->name,
  27. "surname" => Auth::user()->surname,
  28. "avatar_url" => Auth::user()->avatar_url
  29. ],
  30. "created_at" => date('d.m.Y')
  31. ]);
  32. }
  33. public function destroy(Request $request)
  34. {
  35. $article = Article::find($request->id);
  36. if (Auth::id() != $article->user_id) {
  37. return abort(403);
  38. }
  39. $article->delete();
  40. return redirect()->back();
  41. }
  42. public function like(Request $request)
  43. {
  44. $article = Article::find($request->id);
  45. if (!$article) return response()->json(["status" => false], 404);
  46. $like = Like::where('user_id', Auth::id())->where('post_id', $request->id)->where('type', 'article')->first();
  47. if ($like) {
  48. $like->status = ($like->status == 0) ? 1 : 0;
  49. $like->save();
  50. return response()->json(["status" => true, "action" => ($like->status == 1) ? "on" : "off"]);
  51. }
  52. Like::create([
  53. "user_id" => Auth::id(),
  54. "post_id" => $request->id,
  55. "type" => "article",
  56. "status" => 1,
  57. ]);
  58. return response()->json(["status" => true, "action" => "on"]);
  59. }
  60. }