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); } }