Skip to content

Commit 4bcdb41

Browse files
authored
๐Ÿ”€ #73 from boostcampwm-2022/feat/callback_refactoring
โ™ป๏ธ GroupDataSourceImpl ํ•จ์ˆ˜ ์ฝœ๋ฐฑ ๊นŠ์ด ์ œ๊ฑฐ ๋ฆฌํŽ™ํ† ๋ง
2 parents 19839da + 903ea5b commit 4bcdb41

File tree

1 file changed

+35
-24
lines changed

1 file changed

+35
-24
lines changed

โ€Ždata/src/main/java/com/whyranoid/data/group/GroupDataSourceImpl.kt

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,16 @@ import com.whyranoid.data.model.UserResponse
1414
import com.whyranoid.data.model.toGroupInfo
1515
import com.whyranoid.data.model.toUser
1616
import com.whyranoid.domain.model.GroupInfo
17+
import com.whyranoid.domain.model.MoGakRunException
1718
import com.whyranoid.domain.model.Rule
1819
import com.whyranoid.domain.model.toRule
1920
import kotlinx.coroutines.channels.awaitClose
2021
import kotlinx.coroutines.flow.Flow
2122
import kotlinx.coroutines.flow.callbackFlow
23+
import kotlinx.coroutines.flow.combine
2224
import kotlinx.coroutines.suspendCancellableCoroutine
2325
import kotlinx.coroutines.tasks.await
24-
import java.util.UUID
26+
import java.util.*
2527
import javax.inject.Inject
2628
import kotlin.coroutines.resume
2729

@@ -165,32 +167,41 @@ class GroupDataSourceImpl @Inject constructor(
165167
}
166168
}
167169

168-
override fun getGroupInfoFlow(uid: String, groupId: String): Flow<GroupInfo> = callbackFlow {
169-
db.collection(GROUPS_COLLECTION)
170-
.document(groupId)
171-
.addSnapshotListener { documentSnapshot, _ ->
172-
val groupInfoResponse = documentSnapshot?.toObject(GroupInfoResponse::class.java)
170+
override fun getGroupInfoFlow(uid: String, groupId: String): Flow<GroupInfo> {
171+
return getUserResponse(uid).combine(getGroupInfoResponse(groupId)) { userResponse, groupInfoResponse ->
172+
groupInfoResponse.toGroupInfo(
173+
leader = userResponse.toUser(),
174+
rules = groupInfoResponse.rules.map { it.toRule() }
175+
)
176+
}
177+
}
173178

174-
groupInfoResponse?.let {
175-
db.collection(USERS_COLLECTION)
176-
.document(uid)
177-
.addSnapshotListener { documentSnapshot, _ ->
178-
val userResponse = documentSnapshot?.toObject(UserResponse::class.java)
179+
private fun getGroupInfoResponse(groupId: String): Flow<GroupInfoResponse> {
180+
return callbackFlow {
181+
db.collection(GROUPS_COLLECTION)
182+
.document(groupId)
183+
.addSnapshotListener { documentSnapshot, _ ->
184+
trySend(
185+
documentSnapshot?.toObject(GroupInfoResponse::class.java)
186+
?: throw MoGakRunException.FileNotFoundedException
187+
)
188+
}
189+
awaitClose()
190+
}
191+
}
179192

180-
userResponse?.let {
181-
trySend(
182-
groupInfoResponse.toGroupInfo(
183-
leader = userResponse.toUser(),
184-
rules = groupInfoResponse.rules.map {
185-
it.toRule()
186-
}
187-
)
188-
)
189-
}
190-
}
193+
private fun getUserResponse(uid: String): Flow<UserResponse> {
194+
return callbackFlow {
195+
db.collection(USERS_COLLECTION)
196+
.document(uid)
197+
.addSnapshotListener { documentSnapshot, _ ->
198+
trySend(
199+
documentSnapshot?.toObject(UserResponse::class.java)
200+
?: throw MoGakRunException.FileNotFoundedException
201+
)
191202
}
192-
}
193-
awaitClose()
203+
awaitClose()
204+
}
194205
}
195206

196207
override suspend fun isDuplicatedGroupName(groupName: String): Boolean {

0 commit comments

Comments
ย (0)