getMessage()) { default: throw $err; } } } /** * Posts PATCH handler * * Update a posts. * * Returns updated post. * * @param mixed $id ID of post to update * * @throws 401 Not authorized (trying to edit a different users post if not admin) * @throws 404 Post not found * @throws 500 Failed to update user */ 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 = Post::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::notAllowed("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; } } } /** * Posts DELETE handler * * Delete a post. Optional parameter is `l` (limit of list for which the returned pages is calculated). * * Returns deleted post and resulting amount of pages for a given limit. * * @param mixed $id ID of posts to delete * * @throws 404 Post not found */ public function delete($id): void { // Fetch and constrain all parameters. $limit = constrain(0, 30, intval(Input::get("l", 10))); // Try delete, 404 if post was not found. try { Response::json(Post::getByID($id)->delete($limit)); } catch (Exception $err) { switch ($err->getMessage()) { case "NotFound": throw ApiError::notFound("post"); default: throw $err; } } } }