Skip to content

Commit 0c421e0

Browse files
authored
Merge pull request #284 from GitLiveApp/add-field-value-increment-to-firestore
Add field value increment to firestore
2 parents fbef5f4 + 7faa2ce commit 0c421e0

File tree

13 files changed

+38
-18
lines changed

13 files changed

+38
-18
lines changed

firebase-app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-common": "1.4.3",
26+
"@gitlive/firebase-common": "1.5.0",
2727
"firebase": "9.4.1",
2828
"kotlin": "1.5.31",
2929
"kotlinx-coroutines-core": "1.5.2-native-mt"

firebase-auth/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-app": "1.4.3",
26+
"@gitlive/firebase-app": "1.5.0",
2727
"firebase": "9.4.1",
2828
"kotlin": "1.5.31",
2929
"kotlinx-coroutines-core": "1.5.2-native-mt"

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ external object firebase {
462462
companion object {
463463
fun serverTimestamp(): FieldValue
464464
fun delete(): FieldValue
465+
fun increment(value: Int): FieldValue
465466
fun arrayRemove(vararg elements: Any): FieldValue
466467
fun arrayUnion(vararg elements: Any): FieldValue
467468
}

firebase-config/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-app": "1.4.3",
26+
"@gitlive/firebase-app": "1.5.0",
2727
"firebase": "9.4.1",
2828
"kotlin": "1.5.31",
2929
"kotlinx-coroutines-core": "1.5.2-native-mt"

firebase-database/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-app": "1.4.3",
26+
"@gitlive/firebase-app": "1.5.0",
2727
"firebase": "9.4.1",
2828
"kotlin": "1.5.31",
2929
"kotlinx-coroutines-core": "1.5.2-native-mt"

firebase-firestore/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-app": "1.4.3",
26+
"@gitlive/firebase-app": "1.5.0",
2727
"firebase": "9.4.1",
2828
"kotlin": "1.5.31",
2929
"kotlinx-coroutines-core": "1.5.2-native-mt"

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ actual class FieldPath private constructor(val android: com.google.firebase.fire
465465
actual object FieldValue {
466466
actual val serverTimestamp = Double.POSITIVE_INFINITY
467467
actual val delete: Any get() = FieldValue.delete()
468+
actual fun increment(value: Int): Any = FieldValue.increment(value.toDouble())
468469
actual fun arrayUnion(vararg elements: Any): Any = FieldValue.arrayUnion(*elements)
469470
actual fun arrayRemove(vararg elements: Any): Any = FieldValue.arrayRemove(*elements)
470471
actual fun delete(): Any = delete

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ expect class FieldPath(vararg fieldNames: String) {
227227
expect object FieldValue {
228228
val serverTimestamp: Double
229229
val delete: Any
230+
fun increment(value: Int): Any
230231
fun arrayUnion(vararg elements: Any): Any
231232
fun arrayRemove(vararg elements: Any): Any
232233
@Deprecated("Replaced with FieldValue.delete")

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

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ expect fun runTest(test: suspend CoroutineScope.() -> Unit)
3131
class FirebaseFirestoreTest {
3232

3333
@Serializable
34-
data class FirestoreTest(val prop1: String, val time: Double = 0.0)
34+
data class FirestoreTest(val prop1: String, val time: Double = 0.0, val count: Int = 0)
3535

3636
@BeforeTest
3737
fun initializeFirebase() {
@@ -57,7 +57,7 @@ class FirebaseFirestoreTest {
5757
fun testStringOrderBy() = runTest {
5858
setupFirestoreData()
5959
val resultDocs = Firebase.firestore
60-
.collection("FirebaseFirestoreTest")
60+
.collection("testFirestoreQuerying")
6161
.orderBy("prop1")
6262
.get()
6363
.documents
@@ -71,7 +71,7 @@ class FirebaseFirestoreTest {
7171
fun testFieldOrderBy() = runTest {
7272
setupFirestoreData()
7373

74-
val resultDocs = Firebase.firestore.collection("FirebaseFirestoreTest")
74+
val resultDocs = Firebase.firestore.collection("testFirestoreQuerying")
7575
.orderBy(FieldPath("prop1")).get().documents
7676
assertEquals(3, resultDocs.size)
7777
assertEquals("aaa", resultDocs[0].get("prop1"))
@@ -83,7 +83,7 @@ class FirebaseFirestoreTest {
8383
fun testStringOrderByAscending() = runTest {
8484
setupFirestoreData()
8585

86-
val resultDocs = Firebase.firestore.collection("FirebaseFirestoreTest")
86+
val resultDocs = Firebase.firestore.collection("testFirestoreQuerying")
8787
.orderBy("prop1", Direction.ASCENDING).get().documents
8888
assertEquals(3, resultDocs.size)
8989
assertEquals("aaa", resultDocs[0].get("prop1"))
@@ -95,7 +95,7 @@ class FirebaseFirestoreTest {
9595
fun testFieldOrderByAscending() = runTest {
9696
setupFirestoreData()
9797

98-
val resultDocs = Firebase.firestore.collection("FirebaseFirestoreTest")
98+
val resultDocs = Firebase.firestore.collection("testFirestoreQuerying")
9999
.orderBy(FieldPath("prop1"), Direction.ASCENDING).get().documents
100100
assertEquals(3, resultDocs.size)
101101
assertEquals("aaa", resultDocs[0].get("prop1"))
@@ -107,7 +107,7 @@ class FirebaseFirestoreTest {
107107
fun testStringOrderByDescending() = runTest {
108108
setupFirestoreData()
109109

110-
val resultDocs = Firebase.firestore.collection("FirebaseFirestoreTest")
110+
val resultDocs = Firebase.firestore.collection("testFirestoreQuerying")
111111
.orderBy("prop1", Direction.DESCENDING).get().documents
112112
assertEquals(3, resultDocs.size)
113113
assertEquals("ccc", resultDocs[0].get("prop1"))
@@ -119,7 +119,7 @@ class FirebaseFirestoreTest {
119119
fun testFieldOrderByDescending() = runTest {
120120
setupFirestoreData()
121121

122-
val resultDocs = Firebase.firestore.collection("FirebaseFirestoreTest")
122+
val resultDocs = Firebase.firestore.collection("testFirestoreQuerying")
123123
.orderBy(FieldPath("prop1"), Direction.DESCENDING).get().documents
124124
assertEquals(3, resultDocs.size)
125125
assertEquals("ccc", resultDocs[0].get("prop1"))
@@ -224,7 +224,7 @@ class FirebaseFirestoreTest {
224224
fun testStartAfterDocumentSnapshot() = runTest {
225225
setupFirestoreData()
226226
val query = Firebase.firestore
227-
.collection("FirebaseFirestoreTest")
227+
.collection("testFirestoreQuerying")
228228
.orderBy("prop1", Direction.ASCENDING)
229229

230230
val firstPage = query.limit(2).get().documents // First 2 results
@@ -239,14 +239,29 @@ class FirebaseFirestoreTest {
239239
assertEquals("ccc", secondPage[0].get("prop1"))
240240
}
241241

242+
@Test
243+
fun testIncrementFieldValue() = runTest {
244+
val doc = Firebase.firestore
245+
.collection("testFirestoreIncrementFieldValue")
246+
.document("test1")
247+
248+
doc.set(FirestoreTest.serializer(), FirestoreTest("increment1", count = 0))
249+
val dataBefore = doc.get().data(FirestoreTest.serializer())
250+
assertEquals(0, dataBefore.count)
251+
252+
doc.update("count" to FieldValue.increment(5))
253+
val dataAfter = doc.get().data(FirestoreTest.serializer())
254+
assertEquals(5, dataAfter.count)
255+
}
256+
242257
private suspend fun setupFirestoreData() {
243-
Firebase.firestore.collection("FirebaseFirestoreTest")
258+
Firebase.firestore.collection("testFirestoreQuerying")
244259
.document("one")
245260
.set(FirestoreTest.serializer(), FirestoreTest("aaa"))
246-
Firebase.firestore.collection("FirebaseFirestoreTest")
261+
Firebase.firestore.collection("testFirestoreQuerying")
247262
.document("two")
248263
.set(FirestoreTest.serializer(), FirestoreTest("bbb"))
249-
Firebase.firestore.collection("FirebaseFirestoreTest")
264+
Firebase.firestore.collection("testFirestoreQuerying")
250265
.document("three")
251266
.set(FirestoreTest.serializer(), FirestoreTest("ccc"))
252267
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,7 @@ actual class FieldPath private constructor(val ios: FIRFieldPath) {
438438
actual object FieldValue {
439439
actual val serverTimestamp = Double.POSITIVE_INFINITY
440440
actual val delete: Any get() = FIRFieldValue.fieldValueForDelete()
441+
actual fun increment(value: Int): Any = FIRFieldValue.fieldValueForIntegerIncrement(value.toLong())
441442
actual fun arrayUnion(vararg elements: Any): Any = FIRFieldValue.fieldValueForArrayUnion(elements.asList())
442443
actual fun arrayRemove(vararg elements: Any): Any = FIRFieldValue.fieldValueForArrayRemove(elements.asList())
443444
actual fun delete(): Any = delete

0 commit comments

Comments
 (0)