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

216 lines
5.6 KiB
TypeScript

import { apiClient } from "./client";
import type {
DigitalTwinLayout,
DigitalTwinLayoutDetail,
CreateLayoutRequest,
UpdateLayoutRequest,
Warehouse,
Area,
Location,
MaterialData,
MaterialCount,
} from "@/types/digitalTwin";
// API 응답 타입
interface ApiResponse<T> {
success: boolean;
data?: T;
message?: string;
error?: string;
}
// ========== 레이아웃 관리 API ==========
// 레이아웃 목록 조회
export const getLayouts = async (params?: {
externalDbConnectionId?: number;
warehouseKey?: string;
}): Promise<ApiResponse<DigitalTwinLayout[]>> => {
try {
const response = await apiClient.get("/digital-twin/layouts", { params });
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// 레이아웃 상세 조회
export const getLayoutById = async (id: number): Promise<ApiResponse<DigitalTwinLayoutDetail>> => {
try {
const response = await apiClient.get(`/digital-twin/layouts/${id}`);
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// 레이아웃 생성
export const createLayout = async (data: CreateLayoutRequest): Promise<ApiResponse<DigitalTwinLayout>> => {
try {
const response = await apiClient.post("/digital-twin/layouts", data);
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// 레이아웃 수정
export const updateLayout = async (id: number, data: UpdateLayoutRequest): Promise<ApiResponse<DigitalTwinLayout>> => {
try {
const response = await apiClient.put(`/digital-twin/layouts/${id}`, data);
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// 레이아웃 삭제
export const deleteLayout = async (id: number): Promise<ApiResponse<void>> => {
try {
const response = await apiClient.delete(`/digital-twin/layouts/${id}`);
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// ========== 외부 DB 테이블 조회 API ==========
export const getTables = async (
connectionId: number
): Promise<ApiResponse<Array<{ table_name: string }>>> => {
try {
const response = await apiClient.get(`/digital-twin/data/tables/${connectionId}`);
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
export const getTablePreview = async (
connectionId: number,
tableName: string
): Promise<ApiResponse<any[]>> => {
try {
const response = await apiClient.get(`/digital-twin/data/table-preview/${connectionId}/${tableName}`);
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// ========== 외부 DB 데이터 조회 API ==========
// 창고 목록 조회
export const getWarehouses = async (externalDbConnectionId: number, tableName: string): Promise<ApiResponse<Warehouse[]>> => {
try {
const response = await apiClient.get("/digital-twin/data/warehouses", {
params: { externalDbConnectionId, tableName },
});
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// Area 목록 조회
export const getAreas = async (externalDbConnectionId: number, tableName: string, warehouseKey: string): Promise<ApiResponse<Area[]>> => {
try {
const response = await apiClient.get("/digital-twin/data/areas", {
params: { externalDbConnectionId, tableName, warehouseKey },
});
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// Location 목록 조회
export const getLocations = async (
externalDbConnectionId: number,
tableName: string,
areaKey: string,
): Promise<ApiResponse<Location[]>> => {
try {
const response = await apiClient.get("/digital-twin/data/locations", {
params: { externalDbConnectionId, tableName, areaKey },
});
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// 자재 목록 조회 (특정 Location)
export const getMaterials = async (
externalDbConnectionId: number,
tableName: string,
locaKey: string,
): Promise<ApiResponse<MaterialData[]>> => {
try {
const response = await apiClient.get("/digital-twin/data/materials", {
params: { externalDbConnectionId, tableName, locaKey },
});
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};
// 자재 개수 조회 (여러 Location)
export const getMaterialCounts = async (
externalDbConnectionId: number,
tableName: string,
locaKeys: string[],
): Promise<ApiResponse<MaterialCount[]>> => {
try {
const response = await apiClient.get("/digital-twin/data/material-counts", {
params: {
externalDbConnectionId,
tableName,
locaKeys: locaKeys.join(","),
},
});
return response.data;
} catch (error: any) {
return {
success: false,
error: error.response?.data?.message || error.message,
};
}
};