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

228 lines
7.7 KiB
TypeScript
Raw Normal View History

2025-09-02 13:18:46 +09:00
import { apiClient } from "./client";
import {
CodeCategory,
CodeInfo,
CodeOption,
CreateCategoryRequest,
UpdateCategoryRequest,
CreateCodeRequest,
UpdateCodeRequest,
GetCategoriesQuery,
GetCodesQuery,
ApiResponse,
} from "@/types/commonCode";
/**
* API
*/
export const commonCodeApi = {
// 카테고리 관련 API
categories: {
/**
*
*/
async getList(params?: GetCategoriesQuery): Promise<ApiResponse<CodeCategory[]>> {
const searchParams = new URLSearchParams();
if (params?.search) searchParams.append("search", params.search);
if (params?.isActive !== undefined) searchParams.append("isActive", params.isActive.toString());
if (params?.page) searchParams.append("page", params.page.toString());
if (params?.size) searchParams.append("size", params.size.toString());
const queryString = searchParams.toString();
const url = `/common-codes/categories${queryString ? `?${queryString}` : ""}`;
const response = await apiClient.get(url);
return response.data;
},
/**
*
*/
async create(data: CreateCategoryRequest): Promise<ApiResponse<CodeCategory>> {
const response = await apiClient.post("/common-codes/categories", data);
return response.data;
},
/**
*
*/
async update(categoryCode: string, data: UpdateCategoryRequest): Promise<ApiResponse<CodeCategory>> {
const response = await apiClient.put(`/common-codes/categories/${categoryCode}`, data);
return response.data;
},
/**
*
*/
async delete(categoryCode: string): Promise<ApiResponse> {
const response = await apiClient.delete(`/common-codes/categories/${categoryCode}`);
return response.data;
},
},
// 코드 관련 API
codes: {
/**
*
*/
async getList(categoryCode: string, params?: GetCodesQuery & { menuObjid?: number }): Promise<ApiResponse<CodeInfo[]>> {
2025-09-02 13:18:46 +09:00
const searchParams = new URLSearchParams();
if (params?.search) searchParams.append("search", params.search);
if (params?.isActive !== undefined) searchParams.append("isActive", params.isActive.toString());
2025-09-03 18:23:23 +09:00
if (params?.page !== undefined) searchParams.append("page", params.page.toString());
if (params?.size !== undefined) searchParams.append("size", params.size.toString());
if (params?.menuObjid !== undefined) searchParams.append("menuObjid", params.menuObjid.toString());
2025-09-02 13:18:46 +09:00
const queryString = searchParams.toString();
const url = `/common-codes/categories/${categoryCode}/codes${queryString ? `?${queryString}` : ""}`;
const response = await apiClient.get(url);
return response.data;
},
/**
*
*/
async create(categoryCode: string, data: CreateCodeRequest): Promise<ApiResponse<CodeInfo>> {
const response = await apiClient.post(`/common-codes/categories/${categoryCode}/codes`, data);
return response.data;
},
/**
*
*/
async update(categoryCode: string, codeValue: string, data: UpdateCodeRequest): Promise<ApiResponse<CodeInfo>> {
const response = await apiClient.put(`/common-codes/categories/${categoryCode}/codes/${codeValue}`, data);
return response.data;
},
/**
*
*/
async delete(categoryCode: string, codeValue: string): Promise<ApiResponse> {
const response = await apiClient.delete(`/common-codes/categories/${categoryCode}/codes/${codeValue}`);
return response.data;
},
/**
*
*/
async reorder(categoryCode: string, codes: Array<{ codeValue: string; sortOrder: number }>): Promise<ApiResponse> {
const data = { codes }; // 백엔드가 기대하는 형식으로 래핑
2025-09-02 13:18:46 +09:00
const response = await apiClient.put(`/common-codes/categories/${categoryCode}/codes/reorder`, data);
return response.data;
},
},
// 중복 검사 API
validation: {
/**
*
*/
async checkCategoryDuplicate(
field: "categoryCode" | "categoryName" | "categoryNameEng",
value: string,
excludeCode?: string,
): Promise<ApiResponse<{ isDuplicate: boolean; message: string; field: string; value: string }>> {
const params = new URLSearchParams();
params.append("field", field);
params.append("value", value);
if (excludeCode) params.append("excludeCode", excludeCode);
const response = await apiClient.get(`/common-codes/categories/check-duplicate?${params}`);
return response.data;
},
/**
*
*/
async checkCodeDuplicate(
categoryCode: string,
field: "codeValue" | "codeName" | "codeNameEng",
value: string,
excludeCode?: string,
): Promise<
ApiResponse<{ isDuplicate: boolean; message: string; categoryCode: string; field: string; value: string }>
> {
const params = new URLSearchParams();
params.append("field", field);
params.append("value", value);
if (excludeCode) params.append("excludeCode", excludeCode);
const response = await apiClient.get(`/common-codes/categories/${categoryCode}/codes/check-duplicate?${params}`);
return response.data;
},
},
2025-09-02 13:18:46 +09:00
// 옵션 조회 API (화면관리용)
options: {
/**
*
*/
async getOptions(categoryCode: string): Promise<ApiResponse<CodeOption[]>> {
const response = await apiClient.get(`/common-codes/categories/${categoryCode}/options`);
return response.data;
},
},
2025-12-23 09:31:18 +09:00
// 계층구조 코드 API
hierarchy: {
/**
*
* @param categoryCode
* @param parentCodeValue ( )
* @param depth ()
* @param menuObjid OBJID ()
*/
async getHierarchicalCodes(
categoryCode: string,
parentCodeValue?: string | null,
depth?: number,
menuObjid?: number
): Promise<ApiResponse<CodeInfo[]>> {
const searchParams = new URLSearchParams();
if (parentCodeValue !== undefined && parentCodeValue !== null) {
searchParams.append("parentCodeValue", parentCodeValue);
}
if (depth !== undefined) searchParams.append("depth", depth.toString());
if (menuObjid !== undefined) searchParams.append("menuObjid", menuObjid.toString());
const queryString = searchParams.toString();
const url = `/common-codes/categories/${categoryCode}/hierarchy${queryString ? `?${queryString}` : ""}`;
const response = await apiClient.get(url);
return response.data;
},
/**
* ( )
*/
async getCodeTree(
categoryCode: string,
menuObjid?: number
): Promise<ApiResponse<{ flat: CodeInfo[]; tree: CodeInfo[] }>> {
const searchParams = new URLSearchParams();
if (menuObjid !== undefined) searchParams.append("menuObjid", menuObjid.toString());
const queryString = searchParams.toString();
const url = `/common-codes/categories/${categoryCode}/tree${queryString ? `?${queryString}` : ""}`;
const response = await apiClient.get(url);
return response.data;
},
/**
*
*/
async hasChildren(categoryCode: string, codeValue: string): Promise<ApiResponse<{ hasChildren: boolean }>> {
const response = await apiClient.get(
`/common-codes/categories/${categoryCode}/codes/${codeValue}/has-children`
);
return response.data;
},
},
2025-09-02 13:18:46 +09:00
};