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 menuObjid 메뉴 OBJID * @returns 해당 메뉴와 상위 메뉴들이 설정한 모든 카테고리 컬럼 */ export async function getCategoryColumnsByMenu(menuObjid: number) { try { const response = await apiClient.get<{ success: boolean; data: CategoryColumn[]; }>(`/table-management/menu/${menuObjid}/category-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 ) { 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); // 백엔드에서 반환한 에러 메시지 전달 const errorMessage = error.response?.data?.message || error.message; return { success: false, error: errorMessage, message: errorMessage }; } } /** * 카테고리 값 일괄 삭제 */ 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; }>(`/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: [] }; } }