PHP-Course/exam/api/Post/Post.php
2024-07-23 01:12:05 +02:00

59 lines
1.4 KiB
PHP

<?php
namespace Api\Post;
use Exception;
use Khofmann\Api\Api;
use Khofmann\ApiError\ApiError;
use Khofmann\Input\Input;
use Khofmann\Models\Post\Post as MPost;
use Khofmann\Models\User\User;
use Khofmann\Request\Request;
use Khofmann\Response\Response;
class Post extends Api
{
public function patch($id): void
{
// Fetch all inputs.
$content = Input::patch("content");
// Fetch authed user.
$self = User::getByToken(Request::token());
try {
// Try fetch the post in question, 404 if not found.
$post = MPost::getByID($id);
// Throw 400 if we aren't admin but trying to edit another users post.
if (!$self->getIsAdmin() && $post->getUser()->getID() !== $self->getID()) throw ApiError::unauthorized("Not allowed");
// Try update.
Response::json($post->update($content));
} catch (Exception $err) {
switch ($err->getMessage()) {
case "NotFound":
throw ApiError::notFound("post");
default:
// Due to how the failed field is handled, it's ApiError is inside the models update
throw $err;
}
}
}
public function delete($id): void
{
// Try delete, 404 if post was not found.
try {
Response::json(MPost::getByID($id)->delete());
} catch (Exception $err) {
switch ($err->getMessage()) {
case "NotFound":
throw ApiError::notFound("post");
default:
throw $err;
}
}
}
}