You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.2 KiB
102 lines
3.2 KiB
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Enums\HttpStatus;
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
use Illuminate\Routing\Controller as LaravelController;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class BaseController extends LaravelController
|
|
{
|
|
use AuthorizesRequests, ValidatesRequests;
|
|
|
|
/**
|
|
* Return a standardized success JSON response for API requests.
|
|
*/
|
|
protected function successResponse($data = null, string $message = 'Success', int $code = HttpStatus::OK): JsonResponse
|
|
{
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $message,
|
|
'data' => $data,
|
|
], $code);
|
|
}
|
|
|
|
/**
|
|
* Return a standardized error JSON response for API requests.
|
|
*/
|
|
protected function errorResponse(string $message = 'Error', int $code = HttpStatus::BAD_REQUEST, array $errors = []): JsonResponse
|
|
{
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => $message,
|
|
'errors' => $errors,
|
|
], $code);
|
|
}
|
|
|
|
/**
|
|
* Automatically respond with JSON or Web view based on request type.
|
|
*/
|
|
protected function respond(Request $request, $data = null, string $message = 'Success', int $code = HttpStatus::OK)
|
|
{
|
|
if ($request->expectsJson()) {
|
|
return $this->successResponse($data, $message, $code);
|
|
}
|
|
|
|
return view('response.success', compact('data', 'message'));
|
|
}
|
|
|
|
/**
|
|
* Automatically handle error response for Web or API.
|
|
*/
|
|
protected function respondError(Request $request, string $message = 'Error', array $errors = [], int $code = HttpStatus::BAD_REQUEST)
|
|
{
|
|
if ($request->expectsJson()) {
|
|
return $this->errorResponse($message, $code, $errors);
|
|
}
|
|
|
|
return redirect()->back()
|
|
->withErrors($errors)
|
|
->withInput();
|
|
}
|
|
|
|
/**
|
|
* Redirect the response to a route or return success JSON for API.
|
|
*/
|
|
protected function redirectResponse(Request $request, string $route, string $message = 'Operation successful', array $routeParams = []): JsonResponse|RedirectResponse
|
|
{
|
|
if ($request->expectsJson()) {
|
|
return $this->successResponse([], $message);
|
|
}
|
|
|
|
return redirect()->route($route, $routeParams)->with('success', $message);
|
|
}
|
|
|
|
/**
|
|
* Handle unauthorized access responses.
|
|
*/
|
|
protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized'): JsonResponse|RedirectResponse
|
|
{
|
|
if ($request->expectsJson()) {
|
|
return $this->errorResponse($message, HttpStatus::FORBIDDEN);
|
|
}
|
|
|
|
return redirect()->route('login')->with('error', $message);
|
|
}
|
|
|
|
/**
|
|
* Handle not found (404) responses.
|
|
*/
|
|
protected function notFoundResponse(Request $request, string $message = 'Not Found')
|
|
{
|
|
if ($request->expectsJson()) {
|
|
return $this->errorResponse($message, HttpStatus::NOT_FOUND);
|
|
}
|
|
|
|
return response()->view('errors.404', ['message' => $message], HttpStatus::NOT_FOUND);
|
|
}
|
|
}
|
|
|