[refactor] #85 랜덤포즈 중복 확인 위치 변경#86
Merged
Merged
Conversation
`MviIntentStore` 인터페이스에서 `postSideEffect` 함수를 제거하고, `MviIntentStoreImpl`에서는 해당 함수의 접근 제어자를 `private`으로 변경합니다. 이를 통해 ViewModel에서는 `onIntent`를 통해서만 SideEffect를 발생시키도록 강제하여, 단방향 데이터 흐름을 강화합니다.
미디어 업로드 티켓 발급 API의 응답 형식이 단일 객체에서 리스트 형태로 변경됨에 따라 관련 데이터 모델을 수정합니다. - `MediaUploadTicketResponse`를 `MediaUploadTicketDataResponse`로 리네임하고, 내부에 `MediaUploadTicketItemResponse`를 포함하도록 구조를 변경합니다. - `toModel()` 확장 함수를 `toModels()`로 변경하여 `List<MediaUploadTicket>`을 반환하도록 수정합니다. - 이에 따라 `MediaUploadRepository`의 `getUploadTicket` 메서드의 반환 타입을 `Result<MediaUploadTicket>`에서 `Result<List<MediaUploadTicket>>`으로 변경합니다. - 단일 사진을 업로드하는 `UploadSinglePhotoUseCase`에서는 티켓 리스트의 첫 번째 아이템을 사용하도록 수정합니다.
`ResultEventBus.sendResult`에 `allowDuplicate` 파라미터를 추가하여, `false`로 설정 시 중복된 결과값이 발행되는 것을 방지하도록 `Channel.CONFLATED`를 사용합니다. [refactor] 사진 상세화면에서 중복 결과 전송 방지 사진 상세화면에서 보관함 업데이트 알림을 보낼 때 `allowDuplicate = false` 옵션을 사용하여, 보관함 화면으로 돌아갈 때 이벤트가 중복으로 전송되는 것을 막습니다.
`LazyVerticalStaggeredGrid`에 `contentPadding`을 직접 적용하여, 각 `item`에 개별적으로 적용되던 수평 `padding`을 제거합니다. 이를 통해 코드의 중복을 줄이고 레이아웃 관리 효율을 높였습니다.
이미지 추가 성공 시 `isLoading` 상태를 `false`로 변경하여 로딩 표시를 중단하도록 수정합니다.
`PhotoDetailState` 내에서 즐겨찾기 요청 `MutableSharedFlow`를 관리하도록 변경합니다. 이를 통해 기존 ViewModel 프로퍼티로 관리하던 즐겨찾기 상태(`originalFavorite`)를 `PhotoDetailState`의 `committedFavorite`로 이전하여 상태 관리의 일관성을 확보했습니다. - `favoriteRequests`를 `PhotoDetailState`로 이동 - `FavoriteCommitted` 인텐트가 새로운 즐겨찾기 상태(`newFavorite`)를 포함하도록 수정 - 즐겨찾기 상태 업데이트 및 롤백 로직을 `committedFavorite` 기준으로 변경
`PhotoDetailState`에 있던 `favoriteRequests` `MutableSharedFlow`를 `PhotoDetailViewModel`로 이동시킵니다. State는 UI 상태를 나타내는 순수한 데이터 클래스로 유지하고, 이벤트 처리는 ViewModel에서 담당하도록 역할을 분리합니다.
`PhotoDetailViewModel` 내 `favoriteRequests`의 가시성을 `public`에서 `private`으로 변경하여 캡슐화를 강화합니다. 또한, `handleFavoriteToggle` 함수에서 더 이상 사용되지 않는 `postSideEffect` 파라미터를 제거하여 코드를 간결하게 수정합니다.
포토카드 상세화면 `PhotoDetailState`의 `committedFavorite` 초기값을 `photo.isFavorite` 값으로 설정하여, 화면 진입 시 서버의 좋아요 상태를 정확히 반영하도록 수정합니다.
하나의 CTA 버튼과, 그 아래에 밑줄이 있는 텍스트 버튼을 포함하는 다이얼로그 `SingleButtonWithTextButtonAlertDialog`를 추가합니다.
[feat] #71 마이페이지 UI 수정 및 API 연동
- 포즈피드 각 아이템에 스크랩된 경우, 우측 상단에 스크랩 아이콘을 표시하도록 변경했습니다. - 기존에 사용되던 `ic_scrap_selected` 아이콘을 `icon_scrap`으로 이름을 변경하여 재사용했습니다. - 포즈 상세, 랜덤 포즈 화면에서 `ic_scrap_selected` 대신 `icon_scrap` 아이콘을 사용하도록 수정했습니다.
포즈피드, 랜덤포즈 등 포즈 상세 화면 진입 시, 초기 스크랩 상태가 항상 `false`로 지정되어 스크랩 여부와 관계 없이 빈 하트로 표시되는 문제가 있었습니다. API 응답(`PoseResponse`)을 `Pose` 도메인 모델로 변환할 때, `isScrapped` 필드의 기본값을 `true`로 설정하여 이 문제를 해결했습니다.
포즈피드 상세화면의 상단 그라데이션의 알파 값을 0.4f에서 0.2f로 조정했습니다.
[feat] #77 포즈 API 연동 및 랜덤 포즈 추천 구현
기존의 단일 랜덤 포즈를 가져오는 `getRandomPose` 함수를, 중복을 제외하고 여러 개의 포즈를 가져올 수 있도록 `getSingleRandomPose` 와 `getMultipleRandomPose` 함수로 분리했습니다. - `excludeIds` 파라미터를 추가하여 이미 가져온 포즈 ID를 제외하고 새로운 포즈를 요청합니다. - `maxRetry` 파라미터를 통해 재시도 횟수를 제한하고, 새로운 포즈를 찾지 못할 경우 `RandomPoseRetryExhaustedException`을 발생시킵니다.
ViewModel에서 랜덤 포즈를 호출하고, 중복을 직접 검사하던 로직을 Repository 계층으로 옮겼습니다. - `PoseRepository`에 중복을 제외하고 여러 포즈를 가져오는 `getMultipleRandomPose`와 단일 포즈를 가져오는 `getSingleRandomPose`를 추가했습니다. - ViewModel은 이 새로운 Repository 메서드를 호출하여 비즈니스 로직을 단순화했습니다. - 중복 포즈를 가져오려다 재시도 횟수를 모두 소진하면 발생하는 `RandomPoseRetryExhaustedException`을 새로 정의하여 예외 처리를 명확히 했습니다. - `MAXIMUM_RANDOM_POSE_FALLBACK_COUNT` 상수의 이름을 `MAXIMUM_RANDOM_POSE_RETRY_COUNT`로 변경하여 역할을 더 명확하게 표현했습니다.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the
✨ Finishing touches🧪 Generate unit tests (beta)
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 |
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.
🔗 관련 이슈
📙 작업 설명
getSingleRandomPose/getMultipleRandomPoseRepository 함수 추가RandomPoseRetryExhaustedException커스텀 예외 추가fetchRandomPose및FetchPoseResultsealed class 제거MAXIMUM_RANDOM_POSE_FALLBACK_COUNT→MAXIMUM_RANDOM_POSE_RETRY_COUNT네이밍 개선📷 스크린샷