export interface Merchant { id: string; /** 등록 시 자동 생성 — 수정 불가(기획 MCH_003_p ①). */ code: string; brandName: string; name: string; categoryCode: string; businessNumber: string; ownerName: string; phoneNumber: string; address: string; addressDetail: string; latitude: string; longitude: string; isVisible: boolean; memo: string; createdAt: string; updatedAt: string; } export const EMPTY_FIELD_PLACEHOLDER = '-'; export function formatOptionalValue( value: string | number | null | undefined ): string { return value === null || value === undefined || value === '' ? EMPTY_FIELD_PLACEHOLDER : String(value); } /** * 업종 — 기획 MCH_002_p ②. * * TODO(기획): "제공받을 수 없는 데이터라면 추후 삭제 필요"로 적혀 있다. 코드표가 정해지면 * 공통코드 조회로 바꾼다. */ export const MERCHANT_CATEGORY_OPTIONS: ReadonlyArray<{ value: string; label: string; }> = [ { value: 'CONVENIENCE', label: '편의점' }, { value: 'CAFE', label: '카페' }, { value: 'RESTAURANT', label: '음식점' }, { value: 'BOOKSTORE', label: '서점' }, { value: 'STATIONERY', label: '문구점' }, { value: 'ETC', label: '기타' }, ]; export function formatCategoryLabel(code: string): string { if (!code) { return EMPTY_FIELD_PLACEHOLDER; } return ( MERCHANT_CATEGORY_OPTIONS.find((option) => option.value === code)?.label ?? code ); } export function formatVisibilityLabel(isVisible: boolean): string { return isVisible ? '노출' : '미노출'; } /** 목록의 주소 칸 — 상세주소까지 붙이면 한 줄을 넘겨 표가 밀린다. */ export function formatAddressSummary(merchant: Merchant): string { return formatOptionalValue(merchant.address); }