danielgnh / headless-blog-backend

0 stars 0 forks source link

PostController.php #1

Open danielgnh opened 5 months ago

danielgnh commented 5 months ago

Mach das rein in PostController im vendor/firefly/filament-blog/src/http/controllers/

danielgnh commented 5 months ago

`<?php

namespace Firefly\FilamentBlog\Http\Controllers;

use Firefly\FilamentBlog\Facades\SEOMeta; use Firefly\FilamentBlog\Models\NewsLetter; use Firefly\FilamentBlog\Models\Post; use Firefly\FilamentBlog\Models\ShareSnippet; use Illuminate\Http\Request;

class PostController extends Controller { public function index(Request $request) { SEOMeta::setTitle('Blog | '.config('app.name')) ;

    $posts = Post::query()->with(['categories', 'user', 'tags'])
        ->published()
        ->paginate(10);

    return response()->json($posts);
}

public function allPosts()
{
    SEOMeta::setTitle('All posts | '.config('app.name')) ;

    $posts = Post::query()->with(['categories', 'user'])
        ->published()
        ->paginate(20);

    return response()->json($posts);
}

public function search(Request $request)
{
    SEOMeta::setTitle('Search result for '.$request->get('query'));

    $request->validate([
        'query' => 'required',
    ]);
    $searchedPosts = Post::query()
        ->with(['categories', 'user'])
        ->published()
        ->whereAny(['title', 'sub_title'], 'like', '%'.$request->get('query').'%')
        ->paginate(10)->withQueryString();

    return response()->json($searchedPosts);
}

public function show(Post $post)
{

    SEOMeta::setTitle($post->seoDetail?->title);

    SEOMeta::setDescription($post->seoDetail?->description);

    SEOMeta::setKeywords($post->seoDetail->keywords ?? []);

    $shareButton = ShareSnippet::query()->active()->first();
    $post->load(['user', 'categories', 'tags', 'comments' => fn ($query) => $query->approved(), 'comments.user']);

    return response()->json($post);
}

public function subscribe(Request $request)
{
    $request->validate([
        'email' => 'required|email|unique:news_letters,email',
    ], [
        'email.unique' => 'You have already subscribed',
    ]);
    NewsLetter::create([
        'email' => $request->email,
    ]);

    return response()->json(['message' => 'You have successfully subscribed to our news letter']);
}

} `