From 2d88cb811393e278fe46022d45255b67a59db0a5 Mon Sep 17 00:00:00 2001 From: fodorpatrik2000 <fodorpatrik2000@sch.bme.hu> Date: Sun, 22 May 2022 15:13:26 +0200 Subject: [PATCH] fix functions, change types --- .../kszk/szobatarsch/firebase/FireStore.kt | 77 ++++++++----------- .../hu/bme/kszk/szobatarsch/firebase/Types.kt | 4 +- 2 files changed, 33 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/FireStore.kt b/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/FireStore.kt index 2f390bc..8d6d7ea 100644 --- a/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/FireStore.kt +++ b/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/FireStore.kt @@ -24,50 +24,47 @@ fun <T> getListOfData( queryTransform: (CollectionReference) -> Query = { it }, ): Flow<List<T>> = callbackFlow { val coll = queryTransform(db.collection(collection)) - val reg = coll.addSnapshotListener { conversations, error -> + val reg = coll.addSnapshotListener { datas, error -> if (error != null) { cancel("Firebase error", error) return@addSnapshotListener } launch { - val ret = map(conversations!!) + val ret = map(datas!!) trySend(ret) } } awaitClose { reg.remove() } } -val likeableUsers - get(): Flow<List<User>> = getListOfData( - collection = "users", - map = { datas -> - datas.map { data -> - User( - id = data.id, - name = data.get("name") as String, - description = data.get("description") as String, - preferences = data.get("preferences") as Preferences, - dismissedUsers = data.get("dismissedUsers") as List<String>, - likedUsers = data.get("likedUsers") as List<String>, - contacts = data.get("contacts") as String, - ) - } - }, - ) +//var likeableUsers get() = getLikeableUsers() + +fun getLikeableUsers( + userList: List<String>, + limit: Long +): Flow<List<User>> = getListOfData( + collection = "users", + map = { it.toObjects(User::class.java) }, + queryTransform = { + var q = it.limit(limit) + q = if (userList.isNotEmpty()) q.whereNotIn("id", userList) else q + q + } +) -suspend fun getNextLikeableUser(likedUserList: List<String>): User? = +suspend fun geLimitedLikeableUsers( + userList: List<String>, + limit: Long +): List<User> = suspendCoroutine { continuation -> - db - .collection("users") - .whereNotIn("id", likedUserList) - .limit(1) - .get() - .addOnSuccessListener { - continuation.resume( - if (it.size() > 0) it.toObjects(User::class.java)[0] else null - ) - } + var q = db.collection("users").limit(limit) + q = if (userList.isNotEmpty()) q.whereNotIn("id", userList) else q + q.get().addOnSuccessListener { + continuation.resume( + if (it.size() > 0) it.toObjects(User::class.java) else listOf() + ) + } .addOnFailureListener { continuation.resumeWithException(it) } @@ -86,6 +83,7 @@ val userData launch { val ret = data?.toObject(User::class.java) + ?.copy(id = data.id) if (ret != null) { trySend(ret) } @@ -115,26 +113,13 @@ val matchedUsersData private fun getMatchedUsers(): Flow<List<User>> { - var user: User? - runBlocking { - user = getUserById(firebaseUser!!.uid) + val user: User? = runBlocking { + getUserById(firebaseUser!!.uid) } return getListOfData( collection = "users", - map = { datas -> - datas.map { data -> - User( - id = data.id, - name = data.get("name") as String, - description = data.get("description") as String, - preferences = data.get("preferences") as Preferences, - dismissedUsers = data.get("dismissedUsers") as List<String>, - likedUsers = data.get("likedUsers") as List<String>, - contacts = data.get("contacts") as String, - ) - } - }, + map = { it.toObjects(User::class.java) }, queryTransform = { var q = it.whereArrayContains("likedUsers", firebaseUser!!.uid) if (user!!.likedUsers.isNotEmpty()) { diff --git a/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/Types.kt b/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/Types.kt index 9a434db..fb1ce70 100644 --- a/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/Types.kt +++ b/app/src/main/java/hu/bme/kszk/szobatarsch/firebase/Types.kt @@ -7,8 +7,8 @@ data class User( val name: String = "", val description: String = "", val preferences: Preferences = Preferences(), - val dismissedUsers: List<String> = listOf(), - val likedUsers: List<String> = listOf(), + var dismissedUsers: List<String> = listOf(), + var likedUsers: List<String> = listOf(), val contacts: String = "", ): Serializable -- GitLab