Skip to content

Commit 977d408

Browse files
committed
[BOOK-265] refactor: 컴포넌트 생명주기에 맞춰 코루틴 관리하도록 개선
- 기존 coroutineScope를 scope.launch로 감싸 presenter 생명주기에 맞추도록 함
1 parent fe16fdc commit 977d408

1 file changed

Lines changed: 41 additions & 39 deletions

File tree

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -81,52 +81,54 @@ class BookDetailPresenter @AssistedInject constructor(
8181
var sideEffect by rememberRetained { mutableStateOf<BookDetailSideEffect?>(null) }
8282

8383
@Suppress("TooGenericExceptionCaught")
84-
suspend fun initialLoad() {
84+
fun initialLoad() {
8585
uiState = UiState.Loading
8686

87-
try {
88-
coroutineScope {
89-
val bookDetailDef = async { bookRepository.getBookDetail(screen.isbn13).getOrThrow() }
90-
val seedsDef = async { bookRepository.getSeedsStats(screen.userBookId).getOrThrow() }
91-
val readingRecordsDef = async {
92-
recordRepository.getReadingRecords(
93-
userBookId = screen.userBookId,
94-
sort = currentRecordSort.value,
95-
page = START_INDEX,
96-
size = PAGE_SIZE,
97-
).getOrThrow()
98-
}
99-
val detail = bookDetailDef.await()
100-
val seeds = seedsDef.await()
101-
val records = readingRecordsDef.await()
87+
scope.launch {
88+
try {
89+
coroutineScope {
90+
val bookDetailDeferred = async { bookRepository.getBookDetail(screen.isbn13).getOrThrow() }
91+
val seedsDeferred = async { bookRepository.getSeedsStats(screen.userBookId).getOrThrow() }
92+
val readingRecordsDeferred = async {
93+
recordRepository.getReadingRecords(
94+
userBookId = screen.userBookId,
95+
sort = currentRecordSort.value,
96+
page = START_INDEX,
97+
size = PAGE_SIZE,
98+
).getOrThrow()
99+
}
100+
val detail = bookDetailDeferred.await()
101+
val seeds = seedsDeferred.await()
102+
val records = readingRecordsDeferred.await()
102103

103-
bookDetail = detail
104-
currentBookStatus = BookStatus.fromValue(detail.userBookStatus) ?: BookStatus.BEFORE_READING
105-
selectedBookStatus = currentBookStatus
106-
seedsStates = seeds.categories.toImmutableList()
107-
readingRecords = records.readingRecords.toPersistentList()
108-
readingRecordsTotalCount = records.totalResults
104+
bookDetail = detail
105+
currentBookStatus = BookStatus.fromValue(detail.userBookStatus) ?: BookStatus.BEFORE_READING
106+
selectedBookStatus = currentBookStatus
107+
seedsStates = seeds.categories.toImmutableList()
108+
readingRecords = records.readingRecords.toPersistentList()
109+
readingRecordsTotalCount = records.totalResults
109110

110-
isLastPage = records.lastPage
111-
currentStartIndex = START_INDEX
111+
isLastPage = records.lastPage
112+
currentStartIndex = START_INDEX
112113

113-
uiState = UiState.Success
114-
}
115-
} catch (e: Throwable) {
116-
uiState = UiState.Error(e)
114+
uiState = UiState.Success
115+
}
116+
} catch (e: Throwable) {
117+
uiState = UiState.Error(e)
117118

118-
val handleErrorMessage = { message: String ->
119-
Logger.e(message)
120-
sideEffect = BookDetailSideEffect.ShowToast(message)
121-
}
119+
val handleErrorMessage = { message: String ->
120+
Logger.e(message)
121+
sideEffect = BookDetailSideEffect.ShowToast(message)
122+
}
122123

123-
handleException(
124-
exception = e,
125-
onError = handleErrorMessage,
126-
onLoginRequired = {
127-
navigator.resetRoot(LoginScreen)
128-
},
129-
)
124+
handleException(
125+
exception = e,
126+
onError = handleErrorMessage,
127+
onLoginRequired = {
128+
navigator.resetRoot(LoginScreen)
129+
},
130+
)
131+
}
130132
}
131133
}
132134

0 commit comments

Comments
 (0)