diff --git a/Modules/Api/app/Http/Controllers/ApiController.php b/Modules/Api/app/Http/Controllers/ApiController.php index f9cc7b2..24bcc4d 100644 --- a/Modules/Api/app/Http/Controllers/ApiController.php +++ b/Modules/Api/app/Http/Controllers/ApiController.php @@ -2,19 +2,25 @@ namespace Modules\Api\Http\Controllers; +use App\Http\Controllers\BaseController; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -class ApiController extends Controller +class ApiController extends BaseController { /** * Display a listing of the resource. */ public function index() { - return response()->json(['message' => 'Inline route test']); + $user = \App\Models\User::find(0); + if (!$user) { + return $this->errorResponse('User not found', 404); + } + + return $this->successResponse($user, 'User fetched successfully'); } /** @@ -22,20 +28,20 @@ class ApiController extends Controller */ public function create() { - return view('api::create'); + return $this->successResponse("Success Call Create"); } /** * Store a newly created resource in storage. */ - public function store(Request $request) {} + public function store(Request $request) { return $this->successResponse("Success Call Store"); } /** * Show the specified resource. */ public function show($id) { - return view('api::show'); + return $this->successResponse("Success Call Show"); } /** @@ -43,7 +49,7 @@ class ApiController extends Controller */ public function edit($id) { - return view('api::edit'); + return $this->successResponse("Success Call Edit"); } /** diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php new file mode 100644 index 0000000..d5a63f6 --- /dev/null +++ b/app/Http/Controllers/BaseController.php @@ -0,0 +1,138 @@ +json([ + 'status' => 'success', + 'message' => $message, + 'data' => $data, + ], $code); + } + + /** + * 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 + { + return response()->json([ + 'status' => 'error', + 'message' => $message, + 'errors' => $errors, + ], $code); + } + + /** + * 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) + { + 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) + { + 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. + * + * @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 = []) + { + if ($request->expectsJson()) { + return $this->successResponse([], $message); + } + + return redirect()->route($route, $routeParams)->with('success', $message); + } + + /** + * Handle unauthorized access responses. + * + * @param Request $request + * @param string $message + * @return JsonResponse|RedirectResponse + */ + protected function unauthorizedResponse(Request $request, string $message = 'Unauthorized') + { + if ($request->expectsJson()) { + return $this->errorResponse($message, 403); + } + + return redirect()->route('login')->with('error', $message); + } + + /** + * 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 response()->view('errors.404', ['message' => $message], 404); + } +}