2025-11-04 13:58:21 +09:00
|
|
|
/**
|
|
|
|
|
* 채번 규칙 관리 API 클라이언트
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import { apiClient } from "./client";
|
|
|
|
|
import { NumberingRuleConfig } from "@/types/numbering-rule";
|
|
|
|
|
|
|
|
|
|
export interface ApiResponse<T> {
|
|
|
|
|
success: boolean;
|
|
|
|
|
data?: T;
|
|
|
|
|
error?: string;
|
|
|
|
|
message?: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function getNumberingRules(): Promise<ApiResponse<NumberingRuleConfig[]>> {
|
|
|
|
|
try {
|
|
|
|
|
const response = await apiClient.get("/numbering-rules");
|
|
|
|
|
return response.data;
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
return { success: false, error: error.message || "규칙 목록 조회 실패" };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-04 17:35:02 +09:00
|
|
|
/**
|
2025-11-07 14:27:07 +09:00
|
|
|
* 메뉴별 사용 가능한 채번 규칙 조회 (기존 방식, 하위 호환성 유지)
|
2025-11-04 17:35:02 +09:00
|
|
|
* @param menuObjid 현재 메뉴의 objid (선택)
|
|
|
|
|
* @returns 사용 가능한 채번 규칙 목록
|
|
|
|
|
*/
|
|
|
|
|
export async function getAvailableNumberingRules(
|
|
|
|
|
menuObjid?: number
|
|
|
|
|
): Promise<ApiResponse<NumberingRuleConfig[]>> {
|
|
|
|
|
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 || "사용 가능한 규칙 조회 실패" };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-07 14:27:07 +09:00
|
|
|
/**
|
|
|
|
|
* 화면용 채번 규칙 조회 (테이블 기반 필터링 - 간소화)
|
|
|
|
|
* @param tableName 화면의 테이블명 (필수)
|
|
|
|
|
* @returns 해당 테이블의 채번 규칙 목록
|
|
|
|
|
*/
|
|
|
|
|
export async function getAvailableNumberingRulesForScreen(
|
|
|
|
|
tableName: string
|
|
|
|
|
): Promise<ApiResponse<NumberingRuleConfig[]>> {
|
|
|
|
|
try {
|
|
|
|
|
const response = await apiClient.get("/numbering-rules/available-for-screen", {
|
|
|
|
|
params: { tableName },
|
|
|
|
|
});
|
|
|
|
|
return response.data;
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
return {
|
|
|
|
|
success: false,
|
|
|
|
|
error: error.message || "화면용 규칙 조회 실패",
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-04 13:58:21 +09:00
|
|
|
export async function getNumberingRuleById(ruleId: string): Promise<ApiResponse<NumberingRuleConfig>> {
|
|
|
|
|
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<ApiResponse<NumberingRuleConfig>> {
|
|
|
|
|
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<NumberingRuleConfig>
|
|
|
|
|
): Promise<ApiResponse<NumberingRuleConfig>> {
|
|
|
|
|
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<ApiResponse<void>> {
|
|
|
|
|
try {
|
|
|
|
|
const response = await apiClient.delete(`/numbering-rules/${ruleId}`);
|
|
|
|
|
return response.data;
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
return { success: false, error: error.message || "규칙 삭제 실패" };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-04 17:35:02 +09:00
|
|
|
/**
|
|
|
|
|
* 코드 미리보기 (순번 증가 없음)
|
|
|
|
|
* 화면 표시용으로 사용
|
|
|
|
|
*/
|
|
|
|
|
export async function previewNumberingCode(
|
|
|
|
|
ruleId: string
|
|
|
|
|
): Promise<ApiResponse<{ generatedCode: string }>> {
|
|
|
|
|
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<ApiResponse<{ generatedCode: string }>> {
|
2025-11-04 13:58:21 +09:00
|
|
|
try {
|
2025-11-04 17:35:02 +09:00
|
|
|
const response = await apiClient.post(`/numbering-rules/${ruleId}/allocate`);
|
2025-11-04 13:58:21 +09:00
|
|
|
return response.data;
|
|
|
|
|
} catch (error: any) {
|
2025-11-04 17:35:02 +09:00
|
|
|
return { success: false, error: error.message || "코드 할당 실패" };
|
2025-11-04 13:58:21 +09:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-04 17:35:02 +09:00
|
|
|
/**
|
|
|
|
|
* @deprecated 기존 generateNumberingCode는 previewNumberingCode를 사용하세요
|
|
|
|
|
*/
|
|
|
|
|
export async function generateNumberingCode(
|
|
|
|
|
ruleId: string
|
|
|
|
|
): Promise<ApiResponse<{ generatedCode: string }>> {
|
|
|
|
|
console.warn("generateNumberingCode는 deprecated. previewNumberingCode 사용 권장");
|
|
|
|
|
return previewNumberingCode(ruleId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 하위 호환성을 위한 별칭
|
|
|
|
|
export const generateCode = generateNumberingCode;
|
|
|
|
|
|
2025-11-04 13:58:21 +09:00
|
|
|
export async function resetSequence(ruleId: string): Promise<ApiResponse<void>> {
|
|
|
|
|
try {
|
|
|
|
|
const response = await apiClient.post(`/numbering-rules/${ruleId}/reset`);
|
|
|
|
|
return response.data;
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
return { success: false, error: error.message || "시퀀스 초기화 실패" };
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-11-04 17:35:02 +09:00
|
|
|
|
2025-11-06 10:37:20 +09:00
|
|
|
|
2025-11-06 18:10:21 +09:00
|
|
|
|