Api error and Api response fix to prevent imbricate ApiV2 Responses

This commit is contained in:
Jérémy Munsch 2021-08-04 17:15:06 +02:00
parent 9118e43452
commit 6b56929222
2 changed files with 26 additions and 5 deletions

View file

@ -26,12 +26,22 @@ class ApiErrorException extends Exception
*/
protected $error;
/** @var string */
protected $message;
/** @var int */
protected $httpCode;
public function __construct(ApiError $error, int $httpCode = 400, Throwable $previous = null)
public function __construct(ApiError $error, int $httpCode = 400, string $message = '', Throwable $previous = null)
{
$this->error = $error;
$this->message = $message;
$this->httpCode = $httpCode;
parent::__construct($error->label, $error->value, $previous);
parent::__construct(
strlen($this->message) ? $this->message : $error->label,
$error->value,
$previous
);
}
/**

View file

@ -23,6 +23,7 @@ class ApiResponse
*/
public function handle(Request $request, Closure $next)
{
/** @var \Illuminate\Http\JsonResponse $response */
$response = $next($request);
$isApiV1Request = Helper::isRequestForApiV1($request);
@ -52,10 +53,20 @@ class ApiResponse
Log::error(sprintf('Could not increment stats %s', $e->getMessage()));
}
$data = $response->getData();
// Is reponse is already a V2ApiResponse then just return it
if (
isset($data->status) and
isset($data->data) and
isset($data->message) and
in_array($data->status, [ApiStatus::OK()->value, ApiStatus::KO()->value])
) {
return $response;
}
/** @ var \App\Enums\ApiStatus */
$status = intval($response->getStatusCode() / 100) == 2 ? ApiStatus::OK() : ApiStatus::KO();
$response->setData(new V2ApiResponse((object)$response->getData(), $status));
return $response;
return $response->setData(new V2ApiResponse((object)$response->getData(), $status));
}
}