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 { revalidatePath } from 'next/cache';
import { unstable_rethrow } from 'next/navigation';
import { verifySession } from '@/lib/auth/dal';
import { BackendRequestError } from '@/lib/http/backend-fetch';
import { createMerchant, updateMerchant } from '@/lib/data/repositories/merchant-repository';
import { validateMerchant, type MerchantFormState } from '@/lib/domain/merchant-form';
import { MERCHANTS_PATH } from '@/lib/domain/merchant-query';
const SAVE_FAILED_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'),
bankHolderName: readString(formData, 'bankHolderName'),
bankCode: readString(formData, 'bankCode'),
accountNumber: readString(formData, 'accountNumber'),
businessStatusCode: readString(formData, 'businessStatusCode'),
divisionCode: readString(formData, 'divisionCode'),
isVisible: readString(formData, 'isVisible') === 'Y',
});
if (!validation.ok) {
return { status: 'error', errors: validation.errors };
}
try {
if (validation.values.id) {
await updateMerchant(validation.values.id, validation.values);
} else {
await createMerchant(validation.values);
}
} catch (error) {
unstable_rethrow(error);
console.error('[merchants] 저장 실패', error);
const message =
error instanceof BackendRequestError && error.message ? error.message : SAVE_FAILED_MESSAGE;
return { status: 'error', message };
}
revalidatePath(MERCHANTS_PATH);
return { status: 'success' };
}