fix: [hr] 사원 등록/수정 에러 메시지 화면 표시 개선

- API 컨트롤러 store/update/destroy에 try-catch 추가
- debug 모드에서 상세 에러 메시지 포함 응답
- create/edit 뷰에 showToast 기반 에러 표시 추가
- 422 validation 에러 필드별 메시지 표시
- 500 서버 에러 시 사용자 친화적 메시지 표시
This commit is contained in:
김보곤
2026-02-26 17:25:00 +09:00
parent 51cc12b229
commit 2b3cb3bb92
3 changed files with 152 additions and 43 deletions

View File

@@ -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' => '퇴직 처리되었습니다.',
]);
}
/**