분할레이아웃
This commit is contained in:
108
frontend/lib/api/data.ts
Normal file
108
frontend/lib/api/data.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
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}`);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user