Skip to content

Commit 336c7af

Browse files
authored
Merge pull request #39 from YAPP-Github/BOOK-121-refactor/#36
refactor: feature 모듈간 의존성 제거
2 parents 4c358da + e24d4a6 commit 336c7af

File tree

31 files changed

+351
-186
lines changed

31 files changed

+351
-186
lines changed

build-logic/src/main/kotlin/AndroidFeatureConventionPlugin.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
2+
import com.ninecraft.booket.convention.api
13
import com.ninecraft.booket.convention.applyPlugins
24
import com.ninecraft.booket.convention.implementation
3-
import com.ninecraft.booket.convention.api
45
import com.ninecraft.booket.convention.ksp
5-
import com.ninecraft.booket.convention.project
66
import com.ninecraft.booket.convention.libs
7+
import com.ninecraft.booket.convention.project
78
import org.gradle.api.Plugin
89
import org.gradle.api.Project
910
import org.gradle.kotlin.dsl.dependencies
@@ -23,6 +24,7 @@ internal class AndroidFeatureConventionPlugin : Plugin<Project> {
2324
implementation(project(path = ":core:designsystem"))
2425
implementation(project(path = ":core:model"))
2526
implementation(project(path = ":core:ui"))
27+
implementation(project(path = ":screens"))
2628

2729
implementation(libs.compose.effects)
2830

build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,7 @@ allprojects {
4141
}
4242
}
4343
}
44+
45+
apply {
46+
from("gradle/projectDependencyGraph.gradle")
47+
}

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.ninecraft.booket.feature.home
22

33
import androidx.compose.runtime.Composable
44
import androidx.compose.runtime.rememberCoroutineScope
5+
import com.ninecraft.booket.screens.HomeScreen
56
import com.slack.circuit.codegen.annotations.CircuitInject
67
import com.slack.circuit.runtime.Navigator
78
import com.slack.circuit.runtime.presenter.Presenter
@@ -13,13 +14,13 @@ import dagger.hilt.android.components.ActivityRetainedComponent
1314
@Suppress("unused")
1415
class HomePresenter @AssistedInject constructor(
1516
@Assisted private val navigator: Navigator,
16-
) : Presenter<HomeScreen.State> {
17+
) : Presenter<HomeUiState> {
1718

1819
@Composable
19-
override fun present(): HomeScreen.State {
20+
override fun present(): HomeUiState {
2021
val scope = rememberCoroutineScope()
2122

22-
return HomeScreen.State {}
23+
return HomeUiState {}
2324
}
2425

2526
@CircuitInject(HomeScreen::class, ActivityRetainedComponent::class)

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeScreen.kt

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,14 @@ import androidx.compose.ui.Alignment
99
import androidx.compose.ui.Modifier
1010
import com.ninecraft.booket.core.designsystem.DevicePreview
1111
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
12+
import com.ninecraft.booket.screens.HomeScreen
1213
import com.slack.circuit.codegen.annotations.CircuitInject
13-
import com.slack.circuit.runtime.CircuitUiEvent
14-
import com.slack.circuit.runtime.CircuitUiState
15-
import com.slack.circuit.runtime.screen.Screen
1614
import dagger.hilt.android.components.ActivityRetainedComponent
17-
import kotlinx.parcelize.Parcelize
18-
19-
@Parcelize
20-
data object HomeScreen : Screen {
21-
data class State(
22-
val eventSink: (Event) -> Unit,
23-
) : CircuitUiState
24-
25-
sealed interface Event : CircuitUiEvent
26-
}
2715

2816
@CircuitInject(HomeScreen::class, ActivityRetainedComponent::class)
2917
@Composable
3018
internal fun Home(
31-
state: HomeScreen.State,
19+
state: HomeUiState,
3220
modifier: Modifier = Modifier,
3321
) {
3422
Column(
@@ -46,7 +34,7 @@ internal fun Home(
4634
@Suppress("unused")
4735
@Composable
4836
internal fun HomeContent(
49-
state: HomeScreen.State,
37+
state: HomeUiState,
5038
modifier: Modifier = Modifier,
5139
) {
5240
Text(text = "")
@@ -57,7 +45,7 @@ internal fun HomeContent(
5745
private fun HomePreview() {
5846
ReedTheme {
5947
Home(
60-
state = HomeScreen.State(
48+
state = HomeUiState(
6149
eventSink = {},
6250
),
6351
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.ninecraft.booket.feature.home
2+
3+
import com.slack.circuit.runtime.CircuitUiEvent
4+
import com.slack.circuit.runtime.CircuitUiState
5+
6+
data class HomeUiState(
7+
val eventSink: (HomeUiEvent) -> Unit,
8+
) : CircuitUiState
9+
10+
sealed interface HomeUiEvent : CircuitUiEvent

feature/library/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ ksp {
1616

1717
dependencies {
1818
implementations(
19-
projects.feature.login,
20-
2119
libs.logger,
2220
)
2321
}

feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/HandleLibrarySideEffects.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@ import androidx.compose.ui.platform.LocalContext
77

88
@Composable
99
internal fun HandleLibrarySideEffects(
10-
state: LibraryScreen.State,
11-
eventSink: (LibraryScreen.Event) -> Unit,
10+
state: LibraryUiState,
11+
eventSink: (LibraryUiEvent) -> Unit,
1212
) {
1313
val context = LocalContext.current
1414

1515
LaunchedEffect(state.sideEffect) {
1616
when (state.sideEffect) {
17-
is LibraryScreen.SideEffect.ShowToast -> {
17+
is LibrarySideEffect.ShowToast -> {
1818
Toast.makeText(context, state.sideEffect.message, Toast.LENGTH_SHORT).show()
1919
}
2020

2121
null -> {}
2222
}
2323

2424
if (state.sideEffect != null) {
25-
eventSink(LibraryScreen.Event.InitSideEffect)
25+
eventSink(LibraryUiEvent.InitSideEffect)
2626
}
2727
}
2828
}

feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import androidx.compose.runtime.setValue
88
import com.ninecraft.booket.core.common.utils.handleException
99
import com.ninecraft.booket.core.data.api.repository.AuthRepository
1010
import com.ninecraft.booket.core.data.api.repository.UserRepository
11-
import com.ninecraft.booket.feature.login.LoginScreen
11+
import com.ninecraft.booket.screens.LibraryScreen
12+
import com.ninecraft.booket.screens.LoginScreen
1213
import com.orhanobut.logger.Logger
1314
import com.skydoves.compose.effects.RememberedEffect
1415
import com.slack.circuit.codegen.annotations.CircuitInject
@@ -25,13 +26,13 @@ class LibraryPresenter @AssistedInject constructor(
2526
@Assisted private val navigator: Navigator,
2627
private val authRepository: AuthRepository,
2728
private val userRepository: UserRepository,
28-
) : Presenter<LibraryScreen.State> {
29+
) : Presenter<LibraryUiState> {
2930

3031
@Composable
31-
override fun present(): LibraryScreen.State {
32+
override fun present(): LibraryUiState {
3233
val scope = rememberCoroutineScope()
3334
var isLoading by rememberRetained { mutableStateOf(false) }
34-
var sideEffect by rememberRetained { mutableStateOf<LibraryScreen.SideEffect?>(null) }
35+
var sideEffect by rememberRetained { mutableStateOf<LibrarySideEffect?>(null) }
3536
var nickname by rememberRetained { mutableStateOf("") }
3637
var email by rememberRetained { mutableStateOf("") }
3738

@@ -47,7 +48,7 @@ class LibraryPresenter @AssistedInject constructor(
4748
.onFailure { exception ->
4849
val handleErrorMessage = { message: String ->
4950
Logger.e(message)
50-
sideEffect = LibraryScreen.SideEffect.ShowToast(message)
51+
sideEffect = LibrarySideEffect.ShowToast(message)
5152
}
5253

5354
handleException(
@@ -69,13 +70,13 @@ class LibraryPresenter @AssistedInject constructor(
6970
getUserProfile()
7071
}
7172

72-
fun handleEvent(event: LibraryScreen.Event) {
73+
fun handleEvent(event: LibraryUiEvent) {
7374
when (event) {
74-
is LibraryScreen.Event.InitSideEffect -> {
75+
is LibraryUiEvent.InitSideEffect -> {
7576
sideEffect = null
7677
}
7778

78-
is LibraryScreen.Event.OnLogoutButtonClick -> {
79+
is LibraryUiEvent.OnLogoutButtonClick -> {
7980
scope.launch {
8081
try {
8182
isLoading = true
@@ -87,7 +88,7 @@ class LibraryPresenter @AssistedInject constructor(
8788
.onFailure { exception ->
8889
val handleErrorMessage = { message: String ->
8990
Logger.e(message)
90-
sideEffect = LibraryScreen.SideEffect.ShowToast(message)
91+
sideEffect = LibrarySideEffect.ShowToast(message)
9192
}
9293

9394
handleException(
@@ -107,7 +108,7 @@ class LibraryPresenter @AssistedInject constructor(
107108
}
108109
}
109110

110-
return LibraryScreen.State(
111+
return LibraryUiState(
111112
isLoading = isLoading,
112113
nickname = nickname,
113114
email = email,

feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryScreen.kt

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,37 +20,14 @@ import com.ninecraft.booket.core.designsystem.component.button.ReedButton
2020
import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle
2121
import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle
2222
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
23+
import com.ninecraft.booket.screens.LibraryScreen
2324
import com.slack.circuit.codegen.annotations.CircuitInject
24-
import com.slack.circuit.runtime.CircuitUiEvent
25-
import com.slack.circuit.runtime.CircuitUiState
26-
import com.slack.circuit.runtime.screen.Screen
2725
import dagger.hilt.android.components.ActivityRetainedComponent
28-
import kotlinx.parcelize.Parcelize
29-
30-
@Parcelize
31-
data object LibraryScreen : Screen {
32-
data class State(
33-
val isLoading: Boolean = false,
34-
val nickname: String = "",
35-
val email: String = "",
36-
val sideEffect: SideEffect? = null,
37-
val eventSink: (Event) -> Unit,
38-
) : CircuitUiState
39-
40-
sealed interface SideEffect {
41-
data class ShowToast(val message: String) : SideEffect
42-
}
43-
44-
sealed interface Event : CircuitUiEvent {
45-
data object InitSideEffect : Event
46-
data object OnLogoutButtonClick : Event
47-
}
48-
}
4926

5027
@CircuitInject(LibraryScreen::class, ActivityRetainedComponent::class)
5128
@Composable
5229
internal fun Library(
53-
state: LibraryScreen.State,
30+
state: LibraryUiState,
5431
modifier: Modifier = Modifier,
5532
) {
5633
HandleLibrarySideEffects(
@@ -72,7 +49,7 @@ internal fun Library(
7249

7350
@Composable
7451
internal fun LibraryContent(
75-
state: LibraryScreen.State,
52+
state: LibraryUiState,
7653
modifier: Modifier = Modifier,
7754
) {
7855
Column(
@@ -94,7 +71,7 @@ internal fun LibraryContent(
9471
}
9572
ReedButton(
9673
onClick = {
97-
state.eventSink(LibraryScreen.Event.OnLogoutButtonClick)
74+
state.eventSink(LibraryUiEvent.OnLogoutButtonClick)
9875
},
9976
modifier = Modifier
10077
.fillMaxWidth()
@@ -118,7 +95,7 @@ internal fun LibraryContent(
11895
private fun LibraryPreview() {
11996
ReedTheme {
12097
Library(
121-
state = LibraryScreen.State(
98+
state = LibraryUiState(
12299
nickname = "홍길동",
123100
email = "[email protected]",
124101
eventSink = {},
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.ninecraft.booket.feature.library
2+
3+
import com.slack.circuit.runtime.CircuitUiEvent
4+
import com.slack.circuit.runtime.CircuitUiState
5+
6+
data class LibraryUiState(
7+
val isLoading: Boolean = false,
8+
val nickname: String = "",
9+
val email: String = "",
10+
val sideEffect: LibrarySideEffect? = null,
11+
val eventSink: (LibraryUiEvent) -> Unit,
12+
) : CircuitUiState
13+
14+
sealed interface LibrarySideEffect {
15+
data class ShowToast(val message: String) : LibrarySideEffect
16+
}
17+
18+
sealed interface LibraryUiEvent : CircuitUiEvent {
19+
data object InitSideEffect : LibraryUiEvent
20+
data object OnLogoutButtonClick : LibraryUiEvent
21+
}

0 commit comments

Comments
 (0)