|
|
|
@ -2,26 +2,22 @@ |
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers; |
|
|
|
|
|
|
|
|
|
use App\Enums\HttpStatus; |
|
|
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; |
|
|
|
|
use Illuminate\Foundation\Validation\ValidatesRequests; |
|
|
|
|
use Illuminate\Routing\Controller; |
|
|
|
|
use Illuminate\Routing\Controller as LaravelController; |
|
|
|
|
use Illuminate\Http\JsonResponse; |
|
|
|
|
use Illuminate\Http\RedirectResponse; |
|
|
|
|
use Illuminate\Http\Request; |
|
|
|
|
|
|
|
|
|
class BaseController extends Controller |
|
|
|
|
class BaseController extends LaravelController |
|
|
|
|
{ |
|
|
|
|
use AuthorizesRequests, ValidatesRequests; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Return a standardized success JSON response for API requests. |
|
|
|
|
* |
|
|
|
|
* @param mixed $data |
|
|
|
|
* @param string $message |
|
|
|
|
* @param int $code |
|
|
|
|
* @return JsonResponse |
|
|
|
|
*/ |
|
|
|
|
protected function successResponse($data = null, string $message = 'Success', int $code = 200): JsonResponse |
|
|
|
|
protected function successResponse($data = null, string $message = 'Success', int $code = HttpStatus::OK): JsonResponse |
|
|
|
|
{ |
|
|
|
|
return response()->json([ |
|
|
|
|
'status' => 'success', |
|
|
|
@ -32,13 +28,8 @@ class BaseController extends Controller |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Return a standardized error JSON response for API requests. |
|
|
|
|
* |
|
|
|
|
* @param string $message |
|
|
|
|
* @param int $code |
|
|
|
|
* @param array $errors |
|
|
|
|
* @return JsonResponse |
|
|
|
|
*/ |
|
|
|
|
protected function errorResponse(string $message = 'Error', int $code = 400, array $errors = []): JsonResponse |
|
|
|
|
protected function errorResponse(string $message = 'Error', int $code = HttpStatus::BAD_REQUEST, array $errors = []): JsonResponse |
|
|
|
|
{ |
|
|
|
|
return response()->json([ |
|
|
|
|
'status' => 'error', |
|
|
|
@ -49,33 +40,20 @@ class BaseController extends Controller |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Automatically respond with JSON or Web view based on request type. |
|
|
|
|
* |
|
|
|
|
* @param Request $request |
|
|
|
|
* @param mixed $data |
|
|
|
|
* @param string $message |
|
|
|
|
* @param int $code |
|
|
|
|
* @return JsonResponse|\Illuminate\View\View |
|
|
|
|
*/ |
|
|
|
|
protected function respond(Request $request, $data = null, string $message = 'Success', int $code = 200) |
|
|
|
|
protected function respond(Request $request, $data = null, string $message = 'Success', int $code = HttpStatus::OK) |
|
|
|
|
{ |
|
|
|
|
if ($request->expectsJson()) { |
|
|
|
|
return $this->successResponse($data, $message, $code); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// You can customize the view as needed. |
|
|
|
|
return view('response.success', compact('data', 'message')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Automatically handle error response for Web or API. |
|
|
|
|
* |
|
|
|
|
* @param Request $request |
|
|
|
|
* @param string $message |
|
|
|
|
* @param array $errors |
|
|
|
|
* @param int $code |
|
|
|
|
* @return JsonResponse|RedirectResponse |
|
|
|
|
*/ |
|
|
|
|
protected function respondError(Request $request, string $message = 'Error', array $errors = [], int $code = 400) |
|
|
|
|
protected function respondError(Request $request, string $message = 'Error', array $errors = [], int $code = HttpStatus::BAD_REQUEST) |
|
|
|
|
{ |
|
|
|
|
if ($request->expectsJson()) { |
|
|
|
|
return $this->errorResponse($message, $code, $errors); |
|
|
|
@ -88,14 +66,8 @@ class BaseController extends Controller |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Redirect the response to a route or return success JSON for API. |
|
|
|
|
* |
|
|
|
|
* @param Request $request |
|
|
|
|
* @param string $route |
|
|
|
|
* @param string $message |
|
|
|
|
* @param array $routeParams |
|
|
|
|
* @return JsonResponse|RedirectResponse |
|
|
|
|
*/ |
|
|
|
|
protected function redirectResponse(Request $request, string $route, string $message = 'Operation successful', array $routeParams = []) |
|
|
|
|
protected function redirectResponse(Request $request, string $route, string $message = 'Operation successful', array $routeParams = []): JsonResponse|RedirectResponse |
|
|
|
|
{ |
|
|
|
|
if ($request->expectsJson()) { |
|
|
|
|
return $this->successResponse([], $message); |
|
|
|
@ -106,15 +78,11 @@ class BaseController extends Controller |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Handle unauthorized access responses. |
|
|
|
|
* |
|
|
|
|
* @param Request $request |
|
|
|
|
* @param string $message |
|
|
|
|
* @return JsonResponse|RedirectResponse |
|
|
|
|
*/ |
|
|
|
|
protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized') |
|
|
|
|
protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized'): JsonResponse|RedirectResponse |
|
|
|
|
{ |
|
|
|
|
if ($request->expectsJson()) { |
|
|
|
|
return $this->errorResponse($message, 403); |
|
|
|
|
return $this->errorResponse($message, HttpStatus::FORBIDDEN); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return redirect()->route('login')->with('error', $message); |
|
|
|
@ -122,17 +90,13 @@ class BaseController extends Controller |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Handle not found (404) responses. |
|
|
|
|
* |
|
|
|
|
* @param Request $request |
|
|
|
|
* @param string $message |
|
|
|
|
* @return JsonResponse|\Illuminate\View\View |
|
|
|
|
*/ |
|
|
|
|
protected function notFoundResponse(Request $request, string $message = 'Not Found') |
|
|
|
|
{ |
|
|
|
|
if ($request->expectsJson()) { |
|
|
|
|
return $this->errorResponse($message, 404); |
|
|
|
|
return $this->errorResponse($message, HttpStatus::NOT_FOUND); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return response()->view('errors.404', ['message' => $message], 404); |
|
|
|
|
return response()->view('errors.404', ['message' => $message], HttpStatus::NOT_FOUND); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|