%PDF- %PDF-
Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/ |
Current File : //home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/PostController.php |
<?php namespace App\Http\Controllers; use App\Models\Post; use App\Models\User; use App\Models\Posts\Like; use App\Http\Requests\StorePostLike; use App\Http\Resources\PostResource; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; class PostController extends Controller { /** * List all of the blog posts * * @param Request $request * @return PostResource $posts */ public function index(Request $request) { $total = $request->get('total'); $search = $request->get('search_query'); $categories = $request->get('categories'); $subjects = $request->get('subjects'); $authors = $request->get('authors'); $posts = Post::orderBy('created_at', 'desc') ->withCount('likes') ->orderBy('likes_count', 'desc') ->with('author', 'therapist', 'subjects', 'categories') ->where('is_published', true) ->when($search, function ($query, $search) { return $query->where('title', 'like' ,'%'.$search.'%') ->orWhere('slug', 'like' ,'%'.$search.'%') ->orWhere('content', 'like' ,'%'.$search.'%'); }) ->when($categories, function ($query, $categories) { return $query->whereHas('categories', function (Builder $query) use($categories) { return is_array($categories) ? $query->whereIn('categories.id', $categories) : $query->where('categories.id', $categories); }); }) ->when($subjects, function ($query, $subjects) { return $query->whereHas('subjects', function (Builder $query) use($subjects) { return is_array($subjects) ? $query->whereIn('subjects.id', $subjects) : $query->where('subjects.id', $subjects); }); }) ->when($authors, function ($query, $authors) { return $query->whereHas('author', function (Builder $query) use($authors) { return is_array($authors) ? $query->whereIn('id', $authors) : $query->where('id', $authors); }); }) ->paginate($total ?? 12); return PostResource::collection($posts); } /** * Like a blog post * * @param StorePostLike $request * @return PostResource $posts */ public function like($id, StorePostLike $request) { $post = Post::findOrFail($id); $post_like = Like::where('user_id', auth()->id()) ->where('post_id', $id) ->first(); if($post_like == null) { Like::create([ 'user_id' => auth()->id(), 'post_id' => $id ]); } else { $post_like->delete(); } return response()->json($post->likes()->count()); } /** * Show an individual blog post * * @param string $slug * @param Request $request * @return PostResource $post */ public function show($slug, Request $request) { $post = Post::where('slug', $slug) ->with('author', 'therapist') ->where('is_published', true) ->firstOrFail(); $related = Post::where('user_id', $post->author->id) ->where('id', '!=' , $post->id) ->orderBy('created_at', 'desc') ->with('author', 'therapist', 'subjects', 'categories') ->where('is_published', true) ->take(3) ->get(); return response()->json([ 'post' => new PostResource($post), 'related' => PostResource::collection($related) ]); } }