Skip to content

Commit 24cf4e2

Browse files
committed
✨ 그룹 나가기 기능 구현
1 parent b92d197 commit 24cf4e2

File tree

9 files changed

+62
-13
lines changed

9 files changed

+62
-13
lines changed

data/src/main/java/com/whyranoid/data/group/GroupRepositoryImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class GroupRepositoryImpl @Inject constructor(
3636
}
3737

3838
override suspend fun exitGroup(uid: String, groupId: String): Boolean {
39-
return groupDataSource.joinGroup(uid, groupId)
39+
return groupDataSource.exitGroup(uid, groupId)
4040
}
4141

4242
override fun getGroupInfoFlow(uid: String, groupId: String): Flow<GroupInfo> {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.whyranoid.domain.usecase
2+
3+
import com.whyranoid.domain.repository.AccountRepository
4+
import com.whyranoid.domain.repository.GroupRepository
5+
import javax.inject.Inject
6+
7+
class ExitGroupUseCase @Inject constructor(
8+
private val accountRepository: AccountRepository,
9+
private val groupRepository: GroupRepository
10+
) {
11+
suspend operator fun invoke(groupId: String): Boolean {
12+
return groupRepository.exitGroup(accountRepository.getUid(), groupId)
13+
}
14+
}

presentation/src/main/java/com/whyranoid/presentation/community/CommunityItemFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ internal class CommunityItemFragment :
6868
findNavController().navigate(action)
6969
}
7070
}
71-
is Event.GroupJoin -> {
71+
is Event.JoinGroup -> {
7272
if (event.isSuccess) {
7373
Snackbar.make(
7474
binding.root,

presentation/src/main/java/com/whyranoid/presentation/community/CommunityViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class CommunityViewModel @Inject constructor(
5555
is Event.GroupItemClick -> {
5656
_eventFlow.emit(event)
5757
}
58-
is Event.GroupJoin -> {
58+
is Event.JoinGroup -> {
5959
if (event.isSuccess) {
6060
_eventFlow.emit(event)
6161
} else {
@@ -68,7 +68,7 @@ class CommunityViewModel @Inject constructor(
6868

6969
fun onGroupJoinButtonClicked(groupId: String) {
7070
viewModelScope.launch {
71-
emitEvent(Event.GroupJoin(joinGroupUseCase(groupId)))
71+
emitEvent(Event.JoinGroup(joinGroupUseCase(groupId)))
7272
}
7373
}
7474

presentation/src/main/java/com/whyranoid/presentation/community/Event.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ import com.whyranoid.presentation.model.GroupInfoUiModel
44

55
sealed class Event {
66
data class GroupItemClick(val groupInfo: GroupInfoUiModel) : Event()
7-
data class GroupJoin(val isSuccess: Boolean = true) : Event()
7+
data class JoinGroup(val isSuccess: Boolean = true) : Event()
88
}

presentation/src/main/java/com/whyranoid/presentation/community/group/detail/Event.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ sealed class Event {
44
object RecruitButtonClick : Event()
55
object ExitGroupButtonClick : Event()
66
data class RecruitSnackBarButtonClick(val isSuccess: Boolean = true) : Event()
7+
data class ExitGroupSnackBarButtonClick(val isSuccess: Boolean = true) : Event()
78
}

presentation/src/main/java/com/whyranoid/presentation/community/group/detail/GroupDetailFragment.kt

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ internal class GroupDetailFragment :
8282
viewLifecycleOwner.repeatWhenUiStarted {
8383
viewModel.eventFlow.collect { event ->
8484
when (event) {
85-
// TODO : 홍보 글 쓰러가기
8685
Event.RecruitButtonClick -> {
8786
Snackbar.make(
8887
binding.root,
@@ -92,25 +91,42 @@ internal class GroupDetailFragment :
9291
viewModel.onRecruitSnackBarButtonClick()
9392
}.show()
9493
}
95-
// TODO : 그룹 나가기
94+
is Event.RecruitSnackBarButtonClick -> {
95+
if (event.isSuccess) {
96+
Snackbar.make(
97+
binding.root,
98+
getString(R.string.text_recruit_success),
99+
Snackbar.LENGTH_SHORT
100+
).show()
101+
} else {
102+
Snackbar.make(
103+
binding.root,
104+
getString(R.string.text_recruit_fail),
105+
Snackbar.LENGTH_SHORT
106+
).show()
107+
}
108+
}
96109
Event.ExitGroupButtonClick -> {
97110
Snackbar.make(
98111
binding.root,
99-
getString(R.string.text_exit_group),
112+
getString(R.string.text_check_exit_group),
100113
Snackbar.LENGTH_SHORT
101-
).show()
114+
).setAction(getString(R.string.text_exit_group)) {
115+
viewModel.onExitGroupSnackBarButtonClick()
116+
}.show()
102117
}
103-
is Event.RecruitSnackBarButtonClick -> {
118+
is Event.ExitGroupSnackBarButtonClick -> {
104119
if (event.isSuccess) {
105120
Snackbar.make(
106121
binding.root,
107-
getString(R.string.text_recruit_success),
122+
getString(R.string.text_exit_group_success),
108123
Snackbar.LENGTH_SHORT
109124
).show()
125+
findNavController().popBackStack()
110126
} else {
111127
Snackbar.make(
112128
binding.root,
113-
getString(R.string.text_recruit_fail),
129+
getString(R.string.text_exit_group_fail),
114130
Snackbar.LENGTH_SHORT
115131
).show()
116132
}

presentation/src/main/java/com/whyranoid/presentation/community/group/detail/GroupDetailViewModel.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.whyranoid.domain.model.FinishNotification
77
import com.whyranoid.domain.model.GroupNotification
88
import com.whyranoid.domain.model.StartNotification
99
import com.whyranoid.domain.usecase.CreateRecruitPostUseCase
10+
import com.whyranoid.domain.usecase.ExitGroupUseCase
1011
import com.whyranoid.domain.usecase.GetGroupInfoUseCase
1112
import com.whyranoid.domain.usecase.GetGroupNotificationsUseCase
1213
import com.whyranoid.domain.usecase.GetUidUseCase
@@ -29,6 +30,7 @@ class GroupDetailViewModel @Inject constructor(
2930
getGroupInfoUseCase: GetGroupInfoUseCase,
3031
getGroupNotificationsUseCase: GetGroupNotificationsUseCase,
3132
private val createRecruitPostUseCase: CreateRecruitPostUseCase,
33+
private val exitGroupUseCase: ExitGroupUseCase,
3234
val getUidUseCase: GetUidUseCase,
3335
stateHandle: SavedStateHandle
3436
) : ViewModel() {
@@ -97,11 +99,24 @@ class GroupDetailViewModel @Inject constructor(
9799
}
98100
}
99101

102+
fun onExitGroupSnackBarButtonClick() {
103+
viewModelScope.launch {
104+
val isExitGroupSuccess = exitGroupUseCase(groupId)
105+
if (isExitGroupSuccess) {
106+
emitEvent(Event.ExitGroupSnackBarButtonClick())
107+
} else {
108+
emitEvent(Event.ExitGroupSnackBarButtonClick(false))
109+
}
110+
}
111+
}
112+
100113
private fun emitEvent(event: Event) {
101114
when (event) {
102115
Event.RecruitButtonClick,
103116
Event.ExitGroupButtonClick,
104-
is Event.RecruitSnackBarButtonClick -> {
117+
is Event.RecruitSnackBarButtonClick,
118+
is Event.ExitGroupSnackBarButtonClick
119+
-> {
105120
viewModelScope.launch {
106121
_eventFlow.emit(event)
107122
}

presentation/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@
8383
<string name="text_check_recruit">정말 홍보하시겠어요?</string>
8484
<string name="text_recruit_success">홍보 글이 작성되었습니다!</string>
8585
<string name="text_recruit_fail">홍보 글 작성이 실패하였습니다!</string>
86+
<string name="text_check_exit_group">정말 그룹을 나가시겠어요?</string>
87+
<string name="text_exit_group_success">그룹 나가기에 성공하였습니다!</string>
88+
<string name="text_exit_group_fail">그룹 나가기에 실패하였습니다!</string>
8689

8790
<!-- 그룹 수정하기 화면-->
8891
<string name="text_edit_group_success">그룹이 수정되었습니다!</string>

0 commit comments

Comments
 (0)