/** * 채번 규칙 관리 API 클라이언트 */ import { apiClient } from "./client"; import { NumberingRuleConfig } from "@/types/numbering-rule"; export interface ApiResponse { success: boolean; data?: T; error?: string; message?: string; } export async function getNumberingRules(): Promise> { try { const response = await apiClient.get("/numbering-rules"); return response.data; } catch (error: any) { return { success: false, error: error.message || "규칙 목록 조회 실패" }; } } /** * 메뉴별 사용 가능한 채번 규칙 조회 * @param menuObjid 현재 메뉴의 objid (선택) * @returns 사용 가능한 채번 규칙 목록 */ export async function getAvailableNumberingRules( menuObjid?: number ): Promise> { try { const url = menuObjid ? `/numbering-rules/available/${menuObjid}` : "/numbering-rules/available"; const response = await apiClient.get(url); return response.data; } catch (error: any) { return { success: false, error: error.message || "사용 가능한 규칙 조회 실패" }; } } export async function getNumberingRuleById(ruleId: string): Promise> { try { const response = await apiClient.get(`/numbering-rules/${ruleId}`); return response.data; } catch (error: any) { return { success: false, error: error.message || "규칙 조회 실패" }; } } export async function createNumberingRule( config: NumberingRuleConfig ): Promise> { try { const response = await apiClient.post("/numbering-rules", config); return response.data; } catch (error: any) { return { success: false, error: error.message || "규칙 생성 실패" }; } } export async function updateNumberingRule( ruleId: string, config: Partial ): Promise> { try { const response = await apiClient.put(`/numbering-rules/${ruleId}`, config); return response.data; } catch (error: any) { return { success: false, error: error.message || "규칙 수정 실패" }; } } export async function deleteNumberingRule(ruleId: string): Promise> { try { const response = await apiClient.delete(`/numbering-rules/${ruleId}`); return response.data; } catch (error: any) { return { success: false, error: error.message || "규칙 삭제 실패" }; } } /** * 코드 미리보기 (순번 증가 없음) * 화면 표시용으로 사용 */ export async function previewNumberingCode( ruleId: string ): Promise> { try { const response = await apiClient.post(`/numbering-rules/${ruleId}/preview`); return response.data; } catch (error: any) { return { success: false, error: error.message || "코드 미리보기 실패" }; } } /** * 코드 할당 (저장 시점에 실제 순번 증가) * 실제 저장할 때만 호출 */ export async function allocateNumberingCode( ruleId: string ): Promise> { try { const response = await apiClient.post(`/numbering-rules/${ruleId}/allocate`); return response.data; } catch (error: any) { return { success: false, error: error.message || "코드 할당 실패" }; } } /** * @deprecated 기존 generateNumberingCode는 previewNumberingCode를 사용하세요 */ export async function generateNumberingCode( ruleId: string ): Promise> { console.warn("generateNumberingCode는 deprecated. previewNumberingCode 사용 권장"); return previewNumberingCode(ruleId); } // 하위 호환성을 위한 별칭 export const generateCode = generateNumberingCode; export async function resetSequence(ruleId: string): Promise> { try { const response = await apiClient.post(`/numbering-rules/${ruleId}/reset`); return response.data; } catch (error: any) { return { success: false, error: error.message || "시퀀스 초기화 실패" }; } }