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

109 lines
3.0 KiB
TypeScript
Raw Normal View History

2025-10-15 17:25:38 +09:00
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}`);
},
};