Skip to content

Commit ff590ba

Browse files
committed
♻️ getGroupInfoFlow() 콜백 제거 리펙토링
1 parent c5b1d20 commit ff590ba

File tree

1 file changed

+36
-23
lines changed

1 file changed

+36
-23
lines changed

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

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ 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
@@ -126,32 +127,44 @@ class GroupDataSource @Inject constructor(
126127
}
127128
}
128129

129-
fun getGroupInfoFlow(uid: String, groupId: String): Flow<GroupInfo> = callbackFlow {
130-
db.collection(GROUPS_COLLECTION)
131-
.document(groupId)
132-
.addSnapshotListener { documentSnapshot, _ ->
133-
val groupInfoResponse = documentSnapshot?.toObject(GroupInfoResponse::class.java)
130+
fun getGroupInfoFlow(uid: String, groupId: String): Flow<GroupInfo> {
131+
return callbackFlow {
132+
val groupInfoResponse = getGroupInfoResponse(groupId)
133+
val userResponse = getUserInfoResponse(uid)
134+
val groupInfo = groupInfoResponse.toGroupInfo(
135+
leader = userResponse.toUser(),
136+
rules = groupInfoResponse.rules.map { it.toRule() }
137+
)
138+
trySend(groupInfo)
139+
awaitClose()
140+
}
141+
}
134142

135-
groupInfoResponse?.let {
136-
db.collection(USERS_COLLECTION)
137-
.document(uid)
138-
.addSnapshotListener { documentSnapshot, _ ->
139-
val userResponse = documentSnapshot?.toObject(UserResponse::class.java)
143+
private suspend fun getGroupInfoResponse(groupId: String): GroupInfoResponse {
144+
return suspendCancellableCoroutine { continuation ->
145+
db.collection(GROUPS_COLLECTION)
146+
.document(groupId)
147+
.addSnapshotListener { documentSnapshot, _ ->
148+
continuation.resume(
149+
documentSnapshot?.toObject(GroupInfoResponse::class.java)
150+
?: throw MoGakRunException.FileNotFoundedException
140151

141-
userResponse?.let {
142-
trySend(
143-
groupInfoResponse.toGroupInfo(
144-
leader = userResponse.toUser(),
145-
rules = groupInfoResponse.rules.map {
146-
it.toRule()
147-
}
148-
)
149-
)
150-
}
151-
}
152+
)
152153
}
153-
}
154-
awaitClose()
154+
}
155+
}
156+
157+
private suspend fun getUserInfoResponse(uid: String): UserResponse {
158+
return suspendCancellableCoroutine { continuation ->
159+
db.collection(USERS_COLLECTION)
160+
.document(uid)
161+
.addSnapshotListener { documentSnapshot, _ ->
162+
continuation.resume(
163+
documentSnapshot?.toObject(UserResponse::class.java)
164+
?: throw MoGakRunException.FileNotFoundedException
165+
)
166+
}
167+
}
155168
}
156169

157170
suspend fun isDuplicatedGroupName(groupName: String): Boolean {

0 commit comments

Comments
 (0)