48 lines
No EOL
1.2 KiB
PHP
48 lines
No EOL
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class FormatApiResponse
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
$response = $next($request);
|
|
|
|
if ($response instanceof JsonResponse && !$this->isSwaggerRequest($request)) {
|
|
$data = $response->getData(true);
|
|
|
|
$formatted = [
|
|
'success' => $response->getStatusCode() < 400,
|
|
'message' => $data['message'] ?? ($response->getStatusCode() < 400 ? 'Success' : 'Error'),
|
|
];
|
|
|
|
if (isset($data['data'])) {
|
|
$formatted['data'] = $data['data'];
|
|
}
|
|
|
|
if (isset($data['errors'])) {
|
|
$formatted['errors'] = $data['errors'];
|
|
}
|
|
|
|
if (isset($data['pagination'])) {
|
|
$formatted['pagination'] = $data['pagination'];
|
|
}
|
|
|
|
$response->setData($formatted);
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
private function isSwaggerRequest(Request $request): bool
|
|
{
|
|
return str_starts_with($request->path(), 'api/documentation');
|
|
}
|
|
}
|