Skip to content

Commit 8ff49ac

Browse files
committed
✨ 홍보하기 버튼을 누르면 홍보 글이 작성되는 기능 추가
1 parent 69e0fb6 commit 8ff49ac

File tree

8 files changed

+61
-10
lines changed

8 files changed

+61
-10
lines changed

data/src/main/java/com/whyranoid/data/Post/PostDataSource.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ class PostDataSource @Inject constructor(
2020

2121
suspend fun createRecruitPost(
2222
authorUid: String,
23-
updatedAt: Long,
2423
groupUid: String
2524
): Boolean {
2625
val postId = UUID.randomUUID().toString()
@@ -48,7 +47,7 @@ class PostDataSource @Inject constructor(
4847
RecruitPost(
4948
postId = postId,
5049
author = author,
51-
updatedAt = updatedAt,
50+
updatedAt = System.currentTimeMillis(),
5251
groupInfo = groupInfo.toGroupInfo(
5352
leader = author,
5453
rules = groupInfo.rules.map { it.toRule() }

data/src/main/java/com/whyranoid/data/Post/PostRepositoryImpl.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ class PostRepositoryImpl @Inject constructor(
2727

2828
override suspend fun createRecruitPost(
2929
authorUid: String,
30-
updatedAt: Long,
3130
groupUid: String
3231
): Boolean {
33-
return postDataSource.createRecruitPost(authorUid, updatedAt, groupUid)
32+
return postDataSource.createRecruitPost(authorUid, groupUid)
3433
}
3534

3635
override suspend fun deletePost(postId: String): Boolean {

domain/src/main/java/com/whyranoid/domain/repository/PostRepository.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ interface PostRepository {
2121

2222
suspend fun createRecruitPost(
2323
authorUid: String,
24-
updatedAt: Long,
2524
groupUid: String
2625
): Boolean
2726

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.whyranoid.domain.usecase
2+
3+
import com.whyranoid.domain.repository.AccountRepository
4+
import com.whyranoid.domain.repository.PostRepository
5+
import javax.inject.Inject
6+
7+
class CreateRecruitPostUseCase @Inject constructor(
8+
private val postRepository: PostRepository,
9+
private val accountRepository: AccountRepository
10+
) {
11+
// TODO : accountRepository에서 User를 가져오도록 수정
12+
suspend operator fun invoke(
13+
authorUid: String,
14+
groupUid: String
15+
): Boolean {
16+
return postRepository.createRecruitPost(authorUid, groupUid)
17+
}
18+
}

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
@@ -3,4 +3,5 @@ package com.whyranoid.presentation.community.group.detail
33
sealed class Event {
44
object RecruitButtonClick : Event()
55
object ExitGroupButtonClick : Event()
6+
data class RecruitSnackBarButtonClick(val isSuccess: Boolean = true) : Event()
67
}

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,11 @@ internal class GroupDetailFragment :
7676
Event.RecruitButtonClick -> {
7777
Snackbar.make(
7878
binding.root,
79-
getString(R.string.text_recruit),
79+
getString(R.string.text_check_recruit),
8080
Snackbar.LENGTH_SHORT
81-
).show()
81+
).setAction(R.string.text_recruit) {
82+
viewModel.onRecruitSnackBarButtonClick()
83+
}.show()
8284
}
8385
// TODO : 그룹 나가기
8486
Event.ExitGroupButtonClick -> {
@@ -88,6 +90,21 @@ internal class GroupDetailFragment :
8890
Snackbar.LENGTH_SHORT
8991
).show()
9092
}
93+
is Event.RecruitSnackBarButtonClick -> {
94+
if (event.isSuccess) {
95+
Snackbar.make(
96+
binding.root,
97+
getString(R.string.text_recruit_success),
98+
Snackbar.LENGTH_SHORT
99+
).show()
100+
} else {
101+
Snackbar.make(
102+
binding.root,
103+
getString(R.string.text_recruit_fail),
104+
Snackbar.LENGTH_SHORT
105+
).show()
106+
}
107+
}
91108
}
92109
}
93110
}

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.lifecycle.viewModelScope
66
import com.whyranoid.domain.model.FinishNotification
77
import com.whyranoid.domain.model.GroupNotification
88
import com.whyranoid.domain.model.StartNotification
9+
import com.whyranoid.domain.usecase.CreateRecruitPostUseCase
910
import com.whyranoid.domain.usecase.GetGroupInfoUseCase
1011
import com.whyranoid.domain.usecase.GetGroupNotificationsUseCase
1112
import com.whyranoid.presentation.model.GroupInfoUiModel
@@ -26,19 +27,20 @@ import javax.inject.Inject
2627
class GroupDetailViewModel @Inject constructor(
2728
getGroupInfoUseCase: GetGroupInfoUseCase,
2829
getGroupNotificationsUseCase: GetGroupNotificationsUseCase,
30+
private val createRecruitPostUseCase: CreateRecruitPostUseCase,
2931
stateHandle: SavedStateHandle
3032
) : ViewModel() {
3133

3234
private val groupId = requireNotNull(stateHandle.get<GroupInfoUiModel>("groupInfo")).groupId
35+
private val userId = requireNotNull(stateHandle.get<GroupInfoUiModel>("groupInfo")).leader.name
3336

3437
private var _groupInfo =
3538
MutableStateFlow(requireNotNull(stateHandle.get<GroupInfoUiModel>("groupInfo")))
3639
val groupInfo: StateFlow<GroupInfoUiModel>
3740
get() = _groupInfo.asStateFlow()
3841

3942
// TODO : 데이터 스토어에 저장된 Uid와 비교해야함.
40-
val isLeader =
41-
requireNotNull(stateHandle.get<GroupInfoUiModel>("groupInfo")).leader.name == "soopeach"
43+
val isLeader = userId == "soopeach"
4244

4345
private val _eventFlow = MutableSharedFlow<Event>()
4446
val eventFlow: SharedFlow<Event>
@@ -84,10 +86,23 @@ class GroupDetailViewModel @Inject constructor(
8486
emitEvent(Event.ExitGroupButtonClick)
8587
}
8688

89+
// TODO : uid는 알아서 가져오도록 변경
90+
fun onRecruitSnackBarButtonClick() {
91+
viewModelScope.launch {
92+
val isCreateRecruitPostSuccess = createRecruitPostUseCase("hsjeon", groupId)
93+
if (isCreateRecruitPostSuccess) {
94+
emitEvent(Event.RecruitSnackBarButtonClick())
95+
} else {
96+
emitEvent(Event.RecruitSnackBarButtonClick(false))
97+
}
98+
}
99+
}
100+
87101
private fun emitEvent(event: Event) {
88102
when (event) {
89103
Event.RecruitButtonClick,
90-
Event.ExitGroupButtonClick -> {
104+
Event.ExitGroupButtonClick,
105+
is Event.RecruitSnackBarButtonClick -> {
91106
viewModelScope.launch {
92107
_eventFlow.emit(event)
93108
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@
7070
<string name="text_edit_group">그룹 수정하기</string>
7171
<string name="text_delete_group">그룹 삭제하기</string>
7272
<string name="text_cancel">취소</string>
73+
<string name="text_check_recruit">정말 홍보하시겠어요?</string>
74+
<string name="text_recruit_success">홍보 글이 작성되었습니다!</string>
75+
<string name="text_recruit_fail">홍보 글 작성이 실패하였습니다!</string>
7376

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

0 commit comments

Comments
 (0)