topYn: values.isTopActive ? 'Y' : 'N',
menuUrl: values.url,
menuExplan: values.description,
- // 빈 문자열을 그대로 보낸다 — UPDATE가 null만 건너뛰므로 이래야 아이콘을 지울 수 있다.
- atchFileId: values.largeIconId,
- smallAtchFileId: values.smallIconId,
useYn: values.isActive ? 'Y' : 'N',
};
+}
+
+function logFailure(
+ action: string,
+ result: { code: number; message: string },
+ params: Record<string, unknown>
+): void {
+ console.error(`[system-menu] ${action} 실패`, {
+ code: result.code,
+ message: result.message,
+ params,
+ });
}
export async function createSystemMenu(values: SystemMenuValues): Promise<void> {
const accessToken = await getSessionAccessToken();
+ // 등록에는 지울 아이콘이 없다. 빈 문자열을 보내면 파일 테이블을 가리키는 값이 되어
+ // 제약에 걸릴 수 있으므로 고른 것이 있을 때만 싣는다.
+ const params = {
+ ...toWriteParams(values),
+ upMenuId: values.parentId,
+ menuIdPath: values.parentIdPath || undefined,
+ // INSERT에 DEFAULT_YN이 들어가는데 화면에는 없는 항목이다. 보내지 않으면 NULL이 박힌다.
+ defaultYn: 'N',
+ ...(values.largeIconId ? { atchFileId: values.largeIconId } : {}),
+ ...(values.smallIconId ? { smallAtchFileId: values.smallIconId } : {}),
+ };
const result = await backendFetch<unknown>(MENU_PATH, {
method: 'POST',
- form: {
- ...toWriteParams(values),
- upMenuId: values.parentId,
- menuIdPath: values.parentIdPath || undefined,
- },
+ form: params,
accessToken: accessToken ?? undefined,
cache: 'no-store',
canHaveNullData: true,
});
if (!result.ok) {
+ logFailure('등록', result, params);
throw new BackendRequestError(result);
export async function updateSystemMenu(values: SystemMenuValues): Promise<void> {
+ // 수정은 빈 문자열을 그대로 보낸다 — UPDATE가 null만 건너뛰므로 이래야 아이콘을 지울 수 있다.
+ atchFileId: values.largeIconId,
+ smallAtchFileId: values.smallIconId,
const result = await backendFetch<unknown>(`${MENU_PATH}/${values.id}`, {
method: 'PUT',
- body: toWriteParams(values),
+ body: params,
+ logFailure('수정', result, params);
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?