위시 새로고침 파싱 알림을 등록 알림과 타입으로 분리 - #1037
Merged
Merged
Conversation
- 새로고침은 등록과 같은 PENDING 버전을 만들어 같은 ItemParsingCompleted/Failed 로 끝나, 새로고침한 사람도 "위시 저장이 성공했어요" 를 받았다. ITEM_REFRESH_COMPLETED / ITEM_REFRESH_FAILED 타입과 핸들러 2개를 신설해 같은 이벤트에서 수신자가 배타적으로 갈리게 했다(#1028 해소 통지와 같은 구조) - 등록/새로고침을 적는 컬럼은 두지 않았다. 위시는 늘 이미 있는 버전을 가리키며 태어나므로(등록·공유 합류 모두 snapshot 저장 뒤 wish 저장) 위시 created_at 이 버전 created_at 보다 앞서면 곧 새로고침이다. 진행 중 합류(#826) 양 방향에서도 성립함을 테스트로 고정 - 등록 완료·실패 핸들러는 새로고침 수신자를 뺀 resolveRegistered 를 쓰고, 미완 알림은 갈리지 않아 resolve 그대로 둔다 - 실패 문구는 "기존 상품 정보는 그대로 남아 있어요" 로 뒀다. 새로고침은 성공 항목에서만 시작되고 실패해도 카드는 표시값 파생(#858)으로 옛 성공본을 보이므로, 등록 실패 문구를 그대로 쓰면 정보가 사라졌다는 오해를 낳는다 - 새로고침 실패 핸들러는 itemName 을 채우지 않는다. 실패한 버전은 이름이 비어 늘 기본값이고, 카탈로그는 dispatch 가 실제로 채우는 변수만 선언한다 - 히스토리 API 문서·SSE 스펙에 새 타입 행과 "등록/새로고침은 type 으로 가른다" 안내를 더했다 Closes #1036 Claude-Session: https://claude.ai/code/session_01HnKAcdnoziL8hdVr9xinFb
- ITEM_REFRESH_COMPLETED / ITEM_REFRESH_FAILED 행과 "등록과 새로고침은 type 으로 갈린다" 안내, 클라 예시 switch 분기를 추가 - 새로고침은 위시 전용이라 kind 분기 없이 wishId 로 위시 상세에 가고, 실패 뒤에도 카드 값은 지우지 않는다는 계약을 명시 Claude-Session: https://claude.ai/code/session_01HnKAcdnoziL8hdVr9xinFb
|
Discord 스레드 연동용 메타데이터입니다. discord-pr-bot 워크플로가 자동 생성하며, 수정·삭제하면 PR 과 Discord 알림 연동이 끊깁니다. |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yml Review profile: CHILL Plan: Team Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- 코드 리뷰 반영. 새로고침 전용 쿼리를 따로 두면 파싱 완료 1건에 같은 위시 행을 세 번 읽는다. 기존 위시 주인 조회에 refreshed(위시가 버전보다 먼저 만들어졌는가) 플래그를 실어 등록/새로고침 분할을 메모리에서 하고, 전용 쿼리와 userId 전용 쿼리를 저장소 3층에서 지웠다 - 두 새로고침 핸들러가 복제하던 수신자·컨텍스트 코드를 resolver 의 resolveRefreshContexts 하나로 접었다. "조회 1회" 주석은 틀렸다 - 디스패처가 수신자 도출과 컨텍스트 해석을 따로 부르므로 두 번 돈다고 바로잡았다 - 시각 비교 판정의 알려진 한계(정체성 병합 뒤 진행 중 합류 시 등록으로 보임)를 뷰 주석에 명시했다. 드문 경합이라 컬럼 없이 감수한다 - 새로고침 엔드포인트 OpenAPI 설명이 "등록과 동일하게 완료·실패 알림" 이라 새 타입과 어긋났던 것을 고쳤다 - INCOMPLETE 는 새로고침이라도 갈리지 않는다는 예외를 스펙·히스토리 문서에 적었다. 완성 조건이 수기라 기존 문구가 그대로 맞고, 카드가 일부만 빈 상태를 보이게 하는 표시 규칙은 #1039 가 맡는다 Claude-Session: https://claude.ai/code/session_01HnKAcdnoziL8hdVr9xinFb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Situation
POST /api/v1/wishlists/{wishId}/refresh)은 등록과 같은 PENDING 버전을 만들어 같은 파싱 이벤트로 끝난다. 그래서 알림도 등록과 완전히 같은ITEM_PARSING_COMPLETED/ITEM_PARSING_FAILED로 나갔다.Task
ITEM_REFRESH_COMPLETED/ITEM_REFRESH_FAILED타입으로 분리한다.Action
판정 근거: 위시 생성시각과 버전 생성시각 비교
refreshed(w.created_at < s.created_at) 플래그 한 칸을 실어, 수신자 도출·라우팅 해석·등록/새로고침 분할이 같은 한 조회를 나눠 쓴다.created_at은 DATETIME(6) 이다.구현: 같은 이벤트에서 배타적 수신자로 갈라지는 핸들러
ItemRefreshCompletedHandler와ItemRefreshFailedHandler가ItemParsingCompleted/ItemParsingFailed를 구독하고, 등록 핸들러는 새로고침 수신자를 뺀다.ItemParsingRecipientResolver에resolveRegistered(새로고침한 사람을 뺀 등록 수신자)와resolveRefreshContexts(새로고침한 위시 주인의 wishId 컨텍스트)를 더했고, 두 새로고침 핸들러는 이 하나에 위임한다. 디스패처가 수신자 도출과 컨텍스트 해석을 따로 부르므로 조회는 핸들러당 두 번 돈다(다른 파싱 핸들러와 같은 구조).itemName을 채우지 않는다. 실패한 버전은 이름이 비어 늘 기본값이라 쓸모가 없고, 카탈로그는 dispatch 가 실제로 채우는 변수만 선언한다. 그래서 스냅샷 원본 저장소도 쓰지 않는다.ITEM_REFRESH_COMPLETED${itemName}(새 성공본 이름)ITEM_REFRESH_FAILEDNotificationKind.of에서는 다른 파싱 알림과 같이 라우팅 출처를 따른다. 실질은 항상 WISH 지만 kind 와 payload 셰입이 어긋날 여지를 없애기 위해서다.검토 후 채택하지 않은 안
Result
ITEM_REFRESH_COMPLETED하나임을 고정한다.wishId딥링크로 처리한다. 새로고침 실패 뒤에도 카드 값은 지우지 않는다.연관 이슈