2025-01-23 00:45:59 +01:00

60 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Http\Requests\Comment\DestroyCommentRequest;
use App\Http\Requests\Comment\ListCommentRequest;
use App\Http\Requests\Comment\StoreCommentRequest;
use App\Http\Requests\Comment\UpdateCommentRequest;
use App\Http\Resources\CommentCollection;
use App\Http\Resources\CommentResource;
use App\Http\Resources\PaginableResource;
use App\Services\Comment\PostCommentService;
use Illuminate\Http\JsonResponse;
class CommentController extends Controller
{
public function __construct(
private readonly PostCommentService $commentService,
) {
}
public function list(ListCommentRequest $request, int $postId, int $page): JsonResponse
{
$comments = $this->commentService->fetchComments(
$postId,
$page,
$request->filters(),
$request->order()
);
return response()->json(PaginableResource::make($comments, CommentCollection::class));
}
public function store(StoreCommentRequest $request, int $postId): JsonResponse
{
return response()->json(CommentResource::make($this->commentService->storeComment($request->all(), $postId)), 201);
}
public function update(UpdateCommentRequest $request, int $postId, int $id): JsonResponse
{
$comment = $this->commentService->updateComment($request->all(), $postId, $id);
if ($comment === null) {
return response()->json(null, 404);
}
return response()->json(CommentResource::make($comment));
}
public function destroy(DestroyCommentRequest $post, int $postId, int $id): JsonResponse
{
$isSuccessfullyDeleted = $this->commentService->deleteComment($postId, $id);
return match ($isSuccessfullyDeleted) {
false => response()->json(null, 404),
true => response()->json(null, 204),
};
}
}