From 446b8787de6546575e2e96f2e85f84002d6b4a37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 26 Feb 2026 17:25:00 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[hr]=20=EC=82=AC=EC=9B=90=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D/=EC=88=98=EC=A0=95=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=ED=99=94=EB=A9=B4=20=ED=91=9C=EC=8B=9C=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - API 컨트롤러 store/update/destroy에 try-catch 추가 - debug 모드에서 상세 에러 메시지 포함 응답 - create/edit 뷰에 showToast 기반 에러 표시 추가 - 422 validation 에러 필드별 메시지 표시 - 500 서버 에러 시 사용자 친화적 메시지 표시 --- .../Api/Admin/HR/EmployeeController.php | 99 +++++++++++++------ resources/views/hr/employees/create.blade.php | 49 +++++++-- resources/views/hr/employees/edit.blade.php | 47 +++++++-- 3 files changed, 152 insertions(+), 43 deletions(-) diff --git a/app/Http/Controllers/Api/Admin/HR/EmployeeController.php b/app/Http/Controllers/Api/Admin/HR/EmployeeController.php index 600db986..806e6c59 100644 --- a/app/Http/Controllers/Api/Admin/HR/EmployeeController.php +++ b/app/Http/Controllers/Api/Admin/HR/EmployeeController.php @@ -77,13 +77,23 @@ public function store(Request $request): JsonResponse 'emergency_contact' => 'nullable|string|max:100', ]); - $employee = $this->employeeService->createEmployee($validated); + try { + $employee = $this->employeeService->createEmployee($validated); - return response()->json([ - 'success' => true, - 'message' => '사원이 등록되었습니다.', - 'data' => $employee, - ], 201); + return response()->json([ + 'success' => true, + 'message' => '사원이 등록되었습니다.', + 'data' => $employee, + ], 201); + } catch (\Throwable $e) { + report($e); + + return response()->json([ + 'success' => false, + 'message' => '사원 등록 중 오류가 발생했습니다.', + 'error' => config('app.debug') ? $e->getMessage() : null, + ], 500); + } } /** @@ -129,20 +139,30 @@ public function update(Request $request, int $id): JsonResponse 'emergency_contact' => 'nullable|string|max:100', ]); - $employee = $this->employeeService->updateEmployee($id, $validated); + try { + $employee = $this->employeeService->updateEmployee($id, $validated); + + if (! $employee) { + return response()->json([ + 'success' => false, + 'message' => '사원 정보를 찾을 수 없습니다.', + ], 404); + } + + return response()->json([ + 'success' => true, + 'message' => '사원 정보가 수정되었습니다.', + 'data' => $employee, + ]); + } catch (\Throwable $e) { + report($e); - if (! $employee) { return response()->json([ 'success' => false, - 'message' => '사원 정보를 찾을 수 없습니다.', - ], 404); + 'message' => '사원 수정 중 오류가 발생했습니다.', + 'error' => config('app.debug') ? $e->getMessage() : null, + ], 500); } - - return response()->json([ - 'success' => true, - 'message' => '사원 정보가 수정되었습니다.', - 'data' => $employee, - ]); } /** @@ -150,25 +170,42 @@ public function update(Request $request, int $id): JsonResponse */ public function destroy(Request $request, int $id): JsonResponse|Response { - $result = $this->employeeService->deleteEmployee($id); + try { + $result = $this->employeeService->deleteEmployee($id); + + if (! $result) { + if ($request->header('HX-Request')) { + return response()->json([ + 'success' => false, + 'message' => '사원 정보를 찾을 수 없습니다.', + ], 404); + } + + return response()->json([ + 'success' => false, + 'message' => '사원 정보를 찾을 수 없습니다.', + ], 404); + } + + if ($request->header('HX-Request')) { + $employees = $this->employeeService->getEmployees($request->all(), $request->integer('per_page', 20)); + + return response(view('hr.employees.partials.table', compact('employees'))); + } + + return response()->json([ + 'success' => true, + 'message' => '퇴직 처리되었습니다.', + ]); + } catch (\Throwable $e) { + report($e); - if (! $result) { return response()->json([ 'success' => false, - 'message' => '사원 정보를 찾을 수 없습니다.', - ], 404); + 'message' => '퇴직 처리 중 오류가 발생했습니다.', + 'error' => config('app.debug') ? $e->getMessage() : null, + ], 500); } - - if ($request->header('HX-Request')) { - $employees = $this->employeeService->getEmployees($request->all(), $request->integer('per_page', 20)); - - return response(view('hr.employees.partials.table', compact('employees'))); - } - - return response()->json([ - 'success' => true, - 'message' => '퇴직 처리되었습니다.', - ]); } /** diff --git a/resources/views/hr/employees/create.blade.php b/resources/views/hr/employees/create.blade.php index 3916cc12..30cb6b64 100644 --- a/resources/views/hr/employees/create.blade.php +++ b/resources/views/hr/employees/create.blade.php @@ -192,13 +192,50 @@ class="px-6 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition- @push('scripts') diff --git a/resources/views/hr/employees/edit.blade.php b/resources/views/hr/employees/edit.blade.php index 0b3f4649..5232934c 100644 --- a/resources/views/hr/employees/edit.blade.php +++ b/resources/views/hr/employees/edit.blade.php @@ -196,13 +196,48 @@ class="px-6 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition- @push('scripts')