diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 48369d6..cdc851e 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -2,7 +2,14 @@ namespace App\Exceptions; +use Illuminate\Auth\AuthenticationException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Validation\ValidationException; +use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; +use Symfony\Component\HttpKernel\Exception\HttpException; +use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Throwable; use Illuminate\Support\Facades\Http; @@ -37,4 +44,79 @@ protected function sendSlackException(Throwable $e): void logger()->error('슬랙 전송 실패', ['message' => $ex->getMessage()]); } } + + public function render($request, Throwable $exception) + { + + if ($request->expectsJson()) { + // 400 Bad Request (예: ValidationException) + if ( + $exception instanceof ValidationException || + $exception instanceof BadRequestHttpException + ) { + return response()->json([ + 'success' => false, + 'message' => '필수 파라미터 누락', + 'data' => null, + ], 400); + } + + // 401 Unauthorized + if ($exception instanceof AuthenticationException) { + return response()->json([ + 'success' => false, + 'message' => '인증 실패', + 'data' => null, + ], 401); + } + + // 403 Forbidden + if ($exception instanceof AccessDeniedHttpException) { + return response()->json([ + 'success' => false, + 'message' => '권한 없음', + 'data' => null, + ], 403); + } + + // 404 Not Found + if ($exception instanceof NotFoundHttpException) { + return response()->json([ + 'success' => false, + 'message' => '존재하지 않는 URI 또는 데이터', + 'data' => null, + ], 404); + } + + // 405 Method Not Allowed + if ($exception instanceof MethodNotAllowedHttpException) { + return response()->json([ + 'success' => false, + 'message' => '허용되지 않는 메서드', + 'data' => null, + ], 405); + } + + // 500 Internal Server Error (기타 모든 에러) + if ( + $exception instanceof HttpException && + $exception->getStatusCode() === 500 + ) { + return response()->json([ + 'success' => false, + 'message' => '서버 에러', + 'data' => null, + ], 500); + } + + // 그 외 모든 예외 + return response()->json([ + 'success' => false, + 'message' => '서버 에러', + 'data' => null, + ], 500); + } + + return parent::render($request, $exception); + } } diff --git a/app/Http/Controllers/Api/V1/MemberController.php b/app/Http/Controllers/Api/V1/MemberController.php index 612dbf6..2ebc230 100644 --- a/app/Http/Controllers/Api/V1/MemberController.php +++ b/app/Http/Controllers/Api/V1/MemberController.php @@ -85,13 +85,6 @@ class MemberController extends Controller * ) * ) * ), - * - * @OA\Response(response=400, description="필수 파라미터 누락"), - * @OA\Response(response=401, description="인증 실패"), - * @OA\Response(response=403, description="권한 없음") - * @OA\Response(response=404, description="존재하지 않는 URI 또는 데이터") - * @OA\Response(response=405, description="허용되지 않는 메서드") - * @OA\Response(response=500, description="서버 에러") * ) */ public function index(Request $request) diff --git a/app/Swagger/v1/SAMInfo.php b/app/Swagger/v1/SAMInfo.php index 7791630..3f7562b 100644 --- a/app/Swagger/v1/SAMInfo.php +++ b/app/Swagger/v1/SAMInfo.php @@ -6,7 +6,7 @@ * @OA\Info( * version="1.0.0", * title="SAM API Documentation", - * description="SAM(Semi-Automatics Management) API 입니다.", + * description="===============================
[공통 에러 응답 포맷]
400: 필수 파라미터 누락
401: 인증 실패
403: 권한 없음
404: 존재하지 않는 URI 또는 데이터
405: 허용되지 않는 메서드
500: 서버 에러

모든 에러 응답 예시:
{
  "success": false,
  "message": "에러 메시지",
  "data": null
}
===============================", * @OA\Contact( * email="shine1324@gmail.com" * )