-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDatabaseCombine.kt
More file actions
28 lines (26 loc) · 1.36 KB
/
DatabaseCombine.kt
File metadata and controls
28 lines (26 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
fun permissionsUsers(groupId: String): Observable<PermissionsUsers?> {
return DatabaseRead.permissions(groupId)
.flatMap {
Observable.from(it).map {
combineLatest(DatabaseRead.user(it.getId()), Observable.just(it.level), ::UserLevel)
}.toList()
}
.flatMap {
Observable.combineLatest(it) {
var owner: User? = null
val editPermissions = mutableListOf<User>()
val readOnlyPermissions = mutableListOf<User>()
it.forEach {
it as UserLevel
when (it.level) {
Permission.LEVEL_OWNER -> owner = it.user
Permission.LEVEL_WRITE -> editPermissions.add(it.user)
Permission.LEVEL_READONLY -> readOnlyPermissions.add(it.user)
}
}
PermissionsUsers(owner!!, editPermissions, readOnlyPermissions) // Owner must exist in each group
}
}
}
data class UserLevel(val user: User, val level: Int)
data class PermissionsUsers(val owner: User, val editPermissions: List<User>, val readOnlyPermissions: List<User>)