49 lines
1.4 KiB
PHP
49 lines
1.4 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Support\Api;
|
|
|
|
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Resources\Json\JsonResource;
|
|
|
|
final class ApiResponse
|
|
{
|
|
public static function success(mixed $data = null, ?string $message = null, array $meta = [], int $status = 200): JsonResponse
|
|
{
|
|
if ($data instanceof JsonResource) {
|
|
$data = $data->resolve(request());
|
|
}
|
|
|
|
if ($data instanceof LengthAwarePaginator) {
|
|
$meta = array_merge($meta, [
|
|
'pagination' => [
|
|
'current_page' => $data->currentPage(),
|
|
'per_page' => $data->perPage(),
|
|
'total' => $data->total(),
|
|
'last_page' => $data->lastPage(),
|
|
],
|
|
]);
|
|
$data = $data->items();
|
|
}
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'data' => $data,
|
|
'message' => $message,
|
|
'meta' => $meta,
|
|
'errors' => null,
|
|
], $status);
|
|
}
|
|
|
|
public static function error(string $message, int $status, array $errors = [], array $meta = []): JsonResponse
|
|
{
|
|
return response()->json([
|
|
'success' => false,
|
|
'data' => null,
|
|
'message' => $message,
|
|
'meta' => $meta,
|
|
'errors' => $errors ?: null,
|
|
], $status);
|
|
}
|
|
}
|