feat: [hr] 슈퍼관리자 근태/신청 삭제 및 영구삭제 기능 추가

- AttendanceService: forceDeleteAttendance 메서드 추가
- LeaveService: deleteLeave(모든 상태), forceDeleteLeave 메서드 추가
- Controller: force 파라미터 + 슈퍼관리자 권한 분기
- 근태 테이블: 슈퍼관리자에게 삭제/영구삭제 버튼 표시
- 신청 테이블: 슈퍼관리자에게 삭제/영구삭제 버튼 표시
This commit is contained in:
김보곤
2026-03-04 00:15:41 +09:00
parent 266040a008
commit 6f03a8d12c
7 changed files with 216 additions and 6 deletions

View File

@@ -177,12 +177,27 @@ public function cancel(Request $request, int $id): JsonResponse
}
/**
* pending 상태 신청 삭제
* 신청 삭제 (일반: pending만 / 슈퍼관리자: 모든 상태, force 영구삭제)
*/
public function destroy(Request $request, int $id): JsonResponse
{
try {
$leave = $this->leaveService->deletePendingLeave($id);
$force = $request->boolean('force');
$isSuperAdmin = auth()->user()->isSuperAdmin();
if ($force) {
if (! $isSuperAdmin) {
return response()->json(['success' => false, 'message' => '권한이 없습니다.'], 403);
}
$leave = $this->leaveService->forceDeleteLeave($id);
$message = '신청이 영구 삭제되었습니다.';
} elseif ($isSuperAdmin) {
$leave = $this->leaveService->deleteLeave($id);
$message = '신청이 삭제되었습니다.';
} else {
$leave = $this->leaveService->deletePendingLeave($id);
$message = '신청이 삭제되었습니다.';
}
if (! $leave) {
return response()->json([
@@ -193,7 +208,7 @@ public function destroy(Request $request, int $id): JsonResponse
return response()->json([
'success' => true,
'message' => '신청이 삭제되었습니다.',
'message' => $message,
]);
} catch (\Throwable $e) {
report($e);