File name
Commit message
Commit date
File name
Commit message
Commit date
09-04
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
'use server';
import { verifySession } from '@/lib/auth/dal';
import {
validateMerchant,
type MerchantFormState,
} from '@/lib/domain/merchant-form';
/**
* TODO(백엔드): 등록이 자체 저장에서 BizPlay 외부 가맹점 등록 API 위임으로 바뀌었다 —
* `POST /api/v1/mngr/voc`가 @RequestBody(JSON)가 되고 `bizPlayVocApiService.insertVoc`를
* 부른다. 예금주명·입금은행코드·입금계좌번호·업태코드가 새로 필수인데 이 폼은 받지 않는다.
* 항목이 정해질 때까지 등록을 막는다.
*
* 화면의 [등록] 버튼만 비활성화하면 막은 것이 아니다 — Server Action은 UI를 거치지 않고도
* 직접 호출된다. 그래서 저장 직전에서 끊는다.
*/
const DISABLED_MESSAGE =
'가맹점 등록은 현재 사용할 수 없습니다. 등록 항목이 확정되면 다시 열립니다.';
function readString(formData: FormData, key: string): string {
const value = formData.get(key);
return typeof value === 'string' ? value : '';
}
export async function saveMerchantAction(
_prevState: MerchantFormState,
formData: FormData
): Promise<MerchantFormState> {
await verifySession();
const validation = validateMerchant({
id: readString(formData, 'id'),
brandName: readString(formData, 'brandName'),
memo: readString(formData, 'memo'),
name: readString(formData, 'name'),
categoryCode: readString(formData, 'categoryCode'),
businessNumber: readString(formData, 'businessNumber'),
ownerName: readString(formData, 'ownerName'),
phoneNumber: readString(formData, 'phoneNumber'),
address: readString(formData, 'address'),
addressDetail: readString(formData, 'addressDetail'),
postalCode: readString(formData, 'postalCode'),
latitude: readString(formData, 'latitude'),
longitude: readString(formData, 'longitude'),
isVisible: readString(formData, 'isVisible') === 'Y',
});
if (!validation.ok) {
return { status: 'error', errors: validation.errors };
}
return { status: 'error', message: DISABLED_MESSAGE };
}