From 508806bacd61c5d996c41de6f79b31d5a00f4999 Mon Sep 17 00:00:00 2001 From: zenn Date: Wed, 1 Apr 2026 17:58:19 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A6=B4=EB=A6=AC=EC=8A=A4:=20v1.3.43=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EC=9A=94=EC=B2=AD=20=ED=86=A0?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=83=81=ED=83=9C=20=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/todo.md | 1 + docs/update.md | 4 ++++ frontend/src/views/TierEditorView.vue | 11 ++++++++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/todo.md b/docs/todo.md index 9b0e928..c9876c8 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -21,3 +21,4 @@ - 관리자 아이템 라이브러리 이름 변경은 템플릿·사용자 업로드·보관 자산까지 모두 가능하므로, 이후에는 일괄 이름 정리나 중복 이름 감지 보조 기능까지 검토한다. - 템플릿 요청 500 오류 대응으로 `template_requests`와 `tierlists` 레거시 컬럼 자동 마이그레이션은 반영했으므로, 이후에는 실제 운영 DB에서 백엔드 재시작 후 요청/승인 흐름을 한 번 더 확인한다. +- 템플릿 요청 저장 분기 500은 백엔드 재시작 후 다시 확인하고, 여전히 실패하면 실제 서버 로그 기준으로 saveTierList/createTemplateRequest 어느 단계에서 터지는지 추가 추적한다. diff --git a/docs/update.md b/docs/update.md index fcca865..8522840 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,9 @@ # 업데이트 로그 +## 2026-04-01 v1.3.43 +- 템플릿 요청 모달은 `내 티어리스트에도 저장` 토글 상태를 요청 직전에 별도로 고정해 사용하도록 바꿔, 모달이 닫히며 draft가 초기화된 뒤 성공 토스트가 반대로 나오던 문제를 바로잡음. +- 따라서 저장을 끈 상태에서는 `요청만 보냈어요` 문구가 정확히 유지되고, 저장을 켠 상태에서 500이 나는 경우에는 저장 단계에서 실패했다는 안내를 더 분명하게 보여주도록 보강함. + ## 2026-04-01 v1.3.42 - 템플릿 요청 시 `내 티어리스트에도 저장`이 켜져 있을 때만 500 오류가 날 수 있던 레거시 `tierlists.source_tierlist_id` nullability 문제도 함께 보강해, 오래된 DB 스키마에서도 요청 전 저장 흐름이 막히지 않도록 정리함. - 따라서 템플릿 요청 관련 레거시 호환 보정은 `template_requests`와 `tierlists` 양쪽에 모두 반영됐고, 실제 적용을 위해서는 백엔드 재시작 후 재확인이 필요함. diff --git a/frontend/src/views/TierEditorView.vue b/frontend/src/views/TierEditorView.vue index 7a30f0e..6d8b815 100644 --- a/frontend/src/views/TierEditorView.vue +++ b/frontend/src/views/TierEditorView.vue @@ -762,6 +762,7 @@ async function toggleFavorite() { } async function requestTemplate(type) { + const shouldSaveToMyTierList = !!templateRequestSaveToMyTierList.value try { isRequestingTemplate.value = true await uploadPendingCustomItems() @@ -775,7 +776,7 @@ async function requestTemplate(type) { thumbnailSrc: uploadedThumbnailSrc || thumbnailSrc.value || '', isPublic: !!isPublic.value, showCharacterNames: !!showCharacterNames.value, - saveToMyTierList: !!templateRequestSaveToMyTierList.value, + saveToMyTierList: shouldSaveToMyTierList, groups: buildGroupPayload(), boardItems: Object.values(itemsById.value), }) @@ -798,10 +799,10 @@ async function requestTemplate(type) { if (type === 'update') closeTemplateUpdateModal() toast.success( type === 'create' - ? templateRequestSaveToMyTierList.value + ? shouldSaveToMyTierList ? '템플릿 등록 요청과 내 티어표 저장을 함께 완료했어요.' : '템플릿 등록 요청을 보냈어요.' - : templateRequestSaveToMyTierList.value + : shouldSaveToMyTierList ? '템플릿 업데이트 요청과 내 티어표 저장을 함께 완료했어요.' : '템플릿 업데이트 요청을 보냈어요.' ) @@ -822,6 +823,10 @@ async function requestTemplate(type) { toast.error('요청 제목, 설명, 아이템 이름 중 길이 제한을 넘긴 값이 없는지 확인해주세요.') return } + if (e?.status === 500 && shouldSaveToMyTierList) { + toast.error('템플릿 요청 중 내 티어리스트 저장 단계에서 서버 오류가 발생했어요. 백엔드를 재시작한 뒤 다시 시도해주세요.') + return + } toast.error(type === 'create' ? '템플릿 등록 요청에 실패했어요.' : '템플릿 업데이트 요청에 실패했어요.') } finally { isRequestingTemplate.value = false