63 lines
1.8 KiB
PHP
63 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\StorePostRequest;
|
|
use App\Http\Requests\UpdatePostRequest;
|
|
use App\Http\Resources\PostResource;
|
|
use App\Models\Post;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
|
use Illuminate\Http\Response;
|
|
|
|
class PostController extends Controller
|
|
{
|
|
public function index(Request $request): AnonymousResourceCollection
|
|
{
|
|
$posts = Post::query()
|
|
->with(['user', 'category', 'tags'])
|
|
->when($request->string('status')->toString(), fn ($query, $status) => $query->where('status', $status))
|
|
->when($request->integer('category_id'), fn ($query, $categoryId) => $query->where('category_id', $categoryId))
|
|
->latest('created_at')
|
|
->paginate(20);
|
|
|
|
return PostResource::collection($posts);
|
|
}
|
|
|
|
public function store(StorePostRequest $request): PostResource
|
|
{
|
|
$post = Post::query()->create([
|
|
...$request->safe()->except('tags'),
|
|
'user_id' => $request->user()->id,
|
|
]);
|
|
|
|
$post->tags()->sync($request->safe()->input('tags', []));
|
|
|
|
return new PostResource($post->load(['user', 'category', 'tags']));
|
|
}
|
|
|
|
public function show(Post $post): PostResource
|
|
{
|
|
return new PostResource($post->load(['user', 'category', 'tags']));
|
|
}
|
|
|
|
public function update(UpdatePostRequest $request, Post $post): PostResource
|
|
{
|
|
$post->update($request->safe()->except('tags'));
|
|
|
|
if ($request->has('tags')) {
|
|
$post->tags()->sync($request->safe()->input('tags', []));
|
|
}
|
|
|
|
return new PostResource($post->load(['user', 'category', 'tags']));
|
|
}
|
|
|
|
public function destroy(Post $post): Response
|
|
{
|
|
$post->delete();
|
|
|
|
return response()->noContent();
|
|
}
|
|
}
|