From bd3ef5d13d6138ab945fa7df4e6cdeb8d307b77d Mon Sep 17 00:00:00 2001 From: zenn Date: Wed, 1 Apr 2026 18:05:59 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A6=B4=EB=A6=AC=EC=8A=A4:=20v1.3.45=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EC=9A=94=EC=B2=AD=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/db.js | 5 +++-- docs/history.md | 4 ++++ docs/todo.md | 2 -- docs/update.md | 5 +++++ frontend/src/views/TierEditorView.vue | 2 +- update.md | 9 --------- 6 files changed, 13 insertions(+), 14 deletions(-) delete mode 100644 update.md diff --git a/backend/src/db.js b/backend/src/db.js index 53c57e7..e844628 100644 --- a/backend/src/db.js +++ b/backend/src/db.js @@ -2021,6 +2021,7 @@ async function saveTierList({ return findTierListById(existing.id, authorId) } + const nextId = id || nanoid() const createdAt = now() await query( ` @@ -2029,9 +2030,9 @@ async function saveTierList({ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `, - [id, authorId, gameId, title, nextThumbnailSrc, description || '', isPublic ? 1 : 0, showCharacterNames ? 1 : 0, sourceTierListId || null, sourceSnapshotTitle || '', sourceSnapshotAuthor || '', serializeJson(groups), serializeJson(pool), createdAt, createdAt] + [nextId, authorId, gameId, title, nextThumbnailSrc, description || '', isPublic ? 1 : 0, showCharacterNames ? 1 : 0, sourceTierListId || null, sourceSnapshotTitle || '', sourceSnapshotAuthor || '', serializeJson(groups), serializeJson(pool), createdAt, createdAt] ) - return findTierListById(id, authorId) + return findTierListById(nextId, authorId) } async function duplicateTierListForUser({ tierList, targetUserId }) { diff --git a/docs/history.md b/docs/history.md index 56c2eff..727513f 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,5 +1,9 @@ # 의사결정 이력 +## 2026-04-01 v1.3.45 +- 템플릿 요청에서 `내 티어리스트에도 저장`은 별도 부가 기능이 아니라 실제 저장본 생성 경로를 타므로, 새 저장본 ID는 호출자에 기대지 말고 저장 함수 내부에서 항상 보장하는 편이 더 안전하다고 정리했다. +- 개발 단계의 내부 조치 문구인 `백엔드 재시작` 같은 표현은 사용자 토스트에 직접 노출하지 않고, 운영형 재시도 안내로 낮추는 편이 맞다고 판단했다. + ## 2026-04-01 v1.3.44 - 관리자 티어표 목록에서는 `보기` 버튼을 없애더라도 완성본 확인 기능 자체는 유지해야 하므로, 별도 액션 버튼보다 카드 썸네일 클릭을 미리보기 진입점으로 쓰는 편이 더 자연스럽다고 정리했다. - 템플릿 요청 미리보기도 별도 요약 카드보다 실제 보드 구조를 우선 보여주는 쪽이 관리자 검수 흐름에 더 맞으므로, 일반 티어표 미리보기와 가까운 방향으로 통일하기로 했다. diff --git a/docs/todo.md b/docs/todo.md index f6b127b..8614313 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -20,6 +20,4 @@ - 가이드 모달과 관리자 아이템 모달은 현재 같은 톤의 큰 셸을 쓰므로, 이후 공통 모달 레이아웃 컴포넌트로 분리할지 검토한다. - 관리자 아이템 라이브러리 이름 변경은 템플릿·사용자 업로드·보관 자산까지 모두 가능하므로, 이후에는 일괄 이름 정리나 중복 이름 감지 보조 기능까지 검토한다. -- 템플릿 요청 500 오류 대응으로 `template_requests`와 `tierlists` 레거시 컬럼 자동 마이그레이션은 반영했으므로, 이후에는 실제 운영 DB에서 백엔드 재시작 후 요청/승인 흐름을 한 번 더 확인한다. -- 템플릿 요청 저장 분기 500은 백엔드 재시작 후 다시 확인하고, 여전히 실패하면 실제 서버 로그 기준으로 saveTierList/createTemplateRequest 어느 단계에서 터지는지 추가 추적한다. - 관리자 템플릿 요청 미리보기는 실제 완성본 모달과 더 가까운 체감이 되도록, 이후에도 보드 여백·행/열 헤더·남은 아이템 밀도를 한 번 더 비교 QA한다. diff --git a/docs/update.md b/docs/update.md index cedcc3f..cad776e 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,10 @@ # 업데이트 로그 +## 2026-04-01 v1.3.45 +- 템플릿 요청에서 `내 티어리스트에도 저장`이 켜져 있을 때 발생하던 500 오류는 새 저장본 생성 시 `tierlists.id`에 `undefined`가 들어가던 문제였고, 이제 `saveTierList()`가 생성 시 자동으로 `nanoid()`를 부여하도록 고쳐 저장 분기 자체를 안정화함. +- 사용자에게 노출되던 `백엔드를 재시작해주세요` 문구는 제거하고, 저장 분기 실패 시에도 일반적인 재시도 안내만 보이도록 조정함. +- 루트에 잘못 남아 있던 `update.md` 진입점 파일은 제거하고, 업데이트 기록은 다시 `docs/update.md` 한 곳으로 정리함. + ## 2026-04-01 v1.3.44 - 관리자 `전체 티어표 관리`에서는 별도 `완성본 보기` 버튼은 다시 두지 않되, 카드 썸네일 자체를 눌러 기존처럼 완성본 미리보기 모달을 열 수 있게 복구함. - `템플릿 요청 관리`의 요청 미리보기는 요약 썸네일 중심 레이아웃을 줄이고, 실제 보드 구조를 먼저 읽는 방향으로 정리해 일반 티어표 완성본을 보는 흐름과 더 비슷하게 맞춤. diff --git a/frontend/src/views/TierEditorView.vue b/frontend/src/views/TierEditorView.vue index 6d8b815..2536572 100644 --- a/frontend/src/views/TierEditorView.vue +++ b/frontend/src/views/TierEditorView.vue @@ -824,7 +824,7 @@ async function requestTemplate(type) { return } if (e?.status === 500 && shouldSaveToMyTierList) { - toast.error('템플릿 요청 중 내 티어리스트 저장 단계에서 서버 오류가 발생했어요. 백엔드를 재시작한 뒤 다시 시도해주세요.') + toast.error('템플릿 요청 중 내 티어리스트 저장에 실패했어요. 잠시 후 다시 시도해주세요.') return } toast.error(type === 'create' ? '템플릿 등록 요청에 실패했어요.' : '템플릿 업데이트 요청에 실패했어요.') diff --git a/update.md b/update.md deleted file mode 100644 index e846943..0000000 --- a/update.md +++ /dev/null @@ -1,9 +0,0 @@ -# Update Log Entry Point - -이 프로젝트의 상세 업데이트 로그는 [docs/update.md](/Users/bicute/Desktop/zenn.dev/tier-cursor/docs/update.md)에 계속 누적됩니다. - -## 2026-03-30 - -- 루트 `package.json`에 공용 실행 스크립트(`dev:frontend`, `dev:backend`, `build`, `start`)를 추가했습니다. -- 루트에서도 바로 `npm run build` 같은 공용 명령을 사용할 수 있게 정리했습니다. -- 업데이트 로그 진입점을 루트 `update.md`로 추가해, 이후 작업 시 파일 위치를 바로 찾을 수 있게 했습니다.