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 { verifySession } from '@/lib/auth/dal';
import {
createMerchant,
deleteMerchant,
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 = '저장하지 못했습니다. 잠시 후 다시 시도해 주세요.';
const DELETE_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'),
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'),
latitude: readString(formData, 'latitude'),
longitude: readString(formData, 'longitude'),
isVisible: readString(formData, 'isVisible') === 'Y',
memo: readString(formData, 'memo'),
});
if (!validation.ok) {
return { status: 'error', errors: validation.errors };
}
try {
if (validation.values.id) {
await updateMerchant(validation.values);
} else {
await createMerchant(validation.values);
}
} catch {
return { status: 'error', message: SAVE_FAILED_MESSAGE };
}
revalidatePath(MERCHANTS_PATH);
return { status: 'success' };
}
export async function deleteMerchantAction(
id: string
): Promise<{ status: 'success' } | { status: 'error'; message: string }> {
await verifySession();
try {
await deleteMerchant(id);
} catch {
return { status: 'error', message: DELETE_FAILED_MESSAGE };
}
revalidatePath(MERCHANTS_PATH);
return { status: 'success' };
}