authService = $authService; } /** * Display a listing of the resource. * * @return \Illuminate\Http\JsonResponse */ public function index() { $query = BlogArticle::orderBy('date', 'desc'); if (!$this->authService->isAuthenticated()) { $query = $query->where('published', true); } $data = $query->paginate(25); return response()->json($data); } /** * Display a list of recent articles. * * @return \Illuminate\Http\JsonResponse */ public function recent() { $query = BlogArticle::orderBy('date', 'desc'); if (!$this->authService->isAuthenticated()) { $query = $query->where('published', true); } $data = $query->paginate(request()->get('limit', 5)); return response()->json($data); } /** * Display a list of popular articles. * * @return \Illuminate\Http\JsonResponse */ public function popular() { $data = BlogArticle::select() ->orderByUniqueViews('desc') ->orderBy('date', 'desc') ->where('published', true) ->limit(5) ->get() ; return response()->json($data); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\BlogArticleRequest $request * @return \Illuminate\Http\JsonResponse */ public function store(BlogArticleRequest $request) { $article = BlogArticle::create($request->all()); return response()->json($article, 201); } /** * Display the specified resource. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\JsonResponse */ public function show(Request $request, int $id) { $blogArticle = BlogArticle::withCount('views')->find($id); if ($blogArticle === null) { abort(404); } if (!$this->authService->isAuthenticated()) { if (!$blogArticle->published) { abort(404); } $domain = $request->headers->get('referer') ?: $request->headers->get('origin'); if ($domain !== null) { views($blogArticle) ->cooldown(now()->addHour()) ->record(); } } return response()->json($blogArticle); } /** * Update the specified resource in storage. * * @param \App\Http\Requests\BlogArticleRequest $request * @param \App\Models\BlogArticle $blogArticle * @return \Illuminate\Http\Response */ public function update(BlogArticleRequest $request, BlogArticle $blogArticle) { $blogArticle->update($request->all()); return response(null, 204); } /** * Update the published state of the specified resource in storage. * * @param \App\Http\Requests\BlogArticlePublishRequest $request * @param \App\Models\BlogArticle $blogArticle * @return \Illuminate\Http\Response */ public function publish(BlogArticlePublishRequest $request, BlogArticle $blogArticle) { $blogArticle->published = $request->get('published'); $blogArticle->save(); return response(null, 204); } /** * Remove the specified resource from storage. * * @param \App\Models\BlogArticle $blogArticle * @return \Illuminate\Http\Response */ public function destroy(BlogArticle $blogArticle) { if (!$this->authService->isAuthenticated()) { abort(401); } $blogArticle->delete(); return response(null, 204); } }