[S15P11A705-307] 지도 마커 latestCollectionId 정정과 재발급 크로스탭 직렬화, 참조 문서 동기화 - #100
Merged
Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
지도 마커는 latestCollectionId(수정된 계약)를 채택하고, dev PR #97이 구현한 회원 탈퇴 2단계 흐름은 dev 쪽을 그대로 받는다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
9 tasks
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.
관련 이슈
S15P11A705-307
작업 내용
doc-syncer로
docs/reference/를 원본(Team-PinLog/docs HEAD8b1d3b6, PR #48docs/map-latest-collection-id)에 맞춰 동기화하고, 그 결과 드러난 계약 불일치를 코드·문서에 반영했다.버그 수정 — 지도 마커가 전부 "미분류" 색으로 떨어지던 문제
collectionId가 아니라 **latestCollectionId**였다. 프론트 Zod 스키마가 optional로 받고 있어 파싱 오류 없이 조용히undefined가 되고, 모든 마커가 미분류 색(slate) 하나로 렌더됐다.재발급 크로스탭 직렬화
11_인증_설계.md4.4가 single-flight를 탭·창 간에도 묶으라고 확장했다. 인증 쿠키는 오리진 단위로 탭이 공유하므로, 탭마다 따로 묶으면 두 탭이 같은 Refresh 토큰을 동시에 회전시켜 늦게 도착한 쪽이 401을 받고 사용자가 로그아웃된다.navigator.locks.request).BroadcastChannel은 메시지 전달 수단이라 리더 선출·타임아웃을 직접 구현해야 하고 락을 쥔 탭이 닫히면 남은 탭이 영구 대기하는 반면, Web Locks는 브라우저가 상호배제를 보장하고 탭이 죽으면 락을 자동 회수한다.navigator.locks가 없으면 기존 탭 내 single-flight로 폴백한다.문서 반영 (
docs/api-contract.md,docs/architecture.md)500·503추가.503은 재발급 대상이 아니다 — 자격증명 거절이 아니라 인증 여부를 확인하지 못한 상태라,401과 같은 분기로 묶으면 일시적 장애가 전체 로그아웃으로 번진다.recordSort=ADDED_AT_DESC로 최신순).GET /records/map?keyword=/POST /search/records)를 표로 분리. 내 기록 안의 장소 검색은 카카오가 아니라 서버이며, 컬렉션 만들기의 장소 선택도 이 엔드포인트를 재사용한다.GET /follows의collectionSize·collectionSort(1+N 제거),PlaceSummary.thumbnailUrl(4:3, null 폴백), 회원 탈퇴 2단계 절 신설.변경 유형
확인 방법
npx tsc --noEmit/npx eslint src/npx vitest run(78 passed) /npx vite build모두 통과.latestCollectionId를 아직 배포하지 않았다면 여전히 전부 미분류이며 이는 정상이다(스키마가 optional).pinlog:auth-refresh락이 잡히는 것을 볼 수 있다.체크리스트
member.id(내부 사용자 ID)를 URL·요청·응답에 사용하지 않았다 (진입점은 Collection id)label만 사용하고code를 노출하지 않았다contextId로 쿼리 키·URL·선택 상태를 교체했다 (이번 변경 범위에 Context 수정 없음)keywords: []등 빈 결과를 오류로 처리하지 않았고 로딩·오류·401 상태를 처리했다docs/conventions.md(용어·any·컴포넌트 직접 API 호출 금지)를 지켰다리뷰어가 알아야 할 점
dev를 머지해 충돌을 해소했다(
8f4def2). 이 브랜치의 앞 커밋 4개는 그 사이 #98로 dev에 squash 머지됐고, #97(회원 탈퇴 2단계 구현)이 그 위에 얹혔다. 그래서 dev 대비 실제 변경은 아래 파일뿐이다 — 지도 배경 레이어·SVG 마커·줌 제한은 이미 dev에 있다.docs/api-contract.md,docs/architecture.md,docs/reference/4개(doc-sync)src/features/map/api/getRecordMapMarkers.ts,src/features/map/components/RecordMapView.tsx,src/shared/lib/getRecordMarkerAsset.ts(collectionId→latestCollectionId)src/shared/http/client.ts(Web Locks 재발급 직렬화)충돌 해결 방향:
getRecordMapMarkers.ts·RecordMapView.tsx·getRecordMarkerAsset.tscollectionId뿐이고 나머지는 동일하다deleteAccount.tsdocs/api-contract.mdcollectionId절을 삭제하고latestCollectionId절로 대체. 더불어 "회원 탈퇴 — 2단계" 제목의⚠️ 현재 프론트 구현이 옛 계약 기준이다경고를 뗐다 — #97로 사실이 아니게 됐다후속 티켓이 필요한 항목 (이 PR 범위 밖, 문서에만 기록):
PlaceSummary.thumbnailUrl— 필드가 아직 서버에 없어 스키마에 추가하지 않았다. 계약만 문서화했다.(원래 여기 있던 "회원 탈퇴 2단계화" 항목은 dev #97로 해소되어 제거했다.)
🤖 Generated with Claude Code