중간저장

This commit is contained in:
2026-04-24 04:56:30 +09:00
parent 563aef6490
commit 94c9b4b602
8 changed files with 539 additions and 208 deletions
+27 -6
View File
@@ -49,19 +49,40 @@ export interface TemplateSavePayload {
*/
export async function saveTemplate(p: TemplateSavePayload): Promise<void> {
const v2Layout = convertLegacyToV2(p.layout as any);
// screenResolutions 병합을 key-level 폴백으로 강화.
// 기존: `p.viewScreenResolutions ?? 전체폴백` → {} 나 일부 키 누락 시 정보 유실
// 개선: 항상 3뷰 모두 값이 보장되게 key 별로 폴백 처리
const fallbackSr = p.layout.screenResolution;
const vsrIn = (p.viewScreenResolutions ?? {}) as Record<string, any>;
const screenResolutions = {
list: vsrIn.list ?? fallbackSr,
create: vsrIn.create ?? fallbackSr,
edit: vsrIn.edit ?? fallbackSr,
};
const viewsJson = {
list: (v2Layout as any)?.components ?? [],
create: p.v2Views?.create ?? [],
edit: p.v2Views?.edit ?? [],
gridSettings: p.layout.gridSettings,
screenResolution: p.layout.screenResolution,
screenResolutions: p.viewScreenResolutions ?? {
list: p.layout.screenResolution,
create: p.layout.screenResolution,
edit: p.layout.screenResolution,
},
screenResolution: fallbackSr,
screenResolutions,
mainTableName: p.primaryTable,
};
// 진단 로그 — 저장 payload 확인용. 문제 재현 시 여기서 확인 가능.
/* eslint-disable no-console */
console.log("[saveTemplate] payload", {
templateId: p.templateId,
viewsKeys: Object.keys(viewsJson),
screenResolutions,
listCount: viewsJson.list.length,
createCount: viewsJson.create.length,
editCount: viewsJson.edit.length,
});
/* eslint-enable no-console */
const payload: Record<string, any> = {
name: p.name,
category: p.category ?? "custom",