refactor(WEB): 전체 actions.ts에 공통 API 유틸 적용
- buildApiUrl / executePaginatedAction 패턴으로 전환 (40+ actions 파일) - 직접 URLSearchParams 조립 → buildApiUrl 유틸 사용 - 수동 페이지네이션 메타 변환 → executePaginatedAction 자동 처리 - HandoverReportDocumentModal, OrderDocumentModal 개선 - 급여관리 SalaryManagement 코드 개선 - CLAUDE.md Server Action 공통 유틸 규칙 정리 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,12 +14,11 @@
|
||||
|
||||
import { isNextRedirectError } from '@/lib/utils/redirect-error';
|
||||
import { executeServerAction, type ActionResult } from '@/lib/api/execute-server-action';
|
||||
import { buildApiUrl } from '@/lib/api/query-params';
|
||||
import type { PaginatedApiResponse } from '@/lib/api/types';
|
||||
import type { Popup, PopupFormData } from './types';
|
||||
import { transformApiToFrontend, transformFrontendToApi, type PopupApiData } from './utils';
|
||||
|
||||
const API_URL = process.env.NEXT_PUBLIC_API_URL;
|
||||
|
||||
// ============================================
|
||||
// API 함수
|
||||
// ============================================
|
||||
@@ -32,15 +31,12 @@ export async function getPopups(params?: {
|
||||
size?: number;
|
||||
status?: string;
|
||||
}): Promise<Popup[]> {
|
||||
const searchParams = new URLSearchParams();
|
||||
if (params?.page) searchParams.set('page', String(params.page));
|
||||
if (params?.size) searchParams.set('size', String(params.size));
|
||||
if (params?.status && params.status !== 'all') {
|
||||
searchParams.set('status', params.status);
|
||||
}
|
||||
|
||||
const result = await executeServerAction({
|
||||
url: `${API_URL}/api/v1/popups?${searchParams.toString()}`,
|
||||
url: buildApiUrl('/api/v1/popups', {
|
||||
page: params?.page,
|
||||
size: params?.size,
|
||||
status: params?.status !== 'all' ? params?.status : undefined,
|
||||
}),
|
||||
transform: (data: PaginatedApiResponse<PopupApiData>) => data.data.map(transformApiToFrontend),
|
||||
errorMessage: '팝업 목록 조회에 실패했습니다.',
|
||||
});
|
||||
@@ -52,7 +48,7 @@ export async function getPopups(params?: {
|
||||
*/
|
||||
export async function getPopupById(id: string): Promise<Popup | null> {
|
||||
const result = await executeServerAction({
|
||||
url: `${API_URL}/api/v1/popups/${id}`,
|
||||
url: buildApiUrl(`/api/v1/popups/${id}`),
|
||||
transform: (data: PopupApiData) => transformApiToFrontend(data),
|
||||
errorMessage: '팝업 조회에 실패했습니다.',
|
||||
});
|
||||
@@ -66,7 +62,7 @@ export async function createPopup(
|
||||
data: PopupFormData
|
||||
): Promise<ActionResult<Popup>> {
|
||||
return executeServerAction({
|
||||
url: `${API_URL}/api/v1/popups`,
|
||||
url: buildApiUrl('/api/v1/popups'),
|
||||
method: 'POST',
|
||||
body: transformFrontendToApi(data),
|
||||
transform: (data: PopupApiData) => transformApiToFrontend(data),
|
||||
@@ -82,7 +78,7 @@ export async function updatePopup(
|
||||
data: PopupFormData
|
||||
): Promise<ActionResult<Popup>> {
|
||||
return executeServerAction({
|
||||
url: `${API_URL}/api/v1/popups/${id}`,
|
||||
url: buildApiUrl(`/api/v1/popups/${id}`),
|
||||
method: 'PUT',
|
||||
body: transformFrontendToApi(data),
|
||||
transform: (data: PopupApiData) => transformApiToFrontend(data),
|
||||
@@ -95,7 +91,7 @@ export async function updatePopup(
|
||||
*/
|
||||
export async function deletePopup(id: string): Promise<ActionResult> {
|
||||
return executeServerAction({
|
||||
url: `${API_URL}/api/v1/popups/${id}`,
|
||||
url: buildApiUrl(`/api/v1/popups/${id}`),
|
||||
method: 'DELETE',
|
||||
errorMessage: '팝업 삭제에 실패했습니다.',
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user