2024-07-29 22:06:57 +02:00

110 lines
2.2 KiB
PHP

<?php
namespace Khofmann\ApiError;
use Exception;
/**
* Facade for common API errors
*/
class ApiError extends Exception
{
private function __construct($message = "", $code = 0)
{
parent::__construct($message, $code);
}
/**
* Error for missing fields
*
* @param array $fields Array of strings denoting which fields were missing
*/
public static function missingField(array $fields): ApiError
{
return new ApiError(json_encode([
"code" => "MissingField",
"fields" => $fields,
]), 400);
}
/**
* Error for duplicates
*
* @param string entity Entity for which a duplicate exists
*/
public static function duplicate(string $entity): ApiError
{
return new ApiError(json_encode([
"code" => "Duplicate",
"entity" => $entity,
]), 400);
}
/**
* Error for missing permissions
*
* @param string message Message specifics
*/
public static function notAllowed(string $message)
{
return new ApiError(json_encode([
"code" => "NotAllowed",
"message" => $message,
]), 401);
}
/**
* Error for missing authentication
*
* @param string $message Message specifics
*/
public static function unauthorized(string $message)
{
return new ApiError(json_encode([
"code" => "Unauthorized",
"message" => $message,
]), 401);
}
/**
* Error for not found
*
* @param string entity Entity for which a duplicate exists
*/
public static function notFound(string $entity)
{
return new ApiError(json_encode([
"code" => "NotFound",
"entity" => $entity,
]), 404);
}
/**
* Generic error
*
* @param string message Message specifics
*/
public static function failed(string $message)
{
return new ApiError(json_encode([
"code" => "Failed",
"message" => $message,
]), 500);
}
/**
* Error for missing fields
*
* @param array $fields Array of strings denoting which fields failed
* @param array $fields Array of strings denoting why the fields failed
*/
public static function failedUpdate(array $fields, array $reasons)
{
return new ApiError(json_encode([
"code" => "FailedUpdate",
"fields" => $fields,
"reasons" => $reasons,
]), 500);
}
}