File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
/**
* 백엔드 `TB_COM_VOUCHER`(`/api/v1/mngr/voc/**`) 한 행. 필드 이름이 화면 용어와 달라
* Repository가 옮긴다 — `frcsNo`=코드, `frcsNm`=가맹점명, `brno`=사업자번호,
* `rprsvNm`=대표자명, `rprsvTelno`=전화번호, `frcsPostAddr`/`frcsDaddr`=주소/상세주소.
*/
export interface Merchant {
id: string;
/** `frcsNo` — 서버가 만든다. 수정 불가(기획 MCH_003_p ①). */
code: string;
/**
* 아래 넷은 백엔드 `TB_COM_VOUCHER`에 컬럼이 없어 **항상 빈 값**이다. 기획 시안에 있는
* 항목이라 화면에서는 지우지 않고 값이 없을 때 `-`로 보여준다(사용자 확정).
*/
brandName: string;
memo: string;
createdAt: string;
updatedAt: string;
name: string;
categoryCode: string;
businessNumber: string;
ownerName: string;
phoneNumber: string;
address: string;
addressDetail: string;
postalCode: string;
latitude: string;
longitude: string;
/**
* 조회 응답에 `useYn`이 없다 — 목록 SQL의 SELECT 목록에도 `MngrVocVo`에도 없고 검색 조건
* (`searchUseYn`)에만 쓰인다. 그래서 **모르는 값이 정상**이라 `null`을 둔다(위 넷과 같은 이유).
*/
isVisible: boolean | null;
}
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 | null): string {
if (isVisible === null) {
return EMPTY_FIELD_PLACEHOLDER;
}
return isVisible ? '노출' : '미노출';
}
/** 목록의 주소 칸 — 상세주소까지 붙이면 한 줄을 넘겨 표가 밀린다. */
export function formatAddressSummary(merchant: Merchant): string {
return formatOptionalValue(merchant.address);
}
/**
* 업종 코드 ↔ 백엔드 필드.
*
* 이슈: 백엔드가 저장은 `FRCS_TPBIZ_CD`로 받고 조회·검색은 `FRCS_DV_CD`로 한다. 두 컬럼을
* 모두 select하므로 화면은 조회 쪽(`frcsDvCd`)을 읽고, 저장할 때는 요청 VO에 있는 이름을 쓴다.
*/
export const MERCHANT_CATEGORY_READ_FIELD = 'frcsDvCd';
export const MERCHANT_CATEGORY_WRITE_FIELD = 'frcsTpbizCd';