%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/
Upload File :
Create Path :
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)
        ]);
    }
}

Zerion Mini Shell 1.0