File name
Commit message
Commit date
File name
Commit message
Commit date
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 };
}