chore(WEB): actions.ts 에러 핸들링 및 CEO 대시보드 개선
- 전체 모듈 actions.ts redirect 에러 핸들링 추가 - CEODashboard DetailModal 추가 - MonthlyExpenseSection 개선 - fetch-wrapper redirect 에러 처리 - redirect-error 유틸 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
'use server';
|
||||
|
||||
|
||||
import { isRedirectError } from 'next/dist/client/components/redirect';
|
||||
import { isNextRedirectError } from '@/lib/utils/redirect-error';
|
||||
import { cookies } from 'next/headers';
|
||||
import { serverFetch, getServerApiHeaders } from '@/lib/api/fetch-wrapper';
|
||||
import type { Employee, EmployeeFormData, EmployeeStats } from './types';
|
||||
@@ -100,7 +100,7 @@ export async function getEmployees(params?: {
|
||||
lastPage: result.data.last_page,
|
||||
};
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] getEmployees error:', error);
|
||||
return { data: [], total: 0, lastPage: 1 };
|
||||
}
|
||||
@@ -132,7 +132,7 @@ export async function getEmployeeById(id: string): Promise<Employee | null | { _
|
||||
|
||||
return transformApiToFrontend(result.data);
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] getEmployeeById error:', error);
|
||||
return null;
|
||||
}
|
||||
@@ -179,7 +179,7 @@ export async function createEmployee(
|
||||
data: transformApiToFrontend(result.data),
|
||||
};
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] createEmployee error:', error);
|
||||
return {
|
||||
success: false,
|
||||
@@ -230,7 +230,7 @@ export async function updateEmployee(
|
||||
data: transformApiToFrontend(result.data),
|
||||
};
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] updateEmployee error:', error);
|
||||
return {
|
||||
success: false,
|
||||
@@ -268,7 +268,7 @@ export async function deleteEmployee(id: string): Promise<{ success: boolean; er
|
||||
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] deleteEmployee error:', error);
|
||||
return {
|
||||
success: false,
|
||||
@@ -309,7 +309,7 @@ export async function deleteEmployees(ids: string[]): Promise<{ success: boolean
|
||||
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] deleteEmployees error:', error);
|
||||
return {
|
||||
success: false,
|
||||
@@ -349,7 +349,7 @@ export async function getEmployeeStats(): Promise<EmployeeStats | null | { __aut
|
||||
averageTenure: result.data.average_tenure ?? 0,
|
||||
};
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] getEmployeeStats error:', error);
|
||||
return null;
|
||||
}
|
||||
@@ -401,7 +401,7 @@ export async function getPositions(type?: 'rank' | 'title'): Promise<PositionIte
|
||||
|
||||
return result.data;
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] getPositions error:', error);
|
||||
return [];
|
||||
}
|
||||
@@ -450,7 +450,7 @@ export async function getDepartments(): Promise<DepartmentItem[]> {
|
||||
const departments = Array.isArray(result.data) ? result.data : result.data.data || [];
|
||||
return departments;
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] getDepartments error:', error);
|
||||
return [];
|
||||
}
|
||||
@@ -513,7 +513,7 @@ export async function uploadProfileImage(inputFormData: FormData): Promise<{
|
||||
},
|
||||
};
|
||||
} catch (error) {
|
||||
if (isRedirectError(error)) throw error;
|
||||
if (isNextRedirectError(error)) throw error;
|
||||
console.error('[EmployeeActions] uploadProfileImage error:', error);
|
||||
return { success: false, error: '서버 오류가 발생했습니다.' };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user