Skip to content

Commit 6fb7d30

Browse files
bngshyonghanJu
andcommitted
✨ FinishRunningUseCase 구현
Co-authored-by: yonghanJu <[email protected]>
1 parent 5f2e7b1 commit 6fb7d30

File tree

9 files changed

+79
-9
lines changed

9 files changed

+79
-9
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.whyranoid.data.user.UserDataSource
55
import com.whyranoid.domain.model.GroupInfo
66
import com.whyranoid.domain.model.GroupNotification
77
import com.whyranoid.domain.model.Rule
8+
import com.whyranoid.domain.model.RunningHistory
89
import com.whyranoid.domain.repository.GroupRepository
910
import kotlinx.coroutines.flow.Flow
1011
import javax.inject.Inject
@@ -50,6 +51,14 @@ class GroupRepositoryImpl @Inject constructor(
5051
groupNotificationDataSource.notifyRunningStart(uid, groupIdList)
5152
}
5253

54+
override suspend fun notifyRunningFinish(
55+
uid: String,
56+
runningHistory: RunningHistory,
57+
groupIdList: List<String>
58+
) {
59+
groupNotificationDataSource.notifyRunningFinish(uid, runningHistory, groupIdList)
60+
}
61+
5362
override suspend fun createGroup(
5463
groupName: String,
5564
introduce: String,

data/src/main/java/com/whyranoid/data/groupnotification/GroupNotificationDataSource.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,28 @@ class GroupNotificationDataSource @Inject constructor(
7373
}
7474
}
7575

76+
suspend fun notifyRunningFinish(
77+
uid: String,
78+
runningHistory: RunningHistory,
79+
groupIdList: List<String>
80+
) {
81+
withContext(Dispatchers.IO) {
82+
groupIdList.forEach { groupId ->
83+
db.collection(GROUP_NOTIFICATIONS_COLLECTION)
84+
.document(groupId)
85+
.collection(FINISH_NOTIFICATION)
86+
.document(UUID.randomUUID().toString())
87+
.set(
88+
FinishNotificationResponse(
89+
type = "finish",
90+
uid = uid,
91+
historyId = runningHistory.historyId
92+
)
93+
)
94+
}
95+
}
96+
}
97+
7698
private fun getGroupFinishNotifications(groupId: String): Flow<List<GroupNotification>> =
7799
callbackFlow {
78100
db.collection(GROUP_NOTIFICATIONS_COLLECTION)

data/src/main/java/com/whyranoid/data/running/RunnerDataSourceImpl.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.whyranoid.data.running
22

33
import com.google.firebase.firestore.FieldValue
44
import com.google.firebase.firestore.FirebaseFirestore
5+
import com.whyranoid.data.constant.CollectionId
56
import kotlinx.coroutines.channels.awaitClose
67
import kotlinx.coroutines.flow.Flow
78
import kotlinx.coroutines.flow.callbackFlow
@@ -11,7 +12,7 @@ import kotlin.coroutines.suspendCoroutine
1112
class RunnerDataSourceImpl(private val db: FirebaseFirestore) : RunnerDataSource {
1213

1314
override fun getCurrentRunnerCount(): Flow<Int> = callbackFlow {
14-
db.collection("Runners")
15+
db.collection(CollectionId.RUNNERS_COLLECTION)
1516
.document("runnersId")
1617
.addSnapshotListener { snapshot, _ ->
1718
snapshot?.let {
@@ -26,7 +27,7 @@ class RunnerDataSourceImpl(private val db: FirebaseFirestore) : RunnerDataSource
2627
override suspend fun startRunning(uid: String): Boolean {
2728
if (uid.isBlank()) return false
2829
return suspendCoroutine { continuation ->
29-
db.collection("Runners")
30+
db.collection(CollectionId.RUNNERS_COLLECTION)
3031
.document("runnersId")
3132
.update(uid, uid)
3233
.addOnSuccessListener {
@@ -39,9 +40,9 @@ class RunnerDataSourceImpl(private val db: FirebaseFirestore) : RunnerDataSource
3940
}
4041

4142
override suspend fun finishRunning(uid: String): Boolean {
42-
// TODO 구현
43+
if (uid.isBlank()) return false
4344
return suspendCoroutine { continuation ->
44-
db.collection("Runners")
45+
db.collection(CollectionId.RUNNERS_COLLECTION)
4546
.document("runnersId")
4647
.update(uid, FieldValue.delete())
4748
.addOnSuccessListener {

data/src/main/java/com/whyranoid/data/running/RunnerRepositoryImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ class RunnerRepositoryImpl(private val runnerDataSource: RunnerDataSource) : Run
1313
}
1414

1515
override suspend fun finishRunning(uid: String): Boolean {
16-
return true
16+
return runnerDataSource.finishRunning(uid)
1717
}
1818
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.whyranoid.domain.repository
33
import com.whyranoid.domain.model.GroupInfo
44
import com.whyranoid.domain.model.GroupNotification
55
import com.whyranoid.domain.model.Rule
6+
import com.whyranoid.domain.model.RunningHistory
67
import kotlinx.coroutines.flow.Flow
78

89
interface GroupRepository {
@@ -33,6 +34,12 @@ interface GroupRepository {
3334

3435
suspend fun notifyRunningStart(uid: String, groupIdList: List<String>)
3536

37+
suspend fun notifyRunningFinish(
38+
uid: String,
39+
runningHistory: RunningHistory,
40+
groupIdList: List<String>
41+
)
42+
3643
// 그룹 생성하기
3744
suspend fun createGroup(
3845
groupName: String,
Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
11
package com.whyranoid.domain.usecase
22

3+
import com.whyranoid.domain.model.RunningHistory
34
import com.whyranoid.domain.repository.AccountRepository
5+
import com.whyranoid.domain.repository.GroupRepository
46
import com.whyranoid.domain.repository.RunnerRepository
57
import javax.inject.Inject
68

79
class FinishRunningUseCase @Inject constructor(
810
private val runnerRepository: RunnerRepository,
9-
private val accountRepository: AccountRepository
11+
private val accountRepository: AccountRepository,
12+
private val groupRepository: GroupRepository
1013
) {
11-
suspend operator fun invoke(): Boolean {
12-
runnerRepository.finishRunning(accountRepository.getUid())
14+
suspend operator fun invoke(runningHistory: RunningHistory? = null): Boolean {
15+
val uid = accountRepository.getUid()
16+
17+
runnerRepository.finishRunning(uid)
18+
19+
if (runningHistory != null) {
20+
groupRepository.getMyGroupList(uid).onSuccess { groupInfos ->
21+
groupRepository.notifyRunningFinish(
22+
uid = uid,
23+
runningHistory = runningHistory,
24+
groupIdList = groupInfos.map { it.groupId }
25+
)
26+
}
27+
}
1328
return true
1429
}
1530
}

presentation/src/main/java/com/whyranoid/presentation/model/RunningHistoryUiModel.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,14 @@ fun RunningHistory.toRunningHistoryUiModel(): RunningHistoryUiModel {
2424
pace = pace
2525
)
2626
}
27+
28+
fun RunningHistoryUiModel.toRunningHistory(): RunningHistory {
29+
return RunningHistory(
30+
historyId = historyId,
31+
startedAt = startedAt,
32+
finishedAt = finishedAt,
33+
totalRunningTime = totalRunningTime,
34+
pace = pace,
35+
totalDistance = totalDistance
36+
)
37+
}

presentation/src/main/java/com/whyranoid/presentation/running/RunningViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import androidx.work.NetworkType
1010
import androidx.work.OneTimeWorkRequestBuilder
1111
import androidx.work.WorkInfo
1212
import androidx.work.WorkManager
13+
import com.whyranoid.domain.usecase.FinishRunningUseCase
1314
import com.whyranoid.domain.usecase.StartRunningUseCase
15+
import com.whyranoid.presentation.model.toRunningHistory
1416
import dagger.hilt.android.lifecycle.HiltViewModel
1517
import dagger.hilt.android.qualifiers.ApplicationContext
1618
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -24,6 +26,7 @@ import javax.inject.Inject
2426
class RunningViewModel @Inject constructor(
2527
@ApplicationContext context: Context,
2628
startRunningUseCase: StartRunningUseCase,
29+
private val finishRunningUseCase: FinishRunningUseCase,
2730
private val runningDataManager: RunningDataManager
2831
) : ViewModel() {
2932

@@ -108,6 +111,9 @@ class RunningViewModel @Inject constructor(
108111

109112
fun onFinishButtonClicked() {
110113
runningDataManager.finishRunning().onSuccess { runningFinishData ->
114+
viewModelScope.launch {
115+
finishRunningUseCase(runningFinishData.runningHistory.toRunningHistory())
116+
}
111117
emitEvent(Event.FinishButtonClick(runningFinishData))
112118
}.onFailure {
113119
emitEvent(Event.RunningFinishFailure)

presentation/src/main/res/layout/item_running_history.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,5 @@
141141
android:layout_marginTop="24dp"
142142
android:layout_marginEnd="50dp" />
143143

144-
145144
</androidx.constraintlayout.widget.ConstraintLayout>
146145
</layout>

0 commit comments

Comments
 (0)