265 lines
6.9 KiB
TypeScript
265 lines
6.9 KiB
TypeScript
import { apiClient } from "./client";
|
|
import {
|
|
TableCategoryValue,
|
|
CategoryColumn,
|
|
} from "@/types/tableCategoryValue";
|
|
|
|
/**
|
|
* 테이블의 카테고리 컬럼 목록 조회
|
|
*/
|
|
export async function getCategoryColumns(tableName: string) {
|
|
try {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: CategoryColumn[];
|
|
}>(`/table-categories/${tableName}/columns`);
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("카테고리 컬럼 조회 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 카테고리 값 목록 조회 (메뉴 스코프)
|
|
*
|
|
* @param tableName 테이블명
|
|
* @param columnName 컬럼명
|
|
* @param includeInactive 비활성 값 포함 여부
|
|
* @param menuObjid 메뉴 OBJID (선택사항, 제공 시 형제 메뉴의 카테고리 값 포함)
|
|
*/
|
|
export async function getCategoryValues(
|
|
tableName: string,
|
|
columnName: string,
|
|
includeInactive: boolean = false,
|
|
menuObjid?: number
|
|
) {
|
|
try {
|
|
const params: any = { includeInactive };
|
|
if (menuObjid) {
|
|
params.menuObjid = menuObjid;
|
|
}
|
|
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: TableCategoryValue[];
|
|
}>(`/table-categories/${tableName}/${columnName}/values`, {
|
|
params,
|
|
});
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("카테고리 값 조회 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 카테고리 값 추가 (메뉴 스코프)
|
|
*
|
|
* @param value 카테고리 값 정보
|
|
* @param menuObjid 메뉴 OBJID (필수)
|
|
*/
|
|
export async function addCategoryValue(
|
|
value: TableCategoryValue,
|
|
menuObjid: number
|
|
) {
|
|
try {
|
|
const response = await apiClient.post<{
|
|
success: boolean;
|
|
data: TableCategoryValue;
|
|
}>("/table-categories/values", {
|
|
...value,
|
|
menuObjid, // ← menuObjid 포함
|
|
});
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("카테고리 값 추가 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 카테고리 값 수정
|
|
*/
|
|
export async function updateCategoryValue(
|
|
valueId: number,
|
|
updates: Partial<TableCategoryValue>
|
|
) {
|
|
try {
|
|
const response = await apiClient.put<{
|
|
success: boolean;
|
|
data: TableCategoryValue;
|
|
}>(`/table-categories/values/${valueId}`, updates);
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("카테고리 값 수정 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 카테고리 값 삭제
|
|
*/
|
|
export async function deleteCategoryValue(valueId: number) {
|
|
try {
|
|
const response = await apiClient.delete<{
|
|
success: boolean;
|
|
message: string;
|
|
}>(`/table-categories/values/${valueId}`);
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("카테고리 값 삭제 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 카테고리 값 일괄 삭제
|
|
*/
|
|
export async function bulkDeleteCategoryValues(valueIds: number[]) {
|
|
try {
|
|
const response = await apiClient.post<{
|
|
success: boolean;
|
|
message: string;
|
|
}>("/table-categories/values/bulk-delete", { valueIds });
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("카테고리 값 일괄 삭제 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 카테고리 값 순서 변경
|
|
*/
|
|
export async function reorderCategoryValues(orderedValueIds: number[]) {
|
|
try {
|
|
const response = await apiClient.post<{
|
|
success: boolean;
|
|
message: string;
|
|
}>("/table-categories/values/reorder", { orderedValueIds });
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("카테고리 값 순서 변경 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
// ================================================
|
|
// 컬럼 매핑 관련 API (논리명 ↔ 물리명)
|
|
// ================================================
|
|
|
|
/**
|
|
* 컬럼 매핑 조회
|
|
*
|
|
* @param tableName - 테이블명
|
|
* @param menuObjid - 메뉴 OBJID
|
|
* @returns { logical_column: physical_column } 형태의 매핑 객체
|
|
*/
|
|
export async function getColumnMapping(tableName: string, menuObjid: number) {
|
|
try {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: Record<string, string>;
|
|
}>(`/table-categories/column-mapping/${tableName}/${menuObjid}`);
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("컬럼 매핑 조회 실패:", error);
|
|
return { success: false, error: error.message, data: {} };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 논리적 컬럼 목록 조회
|
|
*
|
|
* @param tableName - 테이블명
|
|
* @param menuObjid - 메뉴 OBJID
|
|
* @returns 논리적 컬럼 목록
|
|
*/
|
|
export async function getLogicalColumns(tableName: string, menuObjid: number) {
|
|
try {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: Array<{
|
|
mappingId: number;
|
|
logicalColumnName: string;
|
|
physicalColumnName: string;
|
|
description?: string;
|
|
}>;
|
|
}>(`/table-categories/logical-columns/${tableName}/${menuObjid}`);
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("논리적 컬럼 목록 조회 실패:", error);
|
|
return { success: false, error: error.message, data: [] };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 컬럼 매핑 생성/수정
|
|
*
|
|
* @param data - 컬럼 매핑 정보
|
|
*/
|
|
export async function createColumnMapping(data: {
|
|
tableName: string;
|
|
logicalColumnName: string;
|
|
physicalColumnName: string;
|
|
menuObjid: number;
|
|
description?: string;
|
|
}) {
|
|
try {
|
|
const response = await apiClient.post<{
|
|
success: boolean;
|
|
data: any;
|
|
message: string;
|
|
}>("/table-categories/column-mapping", data);
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("컬럼 매핑 생성 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 컬럼 매핑 삭제
|
|
*
|
|
* @param mappingId - 매핑 ID
|
|
*/
|
|
export async function deleteColumnMapping(mappingId: number) {
|
|
try {
|
|
const response = await apiClient.delete<{
|
|
success: boolean;
|
|
message: string;
|
|
}>(`/table-categories/column-mapping/${mappingId}`);
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("컬럼 매핑 삭제 실패:", error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 2레벨 메뉴 목록 조회
|
|
*
|
|
* 카테고리 컬럼 매핑 생성 시 메뉴 선택용
|
|
*
|
|
* @returns 2레벨 메뉴 목록
|
|
*/
|
|
export async function getSecondLevelMenus() {
|
|
try {
|
|
const response = await apiClient.get<{
|
|
success: boolean;
|
|
data: Array<{
|
|
menuObjid: number;
|
|
menuName: string;
|
|
parentMenuName: string;
|
|
screenCode?: string;
|
|
}>;
|
|
}>("/table-categories/second-level-menus");
|
|
return response.data;
|
|
} catch (error: any) {
|
|
console.error("2레벨 메뉴 목록 조회 실패:", error);
|
|
return { success: false, error: error.message, data: [] };
|
|
}
|
|
}
|
|
|