Skip to content

[feat] #221 즐겨찾는 포토부스 조회 및 추가/해제, 포토부스 순서 정렬 API 연동#222

Merged
Ojongseok merged 26 commits into
developfrom
feat/#221-5th-map-api
Jul 9, 2026
Merged

[feat] #221 즐겨찾는 포토부스 조회 및 추가/해제, 포토부스 순서 정렬 API 연동#222
Ojongseok merged 26 commits into
developfrom
feat/#221-5th-map-api

Conversation

@Ojongseok

@Ojongseok Ojongseok commented Jun 28, 2026

Copy link
Copy Markdown
Member

🔗 관련 이슈

📙 작업 설명

  • 브랜드 정렬 순서 저장 API 연동
  • 포토부스 즐겨찾기 조회 및 등록/해제 API 연동
  • 포토부스 개별 마커 내 즐겨찾기 배지 추가
  • 즐겨찾기 버튼 활성화 시 즐겨찾기한 포토부스만 지도 전체에 표기
  • HorizontalBrandItem 즐겨찾기 버튼 NekiIconButton으로 교체

🧪 테스트 내역

  • 브랜드 정렬 순서 변경 후 재진입 시 순서 유지 확인
  • 포토부스 즐겨찾기 추가/해제 후 UI 즉시 반영 확인
  • 즐겨찾기 추가/해제 토스트 즉시 노출 확인
  • 즐겨찾기 버튼 활성화 시 즐겨찾기 포토부스 마커 전체 표시 확인
  • 즐겨찾기 목록 이미지 정상 표시 확인

📸 스크린샷 또는 시연 영상

기능 미리보기 기능 미리보기
정렬순서변경
KakaoTalk_Video_2026-07-01-00-47-32.mp4
DragPanel 조작
KakaoTalk_Video_2026-07-04-15-56-13.mp4
폴리곤 영역 내 조작
KakaoTalk_Video_2026-07-04-15-48-40.mp4
폴리곤 영역 외 조작
default.mp4

💬 추가 설명 or 리뷰 포인트

  • 즐겨찾기 토글 시 디바운싱을 제거했습니다. API 호출 이후 토스트메시지가 API 호출 이후 즉시 나타나는 것이 자연스러운 것으로 보여 [feat] #217 네컷지도 패널 UI 개선 — 탭 토글, 즐겨찾기, 브랜드 순서 편집 #218 에서 추가했던 debounce() 로직을 제거하고, 즐겨찾기 버튼의 클릭 이벤트를 .clickableSingle()로 변경했습니다.
  • 현재 즐겨찾기 상태를 변경하면 마커 전체가 다시 그려지는 과정에서 마커들이 깜빡이는 현상이 있습니다..! 리뷰해주고 계시면 제가 언능 마저 고쳐보겠습니닷 -> 수정 완

Summary by CodeRabbit

  • New Features

    • 지도에서 즐겨찾기 포토부스를 더 쉽게 확인하고 전환할 수 있게 되었습니다.
    • 브랜드 순서를 변경한 뒤 저장할 수 있으며, 저장 중 로딩 화면이 표시됩니다.
  • Bug Fixes

    • 즐겨찾기 표시와 마커 갱신이 더 자연스럽게 동작하도록 개선했습니다.
    • 즐겨찾기 항목과 일반 항목의 표시 상태가 더 일관되게 유지됩니다.
  • Style

    • 즐겨찾기 아이콘과 마커 시각 표현을 일부 개선했습니다.

@Ojongseok Ojongseok added the feat label Jun 28, 2026
@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@Ojongseok, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 36 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a8b5e3ed-32fe-4654-ac4b-29d1b8cfbb85

📥 Commits

Reviewing files that changed from the base of the PR and between f53d185 and d126427.

📒 Files selected for processing (2)
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapContract.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt
📝 Walkthrough

Walkthrough

지도 즐겨찾기 조회·변경과 브랜드 순서 저장 API가 추가되고, PhotoBooth 응답 모델이 통합됩니다. MapViewModel과 관련 화면은 새 즐겨찾기/정렬 흐름에 맞게 상태와 이벤트를 갱신하며, 마커 렌더링은 즐겨찾기 배지를 지원합니다.

Changes

지도 즐겨찾기와 브랜드 순서 연동

Layer / File(s) Summary
데이터 계약과 원격 API
core/data-api/.../MapRepository.kt, core/data/.../MapService.kt, core/data/.../BrandOrderChangeRequest.kt, core/data/.../PhotoBoothResponse.kt, core/data/.../PhotoBoothPolygonResponse.kt, core/data/.../MapRepositoryImpl.kt
PhotoBooth 응답이 통합되고 favorite 필드가 추가됐으며, 브랜드 순서 저장과 즐겨찾기 조회/변경용 request DTO, service/repository 구현이 추가됐다.
브랜드 순서 저장과 결과 전달
feature/map/api/.../MapResult.kt, feature/map/impl/.../PhotoBoothOrderChangeContract.kt, ...ViewModel.kt, ...Screen.kt, feature/map/impl/.../MapEntryProvider.kt
브랜드 순서 저장 시 로딩 상태를 관리하고 결과를 side effect와 result bus로 전달해 MapViewModel의 브랜드 순서 갱신으로 연결한다.
지도 상태와 즐겨찾기 흐름
feature/map/impl/.../MapContract.kt, .../MapViewModel.kt, .../MapScreen.kt, .../AnchoredDraggablePanel.kt
즐겨찾기 intent와 상태명이 바뀌고, 초기 로딩·포커스·마커 선택·필터링·즐겨찾기 반영 로직이 새 응답/상태 구조에 맞게 재구성됐다.
마커 배지와 UI 컴포넌트
feature/map/impl/.../ClustererConst.kt, .../PhotoBoothClusterer.kt, .../HorizontalBrandItem.kt, .../MapCircleButton.kt, detekt-config.yml
즐겨찾기 배지 마커와 앵커 계산이 추가되고, 즐겨찾기 버튼과 클릭 modifier가 새 컴포넌트로 교체되며, detekt 임계값이 조정됐다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Screen as PhotoBoothOrderChangeScreen
  participant VM as PhotoBoothOrderChangeViewModel
  participant Repo as MapRepository
  participant Bus as LocalResultEventBus
  participant Entry as MapEntryProvider
  participant MapVM as MapViewModel

  Screen->>VM: ClickComplete
  VM->>Repo: saveBrandOrder(brandIds)
  Repo-->>VM: Result<Unit>
  VM->>Bus: SendBrandsOrderChangeResult(orderedBrands)
  Bus-->>Screen: side effect
  Screen->>Bus: sendResult(MapResult.BrandOrderChanged)
  Entry->>MapVM: MapIntent.UpdateBrandOrder(orderedBrands)
Loading
sequenceDiagram
  participant Screen as MapScreen
  participant VM as MapViewModel
  participant Repo as MapRepository

  Screen->>VM: ClickPhotoBoothFavorite(photoBooth)
  VM->>VM: toggleFavorite(...)
  VM->>Repo: updateFavorite(...)
  Repo-->>VM: Result<Unit>
  VM-->>Screen: 상태 갱신 및 토스트
Loading

Possibly related PRs

Suggested reviewers: ikseong00

Poem

깡총, 지도에 하트가 반짝이네 🐰
브랜드 순서는 착착 저장되고
즐겨찾기 마커는 배지 달고
토끼 발걸음도 가볍게 뛰어요
새로운 길 위에 API가 폴짝!

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning detekt-config.yml의 LongMethod 임계값 변경은 #221의 API/UI 연동 범위를 벗어난 별도 설정 변경으로 보입니다. 해당 설정 변경이 필요했다면 별도 PR로 분리하거나, 이 PR과의 연관성을 설명해 주세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 7.69% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 즐겨찾기 포토부스 조회/추가·해제와 포토부스 순서 정렬 API 연동이라는 변경의 핵심을 잘 요약합니다.
Description check ✅ Passed 관련 이슈, 작업 설명, 테스트 내역, 스크린샷, 추가 설명이 모두 포함되어 템플릿 요구사항을 대부분 충족합니다.
Linked Issues check ✅ Passed 직접 이슈 #221의 포토부스 즐겨찾기 조회/변경과 목록 순서 변경 API 연동 요구를 구현했고, 관련 UI 연결도 포함됩니다.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#221-5th-map-api

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions
github-actions Bot requested a review from ikseong00 June 28, 2026 23:49
@Ojongseok
Ojongseok marked this pull request as draft June 28, 2026 23:50
Ojongseok and others added 9 commits June 29, 2026 20:20
- PUT /api/photo-booths/brand/order API 연동
- 완료 버튼 클릭 시 로딩 다이얼로그 표시
- API 성공 시 ResultEventBus를 통해 MapViewModel에 변경된 brands 전달
- API 재호출 없이 DragPanel 브랜드 순서 즉시 반영

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- GET /api/photo-booths/favorite: 앱 진입 시 즐겨찾기 목록 조회
- PATCH /api/photo-booths/{id}/favorite: 즐겨찾기 토글 API 연동
- API 실패 시 로컬 상태 롤백 (RevertFavorite)
- 즐겨찾기 추가 성공 시 저장한 포토부스 탭에 즉시 반영
- 저장한 포토부스 탭에서 해제 시 탭 전환 전까지 목록 유지
- PhotoBoothPolygonResponse, PhotoBoothPointResponse, FavoritePhotoBoothResponse → PhotoBoothResponse로 통합

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Ojongseok
Ojongseok force-pushed the feat/#221-5th-map-api branch from 66fea6c to 9cf350a Compare June 29, 2026 11:20
@Ojongseok
Ojongseok changed the base branch from feat/#217-5th-map-ui to develop June 29, 2026 11:20
@Ojongseok Ojongseok changed the title [feat] #221 5th 지도 API 연동 [feat] #221 즐겨찾는 포토부스 조회 및 추가/해제, 포토부스 순서 정렬 API 연동 Jun 30, 2026
Ojongseok and others added 9 commits June 30, 2026 20:47
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- favoriteRequests SharedFlow + debounce(300ms) 제거 → updateFavorite() 직접 호출로 리팩토링
- committedPhotoBooths 초기 저장 시 imageUrl 미매핑으로 즐겨찾기 목록에 빈 이미지 표시되던 버그 수정
- MapCircleButton clickable → clickableSingle 교체

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- getBrands() 응답을 brandImageUrlCache(brandName → imageUrl)에 캐싱
- 즐겨찾기/주변/지도마커 3곳의 brands.find 매핑을 캐시 조회로 통일

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- committedPhotoBooths, SyncFavoritePhotoBooth, RevertFavorite 제거
- ToggleBoothFavorite(바텀시트용) / ToggleDetailFavorite(카드용) intent 분리
  - ToggleDetailFavorite: 비폴리곤 마커 해제 시 카드 닫기 + 마커 제거
- polygonMarkerIds로 재검색 마커 추적 — 해제 시 하트 뱃지만 제거
- updateFavoriteState()로 두 intent 공통 로직 통합

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ToggleBoothFavorite → ClickBoothFavorite으로 rename
- closeCardIfNeeded 파라미터로 PhotoBoothDetailContent/HorizontalBrandItem 동작 분리
- 즐겨찾기 상태 변경 로직을 toggleFavorite() 함수로 분리
- onToggleBoothFavorite → onClickBoothFavorite 콜백 rename

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SelectTab 시 mapMarkers.isCheckedBrand도 true로 초기화
- ClickClosePhotoBoothCard 및 shouldCloseCard 경로에서 폴리곤 마커 외 임시 마커 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Ojongseok

Copy link
Copy Markdown
Member Author

/review

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/component/HorizontalBrandItem.kt`:
- Around line 84-92: The favorite toggle in HorizontalBrandItem uses an
interactive Icon with contentDescription set to null, so add a meaningful
accessibility label based on the current photoBooth.favorite state (for example,
add/remove favorite) directly in the Icon/Button setup. Update the composable
around the ImageVector.vectorResource call so the semantics clearly describe the
action for screen readers, using the photoBooth.favorite condition to choose the
label.

In
`@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt`:
- Around line 466-485: `MapViewModel`의 브랜드/즐겨찾기 결과 처리에서
`favoritesResult.onSuccess`가 `brandsResult.onSuccess` 안에 중첩되어 있어, 브랜드 로딩 실패 시
`favoritePhotoBooths`가 비워지는 문제가 있습니다. `brandsResult`와 `favoritesResult`를 각각
독립적으로 처리하도록 분리하고, `favoritesResult` 처리 시에는 `loadedBrands`가 없을 경우 `imageUrl`만 빈
값으로 두되 `favoritePhotoBooths` 자체는 항상 `reduce`로 반영되게 `cacheBrandImages` 및 즐겨찾기 매핑
로직을 조정하세요.

In
`@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/photobooth/PhotoBoothOrderChangeViewModel.kt`:
- Around line 62-65: In PhotoBoothOrderChangeViewModel, the onFailure branch
currently only logs the exception with Timber.e and clears isLoading, so add a
user-facing failure side effect there as well. Update the failure handling in
the save/order-change flow to emit an existing snackbar/toast-style effect from
the ViewModel (or introduce one consistent with the current side-effect pattern)
so the user is told the save failed, while keeping the loading state reset.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: b93ff771-d96a-48dd-92b3-033aeddf853f

📥 Commits

Reviewing files that changed from the base of the PR and between 7eb8383 and ebd1f55.

📒 Files selected for processing (20)
  • core/data-api/src/main/java/com/neki/android/core/dataapi/repository/MapRepository.kt
  • core/data/src/main/java/com/neki/android/core/data/remote/api/MapService.kt
  • core/data/src/main/java/com/neki/android/core/data/remote/model/request/BrandOrderChangeRequest.kt
  • core/data/src/main/java/com/neki/android/core/data/remote/model/response/PhotoBoothPolygonResponse.kt
  • core/data/src/main/java/com/neki/android/core/data/remote/model/response/PhotoBoothResponse.kt
  • core/data/src/main/java/com/neki/android/core/data/repository/impl/MapRepositoryImpl.kt
  • detekt-config.yml
  • feature/map/api/src/main/java/com/neki/android/feature/map/api/MapResult.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapContract.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapScreen.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/cluster/ClustererConst.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/cluster/PhotoBoothClusterer.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/component/AnchoredDraggablePanel.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/component/HorizontalBrandItem.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/component/MapCircleButton.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/navigation/MapEntryProvider.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/photobooth/PhotoBoothOrderChangeContract.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/photobooth/PhotoBoothOrderChangeScreen.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/photobooth/PhotoBoothOrderChangeViewModel.kt
💤 Files with no reviewable changes (1)
  • core/data/src/main/java/com/neki/android/core/data/remote/model/response/PhotoBoothPolygonResponse.kt

@Ojongseok
Ojongseok marked this pull request as ready for review June 30, 2026 15:54
@Ojongseok
Ojongseok marked this pull request as draft July 1, 2026 14:11
Ojongseok and others added 3 commits July 4, 2026 12:24
- PhotoBoothFavoriteButton ON: 지도에 즐겨찾기 마커만 표시
- PhotoBoothFavoriteButton OFF: 폴리곤 재검색 마커로 복귀
- handleClickPhotoBoothMarker/NearPhotoBooth: showFavoriteMarker 분기 제거, mapMarkers/favoritePhotoBooths isFocused 동시 업데이트
- ClickShowFavoriteIcon: 토글 시 favoritePhotoBooths isFocused 초기화
- ClickClosePhotoBoothCard: favoritePhotoBooths isFocused 초기화 추가
- clusterer LaunchedEffect: showFavoriteMarker 기반 단순 분기로 정리

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- handleClickBrand: isCheckedBrand predicate 람다로 추출해 3중 복붙 제거
- handleClickPhotoBoothMarker: isClicked 람다 reduce 내부로 이동, 애널리틱스 로그 한 줄로 정리

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- showFavoriteMarker -> showFavoritePhotoBooth 상태명 변경
- ClickBoothFavorite -> ClickPhotoBoothFavorite 인텐트명 변경
- onClickShowFavorite -> onClickShowFavoriteIcon 파라미터명 변경
- 즐겨찾기 모드 활성화 시 포커스된 비즐겨찾기 마커도 클러스터에 포함

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Ojongseok
Ojongseok marked this pull request as ready for review July 4, 2026 06:56

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt`:
- Around line 127-132: `MapViewModel`의 `ClickPhotoBoothFavorite` 흐름에서
`toggleFavorite`로 낙관적 갱신을 한 뒤 `updateFavorite`가 실패해도 현재는 `Timber.e(e)`만 남아 UI가
잘못된 상태로 고정됩니다. `updateFavorite`의 실패 콜백에서 실패 전 상태로 되돌리는 롤백 로직을 추가하고, 사용자에게 에러
토스트를 표시하도록 연결하세요. `MapIntent.ClickPhotoBoothFavorite`, `toggleFavorite`,
`updateFavorite`, `reduce`를 기준으로 로컬 상태와 서버 상태가 일치하도록 처리하면 됩니다.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 0c5633d2-cfbd-47d4-bc47-22b96b0e5d27

📥 Commits

Reviewing files that changed from the base of the PR and between ebd1f55 and 3b7322c.

📒 Files selected for processing (4)
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapContract.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapScreen.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapViewModel.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/component/AnchoredDraggablePanel.kt

Ojongseok and others added 2 commits July 4, 2026 17:19
- leafMarkerMap으로 마커 객체 보관, favorite/isFocused 변경 시 아이콘만 직접 교체
- leafIconCache로 아이콘 비트맵 캐싱 (재생성 방지)
- prevMarkerMap diff로 추가/제거/업데이트 3가지 경우만 처리

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@feature/map/impl/src/main/java/com/neki/android/feature/map/impl/cluster/PhotoBoothClusterer.kt`:
- Around line 40-41: `PhotoBoothClusterer` is an object holding `leafMarkerMap`,
so stale `Marker` references can survive across screens; add a cleanup path that
explicitly clears this map. Update the existing disposal flow where
`clusterer?.map = null` is handled, and route it through a dedicated
`PhotoBoothClusterer.clear()` (or equivalent) method that also resets any
related caches such as `leafIconCache` if needed. Ensure the cleanup is invoked
from the `onDispose`/teardown path so re-entry starts with empty state.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: df13b202-a194-4787-962f-39c549254eb6

📥 Commits

Reviewing files that changed from the base of the PR and between 3b7322c and 6c87446.

📒 Files selected for processing (2)
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapScreen.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/cluster/PhotoBoothClusterer.kt

@ikseong00 ikseong00 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다! 로직은 깔끔하게 잘 적용된 것 같아요.
리뷰사항 + 토끼 리뷰확인 부탁드려요!

추가적으로, MapScreennewMarkerMap, prevMarkerMap 관련 로직 (line 252~272)
MapViewModeltoggleFavorite 함수 부분에서
컬렉션 함수들이 효율적으로 사용되고 있지만 가독성 측면에서는 살짝 바로 이해하긴 쉽지 않은 것 같습니다!
중첩 함수를 풀어서 사용하거나, 함수형태로 해서 추상화를 조금 주면은 추후에라도 로직을 이해하기 쉬울 것 같아요! (혹은 주석을 사용하는 형식!)

@Ojongseok Ojongseok left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컬렉션 함수들이 효율적으로 사용되고 있지만 가독성 측면에서는 살짝 바로 이해하긴 쉽지 않은 것 같습니다!
중첩 함수를 풀어서 사용하거나, 함수형태로 해서 추상화를 조금 주면은 추후에라도 로직을 이해하기 쉬울 것 같아요! (혹은 주석을 사용하는 형식!)

아주아주 동의합니다. 클형의 도움을 받아 콜렉션 함수들은 간결하게 작성할 수 있었지만 기획 의도에 맞게 노출/비노출 & 지도와 하단 패널이 상호작용하려니 로직이 굉장히 복잡해지더라구요...!

지적해주신 부분은 이번 스프린트 이후 생각중인 지도와 패널의 ViewModel을 분리하는 방안을 적용하면서 로직도 좀 더 쉽게 이해할 수 있도록 개선해보겠습니다!

@Ojongseok
Ojongseok merged commit b6ee1b2 into develop Jul 9, 2026
4 checks passed
@Ojongseok
Ojongseok deleted the feat/#221-5th-map-api branch July 19, 2026 06:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 네컷지도 UI API 연동

2 participants