Skip to content

Commit

Permalink
✨ 챌린지 그만두기 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
soopeach committed Jul 17, 2024
1 parent fded159 commit 23b60a7
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 4 deletions.
4 changes: 3 additions & 1 deletion app/src/main/java/com/whyranoid/walkie/KoinModules.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import com.whyranoid.domain.repository.PostRepository
import com.whyranoid.domain.repository.RunningHistoryRepository
import com.whyranoid.domain.repository.RunningRepository
import com.whyranoid.domain.repository.UserRepository
import com.whyranoid.domain.usecase.ChangeChallengeStatusUseCase
import com.whyranoid.domain.usecase.GetChallengeDetailUseCase
import com.whyranoid.domain.usecase.GetChallengePreviewsByTypeUseCase
import com.whyranoid.domain.usecase.GetChallengingPreviewsUseCase
Expand Down Expand Up @@ -114,7 +115,7 @@ val viewModelModule =
module {
single { ChallengeMainViewModel(get(), get(), get(), get(), get()) }
single { ChallengeDetailViewModel(get(), get()) }
single { ChallengeExitViewModel(get()) }
single { ChallengeExitViewModel(get(), get()) }
factory { UserPageViewModel(get(), get(), get(), get(), get(), get(), get(), get(), get()) }
factory { RunningViewModel(get(), get(), get(), get(), get(), get()) }
factory { RunningEditViewModel() }
Expand Down Expand Up @@ -193,6 +194,7 @@ val useCaseModule =
single { GetMyFollowingUseCase(get(), get()) }
single { SendCommentUseCase(get(), get()) }
single { GetUserUseCase(get()) }
single { ChangeChallengeStatusUseCase(get(), get())}
}

val databaseModule =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,20 @@ import com.whyranoid.presentation.component.button.WalkieNegativeButton
import com.whyranoid.presentation.component.button.WalkiePositiveButton
import com.whyranoid.presentation.reusable.WalkieCircularProgressIndicator
import com.whyranoid.presentation.theme.WalkieTypography
import com.whyranoid.presentation.viewmodel.challenge.ChallengeExitSideEffect
import com.whyranoid.presentation.viewmodel.challenge.ChallengeExitState
import com.whyranoid.presentation.viewmodel.challenge.ChallengeExitViewModel
import org.koin.androidx.compose.koinViewModel
import org.orbitmvi.orbit.compose.collectAsState
import org.orbitmvi.orbit.compose.collectSideEffect

@Composable
fun ChallengeExitScreen(
navController: NavController,
challengeId: Long,
) {

val context = LocalContext.current
val viewModel = koinViewModel<ChallengeExitViewModel>()

LaunchedEffect(true) {
Expand All @@ -48,10 +51,23 @@ fun ChallengeExitScreen(

val state by viewModel.collectAsState()

viewModel.collectSideEffect {
when (it) {
ChallengeExitSideEffect.StopChallengeSuccess -> {
Toast.makeText(context, "챌린지를 성공적으로 중단하였습니다.", Toast.LENGTH_SHORT).show()
navController.popBackStack()
}

ChallengeExitSideEffect.StopChallengeFailure -> {
Toast.makeText(context, "챌린지 중단에 실패하였습니다.", Toast.LENGTH_SHORT).show()
}
}
}

ChallengeExitContent(
state,
onPositiveButtonClicked = {
// TODO
viewModel.stopChallenge()
},
onNegativeButtonClicked = {
navController.popBackStack()
Expand Down Expand Up @@ -135,7 +151,6 @@ fun ChallengeExitContent(
) {
WalkiePositiveButton(text = "확인") {
onPositiveButtonClicked()
Toast.makeText(context, "확인", Toast.LENGTH_SHORT).show()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@ package com.whyranoid.presentation.viewmodel.challenge

import androidx.lifecycle.ViewModel
import com.whyranoid.domain.model.challenge.Challenge
import com.whyranoid.domain.usecase.ChangeChallengeStatusUseCase
import com.whyranoid.domain.usecase.GetChallengeDetailUseCase
import com.whyranoid.presentation.model.UiState
import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.syntax.simple.intent
import org.orbitmvi.orbit.syntax.simple.postSideEffect
import org.orbitmvi.orbit.syntax.simple.reduce
import org.orbitmvi.orbit.viewmodel.container

sealed class ChallengeExitSideEffect {

object StopChallengeSuccess : ChallengeExitSideEffect()
object StopChallengeFailure : ChallengeExitSideEffect()
}

data class ChallengeExitState(
Expand All @@ -19,6 +22,7 @@ data class ChallengeExitState(

class ChallengeExitViewModel(
private val getChallengeDetailUseCase: GetChallengeDetailUseCase,
private val changeChallengeStatusUseCase: ChangeChallengeStatusUseCase
) : ViewModel(),
ContainerHost<ChallengeExitState, ChallengeExitSideEffect> {

Expand All @@ -35,4 +39,15 @@ class ChallengeExitViewModel(
}
}

fun stopChallenge() = intent {
changeChallengeStatusUseCase(
state.challenge.getDataOrNull()?.id?.toInt() ?: 0,
"N",
).onSuccess {
postSideEffect(ChallengeExitSideEffect.StopChallengeSuccess)
}.onFailure {
postSideEffect(ChallengeExitSideEffect.StopChallengeFailure)
}
}

}

0 comments on commit 23b60a7

Please sign in to comment.