import { apiClient } from "./client"; import { CodeCategory, CodeInfo, CodeOption, CreateCategoryRequest, UpdateCategoryRequest, CreateCodeRequest, UpdateCodeRequest, ReorderCodesRequest, GetCategoriesQuery, GetCodesQuery, ApiResponse, } from "@/types/commonCode"; /** * 공통코드 관리 API 클라이언트 */ export const commonCodeApi = { // 카테고리 관련 API categories: { /** * 카테고리 목록 조회 */ async getList(params?: GetCategoriesQuery): Promise> { 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> { const response = await apiClient.post("/common-codes/categories", data); return response.data; }, /** * 카테고리 수정 */ async update(categoryCode: string, data: UpdateCategoryRequest): Promise> { const response = await apiClient.put(`/common-codes/categories/${categoryCode}`, data); return response.data; }, /** * 카테고리 삭제 */ async delete(categoryCode: string): Promise { const response = await apiClient.delete(`/common-codes/categories/${categoryCode}`); return response.data; }, }, // 코드 관련 API codes: { /** * 카테고리별 코드 목록 조회 */ async getList(categoryCode: string, params?: GetCodesQuery): Promise> { const searchParams = new URLSearchParams(); if (params?.search) searchParams.append("search", params.search); if (params?.isActive !== undefined) searchParams.append("isActive", params.isActive.toString()); 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> { const response = await apiClient.post(`/common-codes/categories/${categoryCode}/codes`, data); return response.data; }, /** * 코드 수정 */ async update(categoryCode: string, codeValue: string, data: UpdateCodeRequest): Promise> { const response = await apiClient.put(`/common-codes/categories/${categoryCode}/codes/${codeValue}`, data); return response.data; }, /** * 코드 삭제 */ async delete(categoryCode: string, codeValue: string): Promise { 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 { const data = { codes }; // 백엔드가 기대하는 형식으로 래핑 const response = await apiClient.put(`/common-codes/categories/${categoryCode}/codes/reorder`, data); return response.data; }, }, // 옵션 조회 API (화면관리용) options: { /** * 카테고리별 옵션 조회 */ async getOptions(categoryCode: string): Promise> { const response = await apiClient.get(`/common-codes/categories/${categoryCode}/options`); return response.data; }, }, };