diff --git a/composer.json b/composer.json index a7871f5..3f4b3cc 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ } ], "require": { - "php": ">=8.0", + "php": ">=8.1", "laravel/framework": ">=8.0" }, "config": { diff --git a/src/Json.php b/src/Json.php index 28af825..78b370e 100644 --- a/src/Json.php +++ b/src/Json.php @@ -2,26 +2,36 @@ namespace Pharaonic\Laravel\Jsonable; +use Illuminate\Http\Resources\Json\JsonResource; +use Pharaonic\Laravel\Jsonable\Exceptions\Exception; + /** * Json Responser - * + * * @method \Illuminate\Http\JsonResponse success * @method \Illuminate\Http\JsonResponse errors * @method \Illuminate\Http\JsonResponse exception - * + * * @author Moamen Eltouny + * @author Hatem Elsaid * @package pharoanic/laravel-jsonable * @version 0.0.7 */ class Json { - public function success(array $data, ?string $message = null, ?array $extra = [], int $status = 200, array $headers = []) + public function success($data, ?string $message = null, ?array $extra = [], int $status = 200, array $headers = []) { + if ($data instanceof JsonResource) { + $data = $data->toArray(request()); + } elseif (!is_array($data)) { + throw new \Exception('You have to pass $data as JsonResource or Array.'); + } + return response()->json([ - 'success' => true, - 'message' => $message, - 'data' => $data - ] + ($extra ?? []), $status, $headers); + 'success' => true, + 'message' => $message, + 'data' => $data + ] + ($extra ?? []), $status, $headers); } public function errors(array $errors, ?string $code, ?string $message = null, ?array $extra = [], int $status = 400, array $headers = []) @@ -33,7 +43,7 @@ public function errors(array $errors, ?string $code, ?string $message = null, ?a $errs = $errs[0]; return (object)[ - 'key' => $key, + 'key' => $key, 'value' => $errs ]; }, array_keys($errors), array_values($errors))); @@ -45,26 +55,26 @@ public function errors(array $errors, ?string $code, ?string $message = null, ?a // RESPONES return response()->json([ - 'success' => false, - 'code' => $code, - 'message' => $message, - 'errors' => $errors - ] + ($extra ?? []), $status, $headers); + 'success' => false, + 'code' => $code, + 'message' => $message, + 'errors' => $errors + ] + ($extra ?? []), $status, $headers); } public function exception(\Throwable $exception, ?string $code = null, ?string $message = null, ?array $extra = [], int $status = 400, array $headers = []) { return response()->json([ - 'success' => false, - 'code' => $code ?? $exception->getCode() ?? null, - 'message' => $message ?? $exception->getMessage(), - 'data' => (object) (app()->environment('local', 'staging') ? - [ - 'line' => $exception->getLine(), - 'file' => $exception->getFile(), - ] + (config('Pharaonic.jsonable.tracing', false) ? ['trace' => $exception->getTrace()] : []) - : [] - ) - ] + ($extra ?? []), $status, $headers); + 'success' => false, + 'code' => $code ?? $exception->getCode() ?? null, + 'message' => $message ?? $exception->getMessage(), + 'data' => (object)(app()->environment('local', 'staging') ? + [ + 'line' => $exception->getLine(), + 'file' => $exception->getFile(), + ] + (config('Pharaonic.jsonable.tracing', false) ? ['trace' => $exception->getTrace()] : []) + : [] + ) + ] + ($extra ?? []), $status, $headers); } }