ERP-node/frontend/lib/api/data.ts

109 lines
3.0 KiB
TypeScript

import { apiClient } from "./client";
/**
* 데이터 조회 API
*/
export const dataApi = {
/**
* 테이블 데이터 조회
* @param tableName 테이블명
* @param params 조회 파라미터 (검색, 페이징 등)
*/
getTableData: async (
tableName: string,
params?: {
page?: number;
size?: number;
searchTerm?: string;
sortBy?: string;
sortOrder?: "asc" | "desc";
filters?: Record<string, any>;
},
): Promise<{
data: any[];
total: number;
page: number;
size: number;
totalPages: number;
}> => {
const response = await apiClient.get(`/data/${tableName}`, { params });
const raw = response.data || {};
const items: any[] = (raw.data ?? raw.items ?? raw.rows ?? []) as any[];
const page = raw.page ?? params?.page ?? 1;
const size = raw.size ?? params?.size ?? items.length;
const total = raw.total ?? items.length;
const totalPages = raw.totalPages ?? Math.max(1, Math.ceil(total / (size || 1)));
return { data: items, total, page, size, totalPages };
},
/**
* 특정 레코드 상세 조회
* @param tableName 테이블명
* @param id 레코드 ID
*/
getRecordDetail: async (tableName: string, id: string | number): Promise<any> => {
const response = await apiClient.get(`/data/${tableName}/${id}`);
return response.data?.data || response.data;
},
/**
* 조인된 데이터 조회
* @param leftTable 좌측 테이블명
* @param rightTable 우측 테이블명
* @param leftColumn 좌측 컬럼명
* @param rightColumn 우측 컬럼명 (외래키)
* @param leftValue 좌측 값 (필터링)
*/
getJoinedData: async (
leftTable: string,
rightTable: string,
leftColumn: string,
rightColumn: string,
leftValue?: any,
): Promise<any[]> => {
const response = await apiClient.get(`/data/join`, {
params: {
leftTable,
rightTable,
leftColumn,
rightColumn,
leftValue,
},
});
const raw = response.data || {};
return (raw.data ?? raw.items ?? raw.rows ?? []) as any[];
},
/**
* 레코드 생성
* @param tableName 테이블명
* @param data 레코드 데이터
*/
createRecord: async (tableName: string, data: Record<string, any>): Promise<any> => {
const response = await apiClient.post(`/data/${tableName}`, data);
return response.data?.data || response.data;
},
/**
* 레코드 수정
* @param tableName 테이블명
* @param id 레코드 ID
* @param data 수정할 데이터
*/
updateRecord: async (tableName: string, id: string | number, data: Record<string, any>): Promise<any> => {
const response = await apiClient.put(`/data/${tableName}/${id}`, data);
return response.data?.data || response.data;
},
/**
* 레코드 삭제
* @param tableName 테이블명
* @param id 레코드 ID
*/
deleteRecord: async (tableName: string, id: string | number): Promise<void> => {
await apiClient.delete(`/data/${tableName}/${id}`);
},
};