From 1473521a46020fdc02dfb7828784f0dfcaaa1feb Mon Sep 17 00:00:00 2001 From: Jung Sun A Date: Tue, 27 Oct 2026 10:04:46 +0900 Subject: [PATCH 1/3] =?UTF-8?q?chore:=20=EC=83=81=ED=92=88=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=BD=94=EB=93=9C=20=EC=B9=B4=ED=83=88=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EA=B0=B1=EC=8B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ITEM-007·ITEM-008·ITEM-009 추가 - ITEM-007: 이미지로 등록한 상품 새로고침. WISH-007 대체 - ITEM-008: 파싱·새로고침 중인 상품에 입력 - ITEM-009: 바꿀 값 없음 - WISH-007 제거 - 원인: 서버에서 결번 - ITEM-006 추가와 WISH-010·TOURNAMENT-037 제거 - 원인: 서버 카탈로그와 어긋나 있었음 - TOURNAMENT-037 은 ITEM-006 이 대체 - 문구는 서버 ItemErrorCode 메시지 기준 - 예외: ITEM-009 는 수정 화면 맥락에 맞춰 바꿈 --- apps/web/e2e/specs/archive/wishDetail.spec.ts | 2 +- packages/core/src/consts/errorCode.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/web/e2e/specs/archive/wishDetail.spec.ts b/apps/web/e2e/specs/archive/wishDetail.spec.ts index 38e472af..c5975530 100644 --- a/apps/web/e2e/specs/archive/wishDetail.spec.ts +++ b/apps/web/e2e/specs/archive/wishDetail.spec.ts @@ -94,7 +94,7 @@ test('가격 새로고침에 실패하면 안내 후 직접 수정으로 이어 await gotoWishDetail(page, api); api.error('POST', ENDPOINTS.WISHLIST_REFRESH(WISH_ID), { status: 400, - code: ERROR_CODE.WISH_NOT_REFRESHABLE, + code: ERROR_CODE.ITEM_NOT_REFRESHABLE, }); await page.getByRole('button', { name: '가격 정보 새로고침' }).click(); diff --git a/packages/core/src/consts/errorCode.ts b/packages/core/src/consts/errorCode.ts index 82489c13..4ec85a69 100644 --- a/packages/core/src/consts/errorCode.ts +++ b/packages/core/src/consts/errorCode.ts @@ -82,7 +82,6 @@ export const ERROR_MESSAGE_MAP = { 'TOURNAMENT-034': '지금 대결할 수 있는 조합이 아니에요.', 'TOURNAMENT-035': '이미 결과가 기록된 대결이에요.', 'TOURNAMENT-036': '토너먼트 만들기는 회원만 이용할 수 있어요.', - 'TOURNAMENT-037': '이 토너먼트에는 지금 아이템을 추가할 수 없어요. 잠시 후 다시 시도해 주세요.', 'TOURNAMENT-038': '플레이 링크로 만든 토너먼트에서는 아이템을 수정하거나 삭제할 수 없어요.', 'TOURNAMENT-039': '정보가 비어 있는 상품이에요. 내용을 채운 뒤 담아 주세요.', 'TOURNAMENT-040': '정보가 비어 있는 상품이 있어요. 모두 채워야 시작할 수 있어요.', @@ -94,15 +93,17 @@ export const ERROR_MESSAGE_MAP = { 'WISH-004': '이미 삭제된 아이템이에요.', 'WISH-005': '이미지는 1~5장만 올릴 수 있어요.', 'WISH-006': '한 번에 최대 100개까지 삭제할 수 있어요.', - 'WISH-007': '링크가 없는 항목은 새로고침할 수 없습니다.', 'WISH-008': '추출에 실패한 항목은 새로고침 대신 정보를 직접 입력해 복구해 주세요.', 'WISH-009': '이미 위시리스트에 등록된 상품이에요.', - 'WISH-010': '지금은 더 담을 수 없어요. 잠시 후 다시 시도해 주세요.', /** ITEM */ 'ITEM-003': '상품 이름을 입력해 주세요.', 'ITEM-004': '상품 가격을 입력해 주세요.', 'ITEM-005': '상품 이미지를 등록해 주세요.', + 'ITEM-006': '지금은 추가할 수 없어요. 잠시 후 다시 시도해 주세요.', + 'ITEM-007': '링크로 등록한 상품만 새로고침할 수 있어요.', + 'ITEM-008': '아직 정보를 가져오는 중인 상품이에요. 끝난 뒤 다시 입력해 주세요.', + 'ITEM-009': '수정할 정보를 입력해 주세요.', /** LINK */ 'LINK-001': '올바른 링크 형식이 아니에요. 다시 확인해 주세요.', @@ -219,7 +220,6 @@ export const ERROR_CODE = { TOURNAMENT_INVALID_MATCH_PAIR: 'TOURNAMENT-034', TOURNAMENT_MATCH_ALREADY_RECORDED: 'TOURNAMENT-035', TOURNAMENT_GUEST_CANNOT_CREATE: 'TOURNAMENT-036', - TOURNAMENT_ITEM_ADD_RATE_LIMITED: 'TOURNAMENT-037', TOURNAMENT_CLONED_CANNOT_MODIFY_ITEMS: 'TOURNAMENT-038', TOURNAMENT_INCOMPLETE_ITEM_CANNOT_ADD: 'TOURNAMENT-039', TOURNAMENT_ITEM_INCOMPLETE: 'TOURNAMENT-040', @@ -231,15 +231,17 @@ export const ERROR_CODE = { WISH_NOT_FOUND: 'WISH-004', WISH_INVALID_IMAGE_COUNT: 'WISH-005', WISH_INVALID_ID_COUNT: 'WISH-006', - WISH_NOT_REFRESHABLE: 'WISH-007', WISH_FAILED_NOT_REFRESHABLE: 'WISH-008', WISH_ALREADY_EXISTS: 'WISH-009', - WISH_RATE_LIMITED: 'WISH-010', /** 상품 */ ITEM_NAME_REQUIRED_FOR_READY: 'ITEM-003', ITEM_PRICE_REQUIRED_FOR_READY: 'ITEM-004', ITEM_IMAGE_REQUIRED_FOR_READY: 'ITEM-005', + ITEM_QUOTA_EXCEEDED: 'ITEM-006', + ITEM_NOT_REFRESHABLE: 'ITEM-007', + ITEM_PARSING_IN_PROGRESS: 'ITEM-008', + ITEM_EMPTY_USER_INPUT: 'ITEM-009', /** 상품 링크 */ LINK_INVALID_FORMAT: 'LINK-001', From f8fc598663ee70a90a0f3aecf6b73e65a9a5feeb Mon Sep 17 00:00:00 2001 From: Jung Sun A Date: Tue, 27 Oct 2026 10:04:46 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=EB=8B=A4=EB=A5=B8=20=EC=9C=84?= =?UTF-8?q?=EC=8B=9C=EB=A1=9C=20=ED=95=A9=EC=B3=90=EC=A7=84=20=EC=9C=84?= =?UTF-8?q?=EC=8B=9C=20=EC=88=98=EC=A0=95=20=EC=9D=91=EB=8B=B5=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 응답의 위시 id 가 요청과 다르면 남는 위시 상세로 이동 - 원인: FAILED 위시에 입력해 정해진 상품을 다른 위시가 이미 가지면 서버가 합침 - 합쳐진 경우 요청한 위시 단건 조회 갱신 생략 - 원인: 서버에서 삭제된 위시라 다시 조회하면 404 --- .../src/app/archive/wish/[id]/_hooks/usePatchWish.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts b/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts index f09c9f0f..b466b685 100644 --- a/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts +++ b/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts @@ -22,9 +22,16 @@ export const usePatchWish = (wishId: number) => { if (typeof body.memo === 'string') formData.append('memo', body.memo); return patchWish(wishId, formData); }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['wish', wishId] }); + onSuccess: ({ wish }) => { queryClient.invalidateQueries({ queryKey: ['wishlists'] }); + + /** 같은 상품을 가진 다른 위시에 합쳐진 경우 */ + if (wish.id !== wishId) { + router.replace(ROUTES.WISH_EDIT(wish.id)); + return; + } + + queryClient.invalidateQueries({ queryKey: ['wish', wishId] }); }, onError: error => { if (isGlobalNetError(error)) return; From 91456c59409b1743f6b4f7137096ee282b790860 Mon Sep 17 00:00:00 2001 From: Jung Sun A Date: Tue, 27 Oct 2026 13:11:17 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EC=9C=84=EC=8B=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=ED=9B=84=20=EC=9D=91=EB=8B=B5=20=EC=9C=84=EC=8B=9C?= =?UTF-8?q?=20=EC=83=81=EC=84=B8=20=EB=8B=A4=EC=8B=9C=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 다시 조회할 상세를 요청 위시 id 에서 응답 위시 id 로 교체 - 원인: 합쳐진 경우 남는 위시 상세 캐시가 60초 안이면 그대로 노출 - 결과: 합쳐지지 않은 경우 동작 동일 - 결과: 삭제된 요청 위시는 다시 조회 없음 - 이동 전 화면 마운트 확인은 넣지 않음 - 원인: 다른 수정 훅도 onSuccess 에서 확인 없이 이동 --- apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts b/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts index b466b685..5b7c6540 100644 --- a/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts +++ b/apps/web/src/app/archive/wish/[id]/_hooks/usePatchWish.ts @@ -24,14 +24,10 @@ export const usePatchWish = (wishId: number) => { }, onSuccess: ({ wish }) => { queryClient.invalidateQueries({ queryKey: ['wishlists'] }); + queryClient.invalidateQueries({ queryKey: ['wish', wish.id] }); /** 같은 상품을 가진 다른 위시에 합쳐진 경우 */ - if (wish.id !== wishId) { - router.replace(ROUTES.WISH_EDIT(wish.id)); - return; - } - - queryClient.invalidateQueries({ queryKey: ['wish', wishId] }); + if (wish.id !== wishId) router.replace(ROUTES.WISH_EDIT(wish.id)); }, onError: error => { if (isGlobalNetError(error)) return;