Skip to content

Refactor: :feature:general MVI 전환 - #188

Merged
dogmania merged 13 commits into
developfrom
refactor/#187-general-mvi-pattern
Jun 3, 2026
Merged

Refactor: :feature:general MVI 전환 #188
dogmania merged 13 commits into
developfrom
refactor/#187-general-mvi-pattern

Conversation

@dogmania

@dogmania dogmania commented Jun 3, 2026

Copy link
Copy Markdown
Member

이슈 번호

작업내용

  • AppResult 기반 Repository 로직 구현
  • :feature:general MVI 전환
  • UI 컴포넌트 불필요한 파라미터 제거

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 일정 생성 흐름의 향상된 상태 관리 시스템 도입
    • 장소 검색 기능 강화 및 일정 알람 설정 기능 추가
  • 개선 사항

    • 컴포넌트 API 간소화로 개발 경험 개선
    • 네비게이션 구조 확장 및 최적화
    • 일정 생성 및 조회 프로세스 안정성 향상

@dogmania dogmania self-assigned this Jun 3, 2026
@dogmania dogmania added the REFACTOR 코드 개선 label Jun 3, 2026
@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@dogmania, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 46 minutes and 7 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

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.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d29fa952-82d8-4f25-9347-9c2b34320330

📥 Commits

Reviewing files that changed from the base of the PR and between 01caa53 and 7ef97ee.

📒 Files selected for processing (2)
  • core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/DateSettingSection.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleViewModel.kt

워크스루

일정 생성 기능의 상태 관리를 MVVM에서 MVI 패턴으로 전환합니다. 디자인 시스템 컴포넌트 간소화부터 시작해 저장소 확장, MVI 계약 정의, 복잡한 비즈니스 로직 ViewModel, 라우팅 통합까지 단계적으로 구성됩니다.

변경 사항

디자인 시스템 컴포넌트 간소화

레이어 / 파일(들) 요약
interactionSource 매개변수 제거
core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/DateSettingSection.kt, feature/edit/src/commonMain/kotlin/com/ondot/edit/bottomSheet/*, feature/general/src/commonMain/kotlin/com/ondot/general/repeat/ScheduleRepeatSettingScreen.kt
DateSettingSection, DateSectionHeader, TimeSectionHeader 시그니처에서 외부 interactionSource 매개변수를 제거하고, 각 컴포넌트 내부에서 MutableInteractionSource()를 직접 생성하도록 변경합니다. 이를 따라 호출자들에서도 전달 인자를 제거합니다.

저장소 및 도메인 레이어 확장

레이어 / 파일(들) 요약
저장소 인터페이스 확장
domain/src/commonMain/kotlin/com/ondot/domain/repository/PlaceRepository.kt, domain/src/commonMain/kotlin/com/ondot/domain/repository/ScheduleRepository.kt
PlaceRepositorysearchPlaceAppResult(query: String): AppResult<List<AddressInfo>> 메서드를 추가하고, ScheduleRepositoryfetchScheduleAlarmscreateScheduleAppResult 메서드를 추가합니다.
저장소 구현 및 테스트 더블
data/src/commonMain/kotlin/com/ondot/data/repository/PlaceRepositoryImpl.kt, data/src/commonMain/kotlin/com/ondot/data/repository/ScheduleRepositoryImpl.kt, domain/testing/src/commonMain/kotlin/com/ondot/testing/fake/FakeScheduleRepository.kt
인터페이스 메서드들을 구현하여 /places/search, /alarms/setting, /schedules 엔드포인트를 호출하고, 응답을 도메인 모델로 매핑해 AppResult로 반환합니다. 테스트 저장소는 고정된 알람과 메모리 기반 스케줄 저장소를 사용합니다.

MVI 네비게이션 및 분석

레이어 / 파일(들) 요약
MVI 라우트 등록 및 맵핑
core/navigation/src/commonMain/kotlin/com/ondot/navigation/NavRoutes.kt, core/navigation/src/commonMain/kotlin/com/ondot/navigation/AppNavHost.kt
NavRoutesGeneralScheduleMviGraph, ScheduleRepeatSettingMvi, PlacePickerMvi, RouteLoadingMvi, CheckScheduleMvi 다섯 개 라우트를 추가하고, 분석 이벤트 이름 매핑에 포함시킵니다.

MVI 아키텍처 계약 정의

레이어 / 파일(들) 요약
Intent, SideEffect, State 계약
feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleIntent.kt, feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleSideEffect.kt, feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleState.kt
GeneralScheduleIntent는 초기화, 반복/요일/달력 설정, 날짜/시간 선택, 장소/히스토리 관리, 생성 등 25개의 사용자 액션을 정의합니다. GeneralScheduleSideEffect는 토스트 메시지와 네비게이션 이벤트를 정의합니다. GeneralScheduleState는 모든 스케줄 구성 필드와 단계별 버튼 활성화 상태를 계산하며, 레거시 UI 상태로의 변환 함수를 제공합니다.

MVI 비즈니스 로직 ViewModel

레이어 / 파일(들) 요약
ViewModel 상태 관리 및 핸들러
feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleViewModel.kt
scheduleRepository, placeRepository, memberRepository를 주입받아 497줄의 ViewModel을 구현합니다. 장소 검색을 debounce 및 distinct로 처리하고, 반복/달력/날짜/시간 선택을 상태에 반영합니다. 홈 주소와 장소 이력을 비동기 로딩하고, 선택 시 히스토리를 저장하며 포커스를 이동시킵니다. 일정 생성 전 입력값을 검증해 준비 시각을 계산한 뒤 알람을 조회하고, 스케줄을 생성하며 성공 시 메인으로 네비게이션합니다.

MVI 라우트 Composable 및 화면 통합

레이어 / 파일(들) 요약
라우트 함수 및 상태 매핑
feature/general/src/commonMain/kotlin/com/ondot/general/ui/check/CheckScheduleRoute.kt, feature/general/src/commonMain/kotlin/com/ondot/general/ui/place/PlacePickerRoute.kt, feature/general/src/commonMain/kotlin/com/ondot/general/ui/repeat/ScheduleRepeatSettingRoute.kt
세 개의 라우트 함수가 ViewModel 상태를 collectAsStateWithLifecycle로 구독하고, 사이드이펙트를 LaunchedEffect에서 처리하며, 모든 UI 콜백을 GeneralScheduleIntent로 매핑해 dispatch합니다. 각 라우트는 초기화 로직(홈 주소, 히스토리, 포커스)을 처리합니다.
상태 기반 화면 리팩토링
feature/general/src/commonMain/kotlin/com/ondot/general/check/CheckScheduleScreen.kt
CheckScheduleScreen에서 departurePlaceInputarrivalPlaceInput 매개변수를 제거하고, CheckScheduleContent의 시그니처를 단순화하며, RouteInputSection이 함수 매개변수 대신 uiState.placePickerState에서 직접 읽도록 변경합니다.

네비게이션 그래프 및 의존성 주입

레이어 / 파일(들) 요약
MVI 네비게이션 그래프 구성
feature/general/src/commonMain/kotlin/com/ondot/general/navigation/GeneralScheduleMviNavGraph.kt
NavGraphContributor를 구현해 네 개의 대상지(ScheduleRepeatSettingMvi, PlacePickerMvi, RouteLoadingMvi, CheckScheduleMvi)를 등록합니다. 각 대상지에서 부모 백스택 엔트리를 remember로 확보해 단일 ViewModel 인스턴스를 공유합니다. 네비게이션 흐름은 launchSingleTop과 단계별 popUpTo 정리를 사용하며, 메인 이동 시 그래프를 정리합니다.
의존성 주입 및 메인 통합
feature/general/src/commonMain/kotlin/com/ondot/general/di/GeneralModule.kt, feature/main/src/commonMain/kotlin/com/ondot/main/navigation/MainNavGraph.kt
Koin 모듈에 MVI ViewModel과 네비게이션 그래프 컨트리뷰터를 등록하고, MainNavGraphnavigateToGeneralSchedule 콜백을 MVI 그래프 경로로 변경합니다.

코드 리뷰 예상 소요 시간

🎯 4 (복잡함) | ⏱️ ~45분

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning 일부 변경사항이 범위를 벗어났습니다. interactionSource 제거는 MVI 전환의 직접적인 요구사항이 아니며, PlaceRepository/ScheduleRepository의 새로운 메서드는 issue #187에 명시되지 않은 추가 작업입니다. interactionSource 제거와 Repository 메서드 추가가 MVI 전환과의 직접적 연관성을 PR 설명에서 명확히 하거나, issue #187의 범위 확대를 통해 정당화해주세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 1.49% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 주요 변경사항인 :feature:general 모듈의 MVVM에서 MVI 패턴으로의 전환을 명확하게 설명하고 있습니다.
Linked Issues check ✅ Passed 연결된 issue #187의 모든 TODO 항목이 PR의 변경사항으로 구현되었습니다. UiState, Intent, SideEffect 정의 및 ViewModel MVI 구조 전환이 완료되었으며, AppResult 기반 Repository 로직도 추가되었습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/#187-general-mvi-pattern

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 and usage tips.

@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: 2

🧹 Nitpick comments (5)
feature/general/src/commonMain/kotlin/com/ondot/general/navigation/GeneralScheduleMviNavGraph.kt (1)

28-99: 💤 Low value

공유 ViewModel 획득 로직 중복 — 헬퍼로 추출 권장

parentEntry 계산 + koinViewModel(viewModelStoreOwner = parentEntry) 패턴이 3개 목적지(28-33, 51-56, 82-87)에 동일하게 반복됩니다. 목적지가 늘어날수록 getBackStackEntry 인자 실수 등의 위험이 커지므로 작은 @Composable 헬퍼로 묶는 것을 권장합니다.

♻️ 제안 리팩터링
`@Composable`
private fun NavGraphContributor.sharedGeneralScheduleViewModel(
    navController: NavHostController,
    backStackEntry: NavBackStackEntry,
): GeneralScheduleViewModel {
    val parentEntry =
        remember(backStackEntry) {
            navController.getBackStackEntry(graphRoute.route)
        }
    return koinViewModel(viewModelStoreOwner = parentEntry)
}
 composable(NavRoutes.ScheduleRepeatSettingMvi.route) { backStackEntry ->
-    val parentEntry =
-        remember(backStackEntry) {
-            navController.getBackStackEntry(graphRoute.route)
-        }
-    val viewModel: GeneralScheduleViewModel = koinViewModel(viewModelStoreOwner = parentEntry)
+    val viewModel = sharedGeneralScheduleViewModel(navController, backStackEntry)
🤖 Prompt for 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.

In
`@feature/general/src/commonMain/kotlin/com/ondot/general/navigation/GeneralScheduleMviNavGraph.kt`
around lines 28 - 99, The repeated pattern that computes parentEntry and calls
koinViewModel in the composable destinations (used in ScheduleRepeatSettingMvi,
PlacePickerMvi, and CheckScheduleMvi) should be extracted into a small
`@Composable` helper to avoid duplication and mistakes; add a private `@Composable`
function (e.g., sharedGeneralScheduleViewModel(navController: NavHostController,
backStackEntry: NavBackStackEntry): GeneralScheduleViewModel) inside the
NavGraphContributor that does the remember(backStackEntry){
navController.getBackStackEntry(graphRoute.route) } and returns
koinViewModel(viewModelStoreOwner = parentEntry), then replace the three inline
blocks that compute parentEntry and call koinViewModel with a single call to
this helper in ScheduleRepeatSettingRoute, PlacePickerRoute, and
CheckScheduleRoute.
domain/src/commonMain/kotlin/com/ondot/domain/repository/PlaceRepository.kt (1)

18-25: 💤 Low value

MVI 블록 내 메서드 네이밍 규칙이 일관되지 않습니다.

searchPlaceAppResultAppResult 접미사를 쓰지만, 같은 MVI 블록의 deleteHistory, fetchHistory, saveHistory는 접미사가 없습니다. 동일한 AppResult 반환 계열인데 규칙이 섞여 있어 호출부에서 혼동을 줄 수 있습니다. 한 가지 규칙으로 통일하는 것을 권장합니다.

🤖 Prompt for 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.

In `@domain/src/commonMain/kotlin/com/ondot/domain/repository/PlaceRepository.kt`
around lines 18 - 25, The MVI block has inconsistent method naming:
searchPlaceAppResult uses the AppResult suffix while deleteHistory,
fetchHistory, and saveHistory do not; pick one convention and make them
consistent (either rename searchPlaceAppResult -> searchPlace or rename
deleteHistory/fetchHistory/saveHistory ->
deleteHistoryAppResult/fetchHistoryAppResult/saveHistoryAppResult), then update
all callers, interfaces, and tests that reference the affected symbols
(searchPlaceAppResult, deleteHistory, fetchHistory, saveHistory) to the chosen
names so compilation and call sites remain correct.
domain/src/commonMain/kotlin/com/ondot/domain/repository/ScheduleRepository.kt (1)

46-48: 💤 Low value

Flow 기반 메서드와 기능이 중복됩니다 — 제거 계획을 명확히 해 주세요.

fetchScheduleAlarms는 기존 getScheduleAlarms(Line 22)와, createScheduleAppResultcreateSchedule(Line 24)과 동일한 원격 엔드포인트를 호출하는 중복 경로입니다. MVI 전환 과도기에는 공존이 불가피하지만, 전환 완료 후 레거시 Flow<Result<...>> 버전을 제거할 계획인지 확인이 필요합니다. 또한 fetchScheduleAlarms(접미사 없음)와 createScheduleAppResult(AppResult 접미사)의 네이밍 규칙이 엇갈립니다.

🤖 Prompt for 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.

In
`@domain/src/commonMain/kotlin/com/ondot/domain/repository/ScheduleRepository.kt`
around lines 46 - 48, There are duplicate API pathways and inconsistent naming
between Flow-based and AppResult-based methods; decide which API style to keep
(e.g., migrate fully to AppResult or Flow), remove the duplicate legacy methods
after migration (either remove getScheduleAlarms/createSchedule or
fetchScheduleAlarms/createScheduleAppResult), and make names consistent (rename
fetchScheduleAlarms -> getScheduleAlarms or createScheduleAppResult ->
createSchedule for parity). Update the repository interface methods
(fetchScheduleAlarms, getScheduleAlarms, createScheduleAppResult,
createSchedule), their implementations, and any callers/tests to the chosen
canonical names, and add a short deprecation comment on the variants being
phased out so reviewers know the removal plan.
domain/testing/src/commonMain/kotlin/com/ondot/testing/fake/FakeScheduleRepository.kt (1)

155-176: ⚡ Quick win

shouldFailNetwork 플래그가 새 AppResult 메서드에 반영되지 않습니다.

ViewModel의 searchPlace/fetchScheduleAlarms/createSchedule은 모두 onError에서 토스트 SideEffect를 방출하는데, 이 fake의 fetchScheduleAlarms/createScheduleAppResultshouldFailNetwork를 무시하고 항상 성공을 반환합니다. 그러면 실패 경로(에러 토스트)에 대한 테스트를 작성할 수 없습니다. 실패 시 AppResult.Failure를 반환하도록 분기를 추가하는 것을 권장합니다.

🤖 Prompt for 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.

In
`@domain/testing/src/commonMain/kotlin/com/ondot/testing/fake/FakeScheduleRepository.kt`
around lines 155 - 176, The fake repository methods ignore the shouldFailNetwork
flag and always return success; update FakeScheduleRepository so
fetchScheduleAlarms(request: ScheduleAlarmRequest) and
createScheduleAppResult(request: CreateScheduleRequest) check the
shouldFailNetwork flag and return AppResult.Failure when it’s true (e.g.,
construct a suitable error/exception or AppError) otherwise proceed with the
existing success behavior; ensure you reference the shouldFailNetwork property
inside those methods and return AppResult.Failure in the failure branch so tests
can exercise error-toasting paths.
feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleViewModel.kt (1)

54-56: 💤 Low value

debounce(100)은 검색 API 호출에 다소 짧습니다.

입력 한 글자마다 100ms 후 호출되어 불필요한 네트워크 요청이 잦을 수 있습니다. 300ms 정도로 늘리는 것을 고려해 보세요.

🤖 Prompt for 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.

In
`@feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleViewModel.kt`
around lines 54 - 56, Update the debounce duration on the query Flow in
GeneralScheduleViewModel by changing query.debounce(100) to query.debounce(300);
locate the debounce call in the GeneralScheduleViewModel (the chain starting
with "query .debounce(100) .distinctUntilChanged()") and replace 100 with 300 to
reduce overly frequent search API calls.
🤖 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
`@core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/DateSettingSection.kt`:
- Line 122: TimeSectionHeader와 DateSectionHeader에서 매 리컴포지션마다 새로운
MutableInteractionSource 인스턴스가 생성되고 있으니 각 컴포저블 내의 val interactionSource =
MutableInteractionSource()를 remember { MutableInteractionSource() }로 감싸서 인스턴스를
재사용하도록 변경하세요; TimeSectionHeader와 DateSectionHeader의 interactionSource 선언부를 찾아
remember로 래핑하면 리컴포지션 시 상태가 안정적으로 유지됩니다.

In
`@feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleViewModel.kt`:
- Around line 52-70: When the query Flow emits a blank value the code only
clears placePickerState.placeList but does not cancel the ongoing search job, so
a previous search can still complete and overwrite the cleared list; in the init
block's collector (the debounce/distinctUntilChanged/onEach chain) cancel the
running search job (searchPlaceJob) when value.isBlank() before reducing state,
e.g. check if searchPlaceJob is active/null and call cancel() (and optionally
join or invokeOnCompletion) so searchPlace(q) results cannot race to update
placePickerState after you clear it; ensure the same searchPlaceJob is
used/updated inside searchPlace(...) so cancellation takes effect.

---

Nitpick comments:
In `@domain/src/commonMain/kotlin/com/ondot/domain/repository/PlaceRepository.kt`:
- Around line 18-25: The MVI block has inconsistent method naming:
searchPlaceAppResult uses the AppResult suffix while deleteHistory,
fetchHistory, and saveHistory do not; pick one convention and make them
consistent (either rename searchPlaceAppResult -> searchPlace or rename
deleteHistory/fetchHistory/saveHistory ->
deleteHistoryAppResult/fetchHistoryAppResult/saveHistoryAppResult), then update
all callers, interfaces, and tests that reference the affected symbols
(searchPlaceAppResult, deleteHistory, fetchHistory, saveHistory) to the chosen
names so compilation and call sites remain correct.

In
`@domain/src/commonMain/kotlin/com/ondot/domain/repository/ScheduleRepository.kt`:
- Around line 46-48: There are duplicate API pathways and inconsistent naming
between Flow-based and AppResult-based methods; decide which API style to keep
(e.g., migrate fully to AppResult or Flow), remove the duplicate legacy methods
after migration (either remove getScheduleAlarms/createSchedule or
fetchScheduleAlarms/createScheduleAppResult), and make names consistent (rename
fetchScheduleAlarms -> getScheduleAlarms or createScheduleAppResult ->
createSchedule for parity). Update the repository interface methods
(fetchScheduleAlarms, getScheduleAlarms, createScheduleAppResult,
createSchedule), their implementations, and any callers/tests to the chosen
canonical names, and add a short deprecation comment on the variants being
phased out so reviewers know the removal plan.

In
`@domain/testing/src/commonMain/kotlin/com/ondot/testing/fake/FakeScheduleRepository.kt`:
- Around line 155-176: The fake repository methods ignore the shouldFailNetwork
flag and always return success; update FakeScheduleRepository so
fetchScheduleAlarms(request: ScheduleAlarmRequest) and
createScheduleAppResult(request: CreateScheduleRequest) check the
shouldFailNetwork flag and return AppResult.Failure when it’s true (e.g.,
construct a suitable error/exception or AppError) otherwise proceed with the
existing success behavior; ensure you reference the shouldFailNetwork property
inside those methods and return AppResult.Failure in the failure branch so tests
can exercise error-toasting paths.

In
`@feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleViewModel.kt`:
- Around line 54-56: Update the debounce duration on the query Flow in
GeneralScheduleViewModel by changing query.debounce(100) to query.debounce(300);
locate the debounce call in the GeneralScheduleViewModel (the chain starting
with "query .debounce(100) .distinctUntilChanged()") and replace 100 with 300 to
reduce overly frequent search API calls.

In
`@feature/general/src/commonMain/kotlin/com/ondot/general/navigation/GeneralScheduleMviNavGraph.kt`:
- Around line 28-99: The repeated pattern that computes parentEntry and calls
koinViewModel in the composable destinations (used in ScheduleRepeatSettingMvi,
PlacePickerMvi, and CheckScheduleMvi) should be extracted into a small
`@Composable` helper to avoid duplication and mistakes; add a private `@Composable`
function (e.g., sharedGeneralScheduleViewModel(navController: NavHostController,
backStackEntry: NavBackStackEntry): GeneralScheduleViewModel) inside the
NavGraphContributor that does the remember(backStackEntry){
navController.getBackStackEntry(graphRoute.route) } and returns
koinViewModel(viewModelStoreOwner = parentEntry), then replace the three inline
blocks that compute parentEntry and call koinViewModel with a single call to
this helper in ScheduleRepeatSettingRoute, PlacePickerRoute, and
CheckScheduleRoute.
🪄 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: CHILL

Plan: Pro

Run ID: 3c69f898-b3cd-4490-9cdf-1aa2da62bd54

📥 Commits

Reviewing files that changed from the base of the PR and between 6326149 and 01caa53.

📒 Files selected for processing (22)
  • core/design-system/src/commonMain/kotlin/com/ondot/designsystem/components/DateSettingSection.kt
  • core/navigation/src/commonMain/kotlin/com/ondot/navigation/AppNavHost.kt
  • core/navigation/src/commonMain/kotlin/com/ondot/navigation/NavRoutes.kt
  • data/src/commonMain/kotlin/com/ondot/data/repository/PlaceRepositoryImpl.kt
  • data/src/commonMain/kotlin/com/ondot/data/repository/ScheduleRepositoryImpl.kt
  • domain/src/commonMain/kotlin/com/ondot/domain/repository/PlaceRepository.kt
  • domain/src/commonMain/kotlin/com/ondot/domain/repository/ScheduleRepository.kt
  • domain/testing/src/commonMain/kotlin/com/ondot/testing/fake/FakeScheduleRepository.kt
  • feature/edit/src/commonMain/kotlin/com/ondot/edit/bottomSheet/EditDateBottomSheet.kt
  • feature/edit/src/commonMain/kotlin/com/ondot/edit/bottomSheet/EditTimeBottomSheet.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/check/CheckScheduleScreen.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleIntent.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleSideEffect.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleState.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/contract/GeneralScheduleViewModel.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/di/GeneralModule.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/navigation/GeneralScheduleMviNavGraph.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/repeat/ScheduleRepeatSettingScreen.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/ui/check/CheckScheduleRoute.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/ui/place/PlacePickerRoute.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/ui/repeat/ScheduleRepeatSettingRoute.kt
  • feature/main/src/commonMain/kotlin/com/ondot/main/navigation/MainNavGraph.kt
💤 Files with no reviewable changes (3)
  • feature/edit/src/commonMain/kotlin/com/ondot/edit/bottomSheet/EditTimeBottomSheet.kt
  • feature/general/src/commonMain/kotlin/com/ondot/general/repeat/ScheduleRepeatSettingScreen.kt
  • feature/edit/src/commonMain/kotlin/com/ondot/edit/bottomSheet/EditDateBottomSheet.kt

@dogmania
dogmania merged commit 06707c0 into develop Jun 3, 2026
1 check was pending
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

REFACTOR 코드 개선

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: :feature:general MVI 전환

1 participant