Skip to content

Commit ad169bb

Browse files
Add collection and document function (#110)
* Made add() arguments consistent with the set() * Add js overload * Add collection and document * Update firestore tests to use document ref * Update deprecated message * Add missing serializer
1 parent 8df7fba commit ad169bb

File tree

6 files changed

+29
-3
lines changed
  • firebase-common/src/jsMain/kotlin/dev/gitlive/firebase
  • firebase-firestore/src

6 files changed

+29
-3
lines changed

firebase-common/src/jsMain/kotlin/dev/gitlive/firebase/externals.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ external object firebase {
361361

362362
open class CollectionReference : Query {
363363
val path: String
364+
fun doc(path: String): DocumentReference
364365
fun add(data: Any): Promise<DocumentReference>
365366
}
366367

@@ -388,6 +389,7 @@ external object firebase {
388389
val id: String
389390
val path: String
390391

392+
fun collection(path: String): CollectionReference
391393
fun get(options: Any? = definedExternally): Promise<DocumentSnapshot>
392394
fun set(data: Any, options: Any? = definedExternally): Promise<Unit>
393395
fun update(data: Any): Promise<Unit>

firebase-firestore/src/androidMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ actual class DocumentReference(val android: com.google.firebase.firestore.Docume
193193
actual val path: String
194194
get() = android.path
195195

196+
actual fun collection(collectionPath: String) = CollectionReference(android.collection(collectionPath))
197+
196198
actual suspend inline fun <reified T> set(data: T, encodeDefaults: Boolean, merge: Boolean) = when(merge) {
197199
true -> android.set(encode(data, encodeDefaults)!!, SetOptions.merge())
198200
false -> android.set(encode(data, encodeDefaults)!!)
@@ -324,11 +326,15 @@ actual class CollectionReference(override val android: com.google.firebase.fires
324326
actual val path: String
325327
get() = android.path
326328

329+
actual fun document(documentPath: String) = DocumentReference(android.document(documentPath))
330+
327331
actual suspend inline fun <reified T> add(data: T, encodeDefaults: Boolean) =
328332
DocumentReference(android.add(encode(data, encodeDefaults)!!).await())
329333

330334
actual suspend fun <T> add(data: T, strategy: SerializationStrategy<T>, encodeDefaults: Boolean) =
331335
DocumentReference(android.add(encode(strategy, data, encodeDefaults)!!).await())
336+
actual suspend fun <T> add(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean) =
337+
DocumentReference(android.add(encode(strategy, data, encodeDefaults)!!).await())
332338
}
333339

334340
actual typealias FirebaseFirestoreException = com.google.firebase.firestore.FirebaseFirestoreException

firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ expect class DocumentReference {
100100
val id: String
101101
val path: String
102102
val snapshots: Flow<DocumentSnapshot>
103+
104+
fun collection(collectionPath: String): CollectionReference
103105
suspend fun get(): DocumentSnapshot
104106

105107
suspend inline fun <reified T> set(data: T, encodeDefaults: Boolean = true, merge: Boolean = false)
@@ -121,8 +123,12 @@ expect class DocumentReference {
121123

122124
expect class CollectionReference : Query {
123125
val path: String
126+
127+
fun document(documentPath: String): DocumentReference
124128
suspend inline fun <reified T> add(data: T, encodeDefaults: Boolean = true): DocumentReference
129+
@Deprecated("This will be replaced with add(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true)")
125130
suspend fun <T> add(data: T, strategy: SerializationStrategy<T>, encodeDefaults: Boolean = true): DocumentReference
131+
suspend fun <T> add(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true): DocumentReference
126132
}
127133

128134
expect class FirebaseFirestoreException : FirebaseException

firebase-firestore/src/commonTest/kotlin/dev/gitlive/firebase/firestore/firestore.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ class FirebaseFirestoreTest {
9999
}
100100

101101
private suspend fun setupFirestoreData() {
102-
Firebase.firestore.document("test/one").set(FirestoreTest.serializer(), FirestoreTest("aaa"))
103-
Firebase.firestore.document("test/two").set(FirestoreTest.serializer(), FirestoreTest("bbb"))
104-
Firebase.firestore.document("test/three").set(FirestoreTest.serializer(), FirestoreTest("ccc"))
102+
Firebase.firestore.collection("test").document("one").set(FirestoreTest.serializer(), FirestoreTest("aaa"))
103+
Firebase.firestore.collection("test").document("two").set(FirestoreTest.serializer(), FirestoreTest("bbb"))
104+
Firebase.firestore.collection("test").document("three").set(FirestoreTest.serializer(), FirestoreTest("ccc"))
105105
}
106106
}

firebase-firestore/src/iosMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ actual class DocumentReference(val ios: FIRDocumentReference) {
131131
actual val path: String
132132
get() = ios.path
133133

134+
actual fun collection(collectionPath: String) = CollectionReference(ios.collectionWithPath(collectionPath))
135+
134136
actual suspend inline fun <reified T> set(data: T, encodeDefaults: Boolean, merge: Boolean) =
135137
await { ios.setData(encode(data, encodeDefaults)!! as Map<Any?, *>, merge, it) }
136138

@@ -232,11 +234,15 @@ actual class CollectionReference(override val ios: FIRCollectionReference) : Que
232234
actual val path: String
233235
get() = ios.path
234236

237+
actual fun document(documentPath: String) = DocumentReference(ios.documentWithPath(documentPath))
238+
235239
actual suspend inline fun <reified T> add(data: T, encodeDefaults: Boolean) =
236240
DocumentReference(await { ios.addDocumentWithData(encode(data, encodeDefaults) as Map<Any?, *>, it) })
237241

238242
actual suspend fun <T> add(data: T, strategy: SerializationStrategy<T>, encodeDefaults: Boolean) =
239243
DocumentReference(await { ios.addDocumentWithData(encode(strategy, data, encodeDefaults) as Map<Any?, *>) })
244+
actual suspend fun <T> add(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean) =
245+
DocumentReference(await { ios.addDocumentWithData(encode(strategy, data, encodeDefaults) as Map<Any?, *>) })
240246
}
241247

242248
actual class FirebaseFirestoreException(message: String, val code: FirestoreExceptionCode) : FirebaseException(message)

firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ actual class DocumentReference(val js: firebase.firestore.DocumentReference) {
184184
actual val path: String
185185
get() = rethrow { js.path }
186186

187+
actual fun collection(collectionPath: String) = rethrow { CollectionReference(js.collection(collectionPath)) }
188+
187189
actual suspend inline fun <reified T> set(data: T, encodeDefaults: Boolean, merge: Boolean) =
188190
rethrow { js.set(encode(data, encodeDefaults)!!, json("merge" to merge)).await() }
189191

@@ -310,11 +312,15 @@ actual class CollectionReference(override val js: firebase.firestore.CollectionR
310312
actual val path: String
311313
get() = rethrow { js.path }
312314

315+
actual fun document(documentPath: String) = rethrow { DocumentReference(js.doc(documentPath)) }
316+
313317
actual suspend inline fun <reified T> add(data: T, encodeDefaults: Boolean) =
314318
rethrow { DocumentReference(js.add(encode(data, encodeDefaults)!!).await()) }
315319

316320
actual suspend fun <T> add(data: T, strategy: SerializationStrategy<T>, encodeDefaults: Boolean) =
317321
rethrow { DocumentReference(js.add(encode(strategy, data, encodeDefaults)!!).await()) }
322+
actual suspend fun <T> add(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean) =
323+
rethrow { DocumentReference(js.add(encode(strategy, data, encodeDefaults)!!).await()) }
318324
}
319325

320326
actual class FirebaseFirestoreException(cause: Throwable, val code: FirestoreExceptionCode) : FirebaseException(code.toString(), cause)

0 commit comments

Comments
 (0)