Skip to content

Commit 868e30f

Browse files
committed
[BOOK-167] refactor: Search prefix를 BookSearch로 수정
1 parent 9aeb51f commit 868e30f

File tree

4 files changed

+68
-68
lines changed

4 files changed

+68
-68
lines changed

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/SearchPresenter.kt renamed to feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,17 @@ import kotlinx.collections.immutable.toImmutableList
3333
import kotlinx.collections.immutable.toPersistentList
3434
import kotlinx.coroutines.launch
3535

36-
class SearchPresenter @AssistedInject constructor(
36+
class BookSearchPresenter @AssistedInject constructor(
3737
@Assisted private val navigator: Navigator,
3838
private val repository: BookRepository,
39-
) : Presenter<SearchUiState> {
39+
) : Presenter<BookSearchUiState> {
4040
companion object {
4141
private const val PAGE_SIZE = 20
4242
private const val START_INDEX = 1
4343
}
4444

4545
@Composable
46-
override fun present(): SearchUiState {
46+
override fun present(): BookSearchUiState {
4747
val scope = rememberCoroutineScope()
4848
var uiState by rememberRetained { mutableStateOf<UiState>(UiState.Idle) }
4949
var footerState by rememberRetained { mutableStateOf<FooterState>(FooterState.Idle) }
@@ -58,7 +58,7 @@ class SearchPresenter @AssistedInject constructor(
5858
var isBookRegisterBottomSheetVisible by rememberRetained { mutableStateOf(false) }
5959
var selectedBookStatus by rememberRetained { mutableStateOf<BookStatus?>(null) }
6060
var isBookRegisterSuccessBottomSheetVisible by rememberRetained { mutableStateOf(false) }
61-
var sideEffect by rememberRetained { mutableStateOf<SearchSideEffect?>(null) }
61+
var sideEffect by rememberRetained { mutableStateOf<BookSearchSideEffect?>(null) }
6262

6363
fun searchBooks(query: String, startIndex: Int = START_INDEX) {
6464
scope.launch {
@@ -117,7 +117,7 @@ class SearchPresenter @AssistedInject constructor(
117117
.onFailure { exception ->
118118
val handleErrorMessage = { message: String ->
119119
Logger.e(message)
120-
sideEffect = SearchSideEffect.ShowToast(message)
120+
sideEffect = BookSearchSideEffect.ShowToast(message)
121121
}
122122

123123
handleException(
@@ -131,88 +131,88 @@ class SearchPresenter @AssistedInject constructor(
131131
}
132132
}
133133

134-
fun handleEvent(event: SearchUiEvent) {
134+
fun handleEvent(event: BookSearchUiEvent) {
135135
when (event) {
136-
is SearchUiEvent.OnBackClick -> {
136+
is BookSearchUiEvent.OnBackClick -> {
137137
navigator.pop()
138138
}
139139

140-
is SearchUiEvent.OnRecentSearchClick -> {
140+
is BookSearchUiEvent.OnRecentSearchClick -> {
141141
queryState.edit {
142142
replace(0, length, "")
143143
append(event.query)
144144
}
145145
searchBooks(query = event.query, startIndex = START_INDEX)
146146
}
147147

148-
is SearchUiEvent.OnRecentSearchRemoveClick -> {
148+
is BookSearchUiEvent.OnRecentSearchRemoveClick -> {
149149
scope.launch {
150150
repository.removeBookRecentSearch(query = event.query)
151151
}
152152
}
153153

154-
is SearchUiEvent.OnSearchClick -> {
154+
is BookSearchUiEvent.OnSearchClick -> {
155155
val query = event.text.trim()
156156
if (query.isNotEmpty()) {
157157
searchBooks(query = event.text, startIndex = START_INDEX)
158158
}
159159
}
160160

161-
is SearchUiEvent.OnClearClick -> {
161+
is BookSearchUiEvent.OnClearClick -> {
162162
queryState.clearText()
163163
}
164164

165-
is SearchUiEvent.OnLoadMore -> {
165+
is BookSearchUiEvent.OnLoadMore -> {
166166
val query = queryState.text.trim().toString()
167167
if (footerState !is FooterState.Loading && !isLastPage && query.isNotEmpty()) {
168168
searchBooks(query = queryState.text.toString(), startIndex = currentStartIndex + 1)
169169
}
170170
}
171171

172-
is SearchUiEvent.OnRetryClick -> {
172+
is BookSearchUiEvent.OnRetryClick -> {
173173
val query = queryState.text.trim().toString()
174174
if (query.isNotEmpty()) {
175175
searchBooks(query = queryState.text.toString(), startIndex = START_INDEX)
176176
}
177177
}
178178

179-
is SearchUiEvent.OnBookClick -> {
179+
is BookSearchUiEvent.OnBookClick -> {
180180
selectedBookIsbn = event.bookIsbn
181181
isBookRegisterBottomSheetVisible = true
182182
}
183183

184-
is SearchUiEvent.OnBookRegisterBottomSheetDismiss -> {
184+
is BookSearchUiEvent.OnBookRegisterBottomSheetDismiss -> {
185185
isBookRegisterBottomSheetVisible = false
186186
selectedBookIsbn = ""
187187
selectedBookStatus = null
188188
}
189189

190-
is SearchUiEvent.OnBookStatusSelect -> {
190+
is BookSearchUiEvent.OnBookStatusSelect -> {
191191
selectedBookStatus = event.bookStatus
192192
}
193193

194-
is SearchUiEvent.OnBookRegisterButtonClick -> {
194+
is BookSearchUiEvent.OnBookRegisterButtonClick -> {
195195
selectedBookStatus?.let { bookStatus -> upsertBook(selectedBookIsbn, bookStatus.value) }
196196
}
197197

198-
is SearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss -> {
198+
is BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss -> {
199199
isBookRegisterSuccessBottomSheetVisible = false
200200
}
201201

202-
is SearchUiEvent.OnBookRegisterSuccessOkButtonClick -> {
202+
is BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick -> {
203203
isBookRegisterSuccessBottomSheetVisible = false
204204
scope.launch {
205205
navigator.delayedGoTo(RecordScreen(registeredUserBookId))
206206
}
207207
}
208208

209-
is SearchUiEvent.OnBookRegisterSuccessCancelButtonClick -> {
209+
is BookSearchUiEvent.OnBookRegisterSuccessCancelButtonClick -> {
210210
isBookRegisterSuccessBottomSheetVisible = false
211211
}
212212
}
213213
}
214214

215-
return SearchUiState(
215+
return BookSearchUiState(
216216
uiState = uiState,
217217
footerState = footerState,
218218
queryState = queryState,
@@ -233,6 +233,6 @@ class SearchPresenter @AssistedInject constructor(
233233
@CircuitInject(SearchScreen::class, ActivityRetainedComponent::class)
234234
@AssistedFactory
235235
fun interface Factory {
236-
fun create(navigator: Navigator): SearchPresenter
236+
fun create(navigator: Navigator): BookSearchPresenter
237237
}
238238
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/SearchUi.kt renamed to feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,16 @@ import com.ninecraft.booket.core.designsystem.R as designR
5050
@CircuitInject(SearchScreen::class, ActivityRetainedComponent::class)
5151
@Composable
5252
internal fun SearchUi(
53-
state: SearchUiState,
53+
state: BookSearchUiState,
5454
modifier: Modifier = Modifier,
5555
) {
56-
HandleSearchSideEffects(state = state)
56+
HandleBookSearchSideEffects(state = state)
5757

5858
ReedFullScreen(modifier = modifier) {
5959
ReedBackTopAppBar(
6060
title = stringResource(R.string.search_title),
6161
onBackClick = {
62-
state.eventSink(SearchUiEvent.OnBackClick)
62+
state.eventSink(BookSearchUiEvent.OnBackClick)
6363
},
6464
)
6565
SearchContent(
@@ -72,7 +72,7 @@ internal fun SearchUi(
7272
@OptIn(ExperimentalMaterial3Api::class)
7373
@Composable
7474
internal fun SearchContent(
75-
state: SearchUiState,
75+
state: BookSearchUiState,
7676
modifier: Modifier = Modifier,
7777
) {
7878
val bookRegisterBottomSheetState = rememberModalBottomSheetState()
@@ -89,10 +89,10 @@ internal fun SearchContent(
8989
queryState = state.queryState,
9090
queryHintRes = designR.string.search_book_hint,
9191
onSearch = { text ->
92-
state.eventSink(SearchUiEvent.OnSearchClick(text))
92+
state.eventSink(BookSearchUiEvent.OnSearchClick(text))
9393
},
9494
onClear = {
95-
state.eventSink(SearchUiEvent.OnClearClick)
95+
state.eventSink(BookSearchUiEvent.OnClearClick)
9696
},
9797
modifier = modifier.padding(horizontal = ReedTheme.spacing.spacing5),
9898
borderStroke = BorderStroke(width = 1.dp, color = ReedTheme.colors.borderBrand),
@@ -129,7 +129,7 @@ internal fun SearchContent(
129129
style = ReedTheme.typography.body1Regular,
130130
)
131131
Button(
132-
onClick = { state.eventSink(SearchUiEvent.OnRetryClick) },
132+
onClick = { state.eventSink(BookSearchUiEvent.OnRetryClick) },
133133
modifier = Modifier.padding(top = ReedTheme.spacing.spacing3),
134134
) {
135135
Text(text = stringResource(R.string.retry))
@@ -165,11 +165,11 @@ internal fun SearchContent(
165165
SearchItem(
166166
query = state.recentSearches[index],
167167
onQueryClick = { keyword ->
168-
state.eventSink(SearchUiEvent.OnRecentSearchClick(keyword))
168+
state.eventSink(BookSearchUiEvent.OnRecentSearchClick(keyword))
169169
},
170170
onRemoveIconClick = { keyword ->
171171
state.eventSink(
172-
SearchUiEvent.OnRecentSearchRemoveClick(keyword),
172+
BookSearchUiEvent.OnRecentSearchRemoveClick(keyword),
173173
)
174174
},
175175
)
@@ -224,7 +224,7 @@ internal fun SearchContent(
224224

225225
InfinityLazyColumn(
226226
loadMore = {
227-
state.eventSink(SearchUiEvent.OnLoadMore)
227+
state.eventSink(BookSearchUiEvent.OnLoadMore)
228228
},
229229
) {
230230
items(
@@ -235,9 +235,9 @@ internal fun SearchContent(
235235
BookItem(
236236
book = state.books[index],
237237
onBookClick = { book ->
238-
state.eventSink(SearchUiEvent.OnBookClick(book.isbn13))
238+
state.eventSink(BookSearchUiEvent.OnBookClick(book.isbn13))
239239
},
240-
enabled = SearchBookStatus.from(state.books[index].userBookStatus) == SearchBookStatus.BEFORE_REGISTRATION,
240+
enabled = BookRegisteredState.from(state.books[index].userBookStatus) == BookRegisteredState.BEFORE_REGISTRATION,
241241
)
242242
HorizontalDivider(
243243
modifier = Modifier.fillMaxWidth(),
@@ -250,7 +250,7 @@ internal fun SearchContent(
250250
item {
251251
LoadStateFooter(
252252
footerState = state.footerState,
253-
onRetryClick = { state.eventSink(SearchUiEvent.OnLoadMore) },
253+
onRetryClick = { state.eventSink(BookSearchUiEvent.OnLoadMore) },
254254
)
255255
}
256256
}
@@ -260,36 +260,36 @@ internal fun SearchContent(
260260

261261
if (state.isBookRegisterBottomSheetVisible) {
262262
BookRegisterBottomSheet(
263-
onDismissRequest = { state.eventSink(SearchUiEvent.OnBookRegisterBottomSheetDismiss) },
263+
onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterBottomSheetDismiss) },
264264
sheetState = bookRegisterBottomSheetState,
265265
onCloseButtonClick = {
266266
coroutineScope.launch {
267267
bookRegisterBottomSheetState.hide()
268-
state.eventSink(SearchUiEvent.OnBookRegisterBottomSheetDismiss)
268+
state.eventSink(BookSearchUiEvent.OnBookRegisterBottomSheetDismiss)
269269
}
270270
},
271271
bookStatuses = BookStatus.entries.toTypedArray().toImmutableList(),
272272
currentBookStatus = state.selectedBookStatus,
273273
onItemSelected = { bookStatus ->
274274
state.eventSink(
275-
SearchUiEvent.OnBookStatusSelect(bookStatus),
275+
BookSearchUiEvent.OnBookStatusSelect(bookStatus),
276276
)
277277
},
278-
onBookRegisterButtonClick = { state.eventSink(SearchUiEvent.OnBookRegisterButtonClick) },
278+
onBookRegisterButtonClick = { state.eventSink(BookSearchUiEvent.OnBookRegisterButtonClick) },
279279
)
280280
}
281281

282282
if (state.isBookRegisterSuccessBottomSheetVisible) {
283283
BookRegisterSuccessBottomSheet(
284-
onDismissRequest = { state.eventSink(SearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) },
284+
onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) },
285285
sheetState = bookRegisterSuccessBottomSheetState,
286286
onCancelButtonClick = {
287287
coroutineScope.launch {
288288
bookRegisterSuccessBottomSheetState.hide()
289-
state.eventSink(SearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss)
289+
state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss)
290290
}
291291
},
292-
onOKButtonClick = { state.eventSink(SearchUiEvent.OnBookRegisterSuccessOkButtonClick) },
292+
onOKButtonClick = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick) },
293293
)
294294
}
295295
}
@@ -300,7 +300,7 @@ internal fun SearchContent(
300300
private fun SearchPreview() {
301301
ReedTheme {
302302
SearchUi(
303-
state = SearchUiState(
303+
state = BookSearchUiState(
304304
eventSink = {},
305305
),
306306
)

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/SearchUiState.kt renamed to feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ sealed interface UiState {
1919
data class Error(val message: String) : UiState
2020
}
2121

22-
data class SearchUiState(
22+
data class BookSearchUiState(
2323
val uiState: UiState = UiState.Idle,
2424
val footerState: FooterState = FooterState.Idle,
2525
val queryState: TextFieldState = TextFieldState(),
@@ -32,43 +32,43 @@ data class SearchUiState(
3232
val isBookRegisterBottomSheetVisible: Boolean = false,
3333
val selectedBookStatus: BookStatus? = null,
3434
val isBookRegisterSuccessBottomSheetVisible: Boolean = false,
35-
val sideEffect: SearchSideEffect? = null,
36-
val eventSink: (SearchUiEvent) -> Unit,
35+
val sideEffect: BookSearchSideEffect? = null,
36+
val eventSink: (BookSearchUiEvent) -> Unit,
3737
) : CircuitUiState {
3838
val isEmptySearchResult: Boolean get() = uiState is UiState.Success && searchResult.totalResults == 0
3939
}
4040

4141
@Immutable
42-
sealed interface SearchSideEffect {
42+
sealed interface BookSearchSideEffect {
4343
data class ShowToast(
4444
val message: String,
4545
private val key: String = UUID.randomUUID().toString(),
46-
) : SearchSideEffect
46+
) : BookSearchSideEffect
4747
}
4848

49-
sealed interface SearchUiEvent : CircuitUiEvent {
50-
data object OnBackClick : SearchUiEvent
51-
data class OnRecentSearchClick(val query: String) : SearchUiEvent
52-
data class OnRecentSearchRemoveClick(val query: String) : SearchUiEvent
53-
data class OnSearchClick(val text: String) : SearchUiEvent
54-
data object OnClearClick : SearchUiEvent
55-
data class OnBookClick(val bookIsbn: String) : SearchUiEvent
56-
data object OnLoadMore : SearchUiEvent
57-
data object OnRetryClick : SearchUiEvent
58-
data object OnBookRegisterBottomSheetDismiss : SearchUiEvent
59-
data class OnBookStatusSelect(val bookStatus: BookStatus) : SearchUiEvent
60-
data object OnBookRegisterSuccessBottomSheetDismiss : SearchUiEvent
61-
data object OnBookRegisterButtonClick : SearchUiEvent
62-
data object OnBookRegisterSuccessOkButtonClick : SearchUiEvent
63-
data object OnBookRegisterSuccessCancelButtonClick : SearchUiEvent
49+
sealed interface BookSearchUiEvent : CircuitUiEvent {
50+
data object OnBackClick : BookSearchUiEvent
51+
data class OnRecentSearchClick(val query: String) : BookSearchUiEvent
52+
data class OnRecentSearchRemoveClick(val query: String) : BookSearchUiEvent
53+
data class OnSearchClick(val text: String) : BookSearchUiEvent
54+
data object OnClearClick : BookSearchUiEvent
55+
data class OnBookClick(val bookIsbn: String) : BookSearchUiEvent
56+
data object OnLoadMore : BookSearchUiEvent
57+
data object OnRetryClick : BookSearchUiEvent
58+
data object OnBookRegisterBottomSheetDismiss : BookSearchUiEvent
59+
data class OnBookStatusSelect(val bookStatus: BookStatus) : BookSearchUiEvent
60+
data object OnBookRegisterSuccessBottomSheetDismiss : BookSearchUiEvent
61+
data object OnBookRegisterButtonClick : BookSearchUiEvent
62+
data object OnBookRegisterSuccessOkButtonClick : BookSearchUiEvent
63+
data object OnBookRegisterSuccessCancelButtonClick : BookSearchUiEvent
6464
}
6565

66-
enum class SearchBookStatus(val value: String) {
66+
enum class BookRegisteredState(val value: String) {
6767
BEFORE_REGISTRATION("BEFORE_REGISTRATION"),
6868
;
6969

7070
companion object {
71-
fun from(value: String?): SearchBookStatus? {
71+
fun from(value: String?): BookRegisteredState? {
7272
return entries.find { it.value == value }
7373
}
7474
}

feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/HandlingSearchSideEffect.kt renamed to feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/HandlingBookSearchSideEffect.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import androidx.compose.ui.platform.LocalContext
66
import com.skydoves.compose.effects.RememberedEffect
77

88
@Composable
9-
internal fun HandleSearchSideEffects(
10-
state: SearchUiState,
9+
internal fun HandleBookSearchSideEffects(
10+
state: BookSearchUiState,
1111
) {
1212
val context = LocalContext.current
1313

1414
RememberedEffect(state.sideEffect) {
1515
when (state.sideEffect) {
16-
is SearchSideEffect.ShowToast -> {
16+
is BookSearchSideEffect.ShowToast -> {
1717
Toast.makeText(context, state.sideEffect.message, Toast.LENGTH_SHORT).show()
1818
}
1919

0 commit comments

Comments
 (0)