/** * 카테고리 트리 API 클라이언트 (테스트용) * - 트리 구조 CRUD 지원 */ import { apiClient } from "./client"; // 카테고리 값 타입 export interface CategoryValue { value_id: number; table_name: string; column_name: string; value_code: string; value_label: string; value_order: number; parent_value_id: number | null; depth: number; // 1=대분류, 2=중분류, 3=소분류 path: string | null; description: string | null; color: string | null; icon: string | null; is_active: boolean; is_default: boolean; company_code: string; created_at: string; updated_at: string; // 트리 구조용 children?: CategoryValue[]; } // 카테고리 값 생성 입력 export interface CreateCategoryValueInput { table_name: string; column_name: string; value_code: string; value_label: string; value_order?: number; parent_value_id?: number | null; description?: string; color?: string; icon?: string; is_active?: boolean; is_default?: boolean; target_company_code?: string; // 저장할 회사 코드 (최고 관리자가 회사 선택 시) } // 카테고리 값 수정 입력 export interface UpdateCategoryValueInput { value_code?: string; value_label?: string; value_order?: number; parent_value_id?: number | null; description?: string; color?: string; icon?: string; is_active?: boolean; is_default?: boolean; } // API 응답 타입 export interface ApiResponse { success: boolean; data?: T; error?: string; message?: string; } /** * 카테고리 트리 조회 */ export async function getCategoryTree( tableName: string, columnName: string ): Promise> { try { const response = await apiClient.get(`/category-tree/test/${tableName}/${columnName}`); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "카테고리 트리 조회 실패", }; } } /** * 카테고리 목록 조회 (플랫) */ export async function getCategoryList( tableName: string, columnName: string ): Promise> { try { const response = await apiClient.get(`/category-tree/test/${tableName}/${columnName}/flat`); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "카테고리 목록 조회 실패", }; } } /** * 카테고리 값 단일 조회 */ export async function getCategoryValue(valueId: number): Promise> { try { const response = await apiClient.get(`/category-tree/test/value/${valueId}`); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "카테고리 값 조회 실패", }; } } /** * 카테고리 값 생성 */ export async function createCategoryValue( input: CreateCategoryValueInput ): Promise> { try { const response = await apiClient.post("/category-tree/test/value", input); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "카테고리 값 생성 실패", }; } } /** * 카테고리 값 수정 */ export async function updateCategoryValue( valueId: number, input: UpdateCategoryValueInput ): Promise> { try { const response = await apiClient.put(`/category-tree/test/value/${valueId}`, input); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "카테고리 값 수정 실패", }; } } /** * 카테고리 값 삭제 가능 여부 사전 확인 */ export async function checkCanDeleteCategoryValue( valueId: number ): Promise> { try { const response = await apiClient.get(`/category-tree/test/value/${valueId}/can-delete`); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "삭제 가능 여부 확인 실패", }; } } /** * 카테고리 값 삭제 */ export async function deleteCategoryValue(valueId: number): Promise> { try { const response = await apiClient.delete(`/category-tree/test/value/${valueId}`); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "카테고리 값 삭제 실패", }; } } /** * 테이블의 카테고리 컬럼 목록 조회 */ export async function getCategoryColumns( tableName: string ): Promise> { try { const response = await apiClient.get(`/category-tree/test/columns/${tableName}`); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "카테고리 컬럼 조회 실패", }; } } /** * 전체 카테고리 키 목록 조회 (모든 테이블.컬럼 조합) */ export async function getAllCategoryKeys(): Promise> { try { const response = await apiClient.get("/category-tree/test/all-category-keys"); return response.data; } catch (error: unknown) { const err = error as { response?: { data?: { error?: string } }; message?: string }; return { success: false, error: err.response?.data?.error || err.message || "전체 카테고리 키 조회 실패", }; } }