Files
sam-react-prod/src/lib/api/common-codes.ts
권혁성 6bcd298995 feat: 수주/견적 기능 개선 및 PDF 생성 업데이트
- 수주 상세 뷰/수정 컴포넌트 개선
- 견적 위치 패널 업데이트
- PDF 생성 API 수정
- 레이아웃 및 공통코드 API 업데이트
- 패키지 의존성 업데이트
2026-01-29 01:12:58 +09:00

161 lines
3.5 KiB
TypeScript

'use server';
import { apiClient } from './index';
// ========================================
// 공통 코드 타입
// ========================================
export interface CommonCode {
id: number;
code: string;
name: string;
description: string | null;
sort_order: number;
attributes: Record<string, unknown> | null;
}
// ========================================
// 공통 코드 조회 함수
// ========================================
/**
* 특정 그룹의 공통 코드 목록 조회
* GET /api/v1/settings/common/{group}
*/
export async function getCommonCodes(group: string): Promise<{
success: boolean;
data?: CommonCode[];
error?: string;
}> {
try {
const response = await apiClient.get<CommonCode[]>(`/settings/common/${group}`);
return { success: true, data: response };
} catch (error) {
console.error(`공통코드 조회 오류 (${group}):`, error);
return { success: false, error: '공통코드를 불러오는데 실패했습니다.' };
}
}
/**
* 공통 코드 옵션 형태로 변환
* Select/ComboBox 등에서 사용
*/
export async function getCommonCodeOptions(group: string): Promise<{
success: boolean;
data?: { value: string; label: string }[];
error?: string;
}> {
const result = await getCommonCodes(group);
if (!result.success || !result.data) {
return { success: false, error: result.error };
}
const options = result.data.map((code) => ({
value: code.code,
label: code.name,
}));
return { success: true, data: options };
}
// ========================================
// 자주 사용하는 코드 그룹 함수
// ========================================
/**
* 수주 상태 코드 조회
*/
export async function getOrderStatusCodes() {
return getCommonCodes('order_status');
}
/**
* 수주 상태 옵션 조회
*/
export async function getOrderStatusOptions() {
return getCommonCodeOptions('order_status');
}
/**
* 수주 유형 코드 조회
*/
export async function getOrderTypeCodes() {
return getCommonCodes('order_type');
}
/**
* 수주 유형 옵션 조회
*/
export async function getOrderTypeOptions() {
return getCommonCodeOptions('order_type');
}
/**
* 거래처 유형 코드 조회
*/
export async function getClientTypeCodes() {
return getCommonCodes('client_type');
}
/**
* 거래처 유형 옵션 조회
*/
export async function getClientTypeOptions() {
return getCommonCodeOptions('client_type');
}
/**
* 품목 유형 코드 조회
*/
export async function getItemTypeCodes() {
return getCommonCodes('item_type');
}
/**
* 품목 유형 옵션 조회
*/
export async function getItemTypeOptions() {
return getCommonCodeOptions('item_type');
}
/**
* 배송방식 코드 조회
*/
export async function getDeliveryMethodCodes() {
return getCommonCodes('delivery_method');
}
/**
* 배송방식 옵션 조회
*/
export async function getDeliveryMethodOptions() {
return getCommonCodeOptions('delivery_method');
}
/**
* 운임비용 코드 조회
*/
export async function getShippingCostCodes() {
return getCommonCodes('shipping_cost');
}
/**
* 운임비용 옵션 조회
*/
export async function getShippingCostOptions() {
return getCommonCodeOptions('shipping_cost');
}
/**
* 코드값으로 라벨 조회 (code → name 매핑)
*/
export async function getCodeLabel(group: string, code: string): Promise<string> {
const result = await getCommonCodes(group);
if (result.success && result.data) {
const found = result.data.find((item) => item.code === code);
return found?.name || code;
}
return code;
}