forked from GitLiveApp/firebase-kotlin-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
firestore.kt
191 lines (149 loc) · 8.38 KB
/
firestore.kt
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
/*
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
*/
package dev.gitlive.firebase.firestore
import dev.gitlive.firebase.Firebase
import dev.gitlive.firebase.FirebaseApp
import dev.gitlive.firebase.FirebaseException
import kotlinx.coroutines.flow.Flow
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.ImplicitReflectionSerializer
import kotlinx.serialization.SerializationStrategy
/** Returns the [FirebaseFirestore] instance of the default [FirebaseApp]. */
expect val Firebase.firestore: FirebaseFirestore
/** Returns the [FirebaseFirestore] instance of a given [FirebaseApp]. */
expect fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore
expect class FirebaseFirestore {
// var settings: FirebaseFirestoreSettings
fun collection(collectionPath: String): CollectionReference
fun document(documentPath: String): DocumentReference
fun batch(): WriteBatch
fun setLoggingEnabled(loggingEnabled: Boolean)
suspend fun <T> runTransaction(func: suspend Transaction.() -> T): T
}
expect class Transaction {
@ImplicitReflectionSerializer
fun set(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true, merge: Boolean = false): Transaction
@ImplicitReflectionSerializer
fun set(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true, vararg mergeFields: String): Transaction
@ImplicitReflectionSerializer
fun set(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true, vararg mergeFieldPaths: FieldPath): Transaction
fun <T> set(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, merge: Boolean = false): Transaction
fun <T> set(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, vararg mergeFields: String): Transaction
fun <T> set(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, vararg mergeFieldPaths: FieldPath): Transaction
@ImplicitReflectionSerializer
fun update(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true): Transaction
fun <T> update(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true): Transaction
fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair<String, Any?>): Transaction
fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair<FieldPath, Any?>): Transaction
fun delete(documentRef: DocumentReference): Transaction
suspend fun get(documentRef: DocumentReference): DocumentSnapshot
}
//data class FirebaseFirestoreSettings(
// val persistenceEnabled: Boolean = true
//)
expect open class Query {
internal fun _where(field: String, equalTo: Any?): Query
internal fun _where(path: FieldPath, equalTo: Any?): Query
internal fun _where(field: String, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null): Query
internal fun _where(path: FieldPath, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null): Query
internal fun _where(field: String, arrayContainsAny: List<Any>): Query
internal fun _where(path: FieldPath, arrayContainsAny: List<Any>): Query
val snapshots: Flow<QuerySnapshot>
suspend fun get(): QuerySnapshot
}
fun Query.where(field: String, equalTo: Any?) = _where(field, equalTo)
fun Query.where(path: FieldPath, equalTo: Any?) = _where(path, equalTo)
fun Query.where(field: String, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null) = _where(field, lessThan, greaterThan, arrayContains)
fun Query.where(path: FieldPath, lessThan: Any? = null, greaterThan: Any? = null, arrayContains: Any? = null) = _where(path, lessThan, greaterThan, arrayContains)
fun Query.where(field: String, arrayContainsAny: List<Any>) = _where(field, arrayContainsAny)
fun Query.where(path: FieldPath, arrayContainsAny: List<Any>) = _where(path, arrayContainsAny)
expect class WriteBatch {
@ImplicitReflectionSerializer
fun set(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true, merge: Boolean = false): WriteBatch
@ImplicitReflectionSerializer
fun set(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true, vararg mergeFields: String): WriteBatch
@ImplicitReflectionSerializer
fun set(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true, vararg mergeFieldPaths: FieldPath): WriteBatch
fun <T> set(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, merge: Boolean = false): WriteBatch
fun <T> set(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, vararg mergeFields: String): WriteBatch
fun <T> set(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, vararg mergeFieldPaths: FieldPath): WriteBatch
@ImplicitReflectionSerializer
fun update(documentRef: DocumentReference, data: Any, encodeDefaults: Boolean = true): WriteBatch
fun <T> update(documentRef: DocumentReference, strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true): WriteBatch
fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair<String, Any?>): WriteBatch
fun update(documentRef: DocumentReference, vararg fieldsAndValues: Pair<FieldPath, Any?>): WriteBatch
fun delete(documentRef: DocumentReference): WriteBatch
suspend fun commit()
}
expect class DocumentReference {
val id: String
val path: String
val snapshots: Flow<DocumentSnapshot>
suspend fun get(): DocumentSnapshot
@ImplicitReflectionSerializer
suspend fun set(data: Any, encodeDefaults: Boolean = true, merge: Boolean = false)
@ImplicitReflectionSerializer
suspend fun set(data: Any, encodeDefaults: Boolean = true, vararg mergeFields: String)
@ImplicitReflectionSerializer
suspend fun set(data: Any, encodeDefaults: Boolean = true, vararg mergeFieldPaths: FieldPath)
suspend fun <T> set(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, merge: Boolean = false)
suspend fun <T> set(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, vararg mergeFields: String)
suspend fun <T> set(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true, vararg mergeFieldPaths: FieldPath)
@ImplicitReflectionSerializer
suspend fun update(data: Any, encodeDefaults: Boolean = true)
suspend fun <T> update(strategy: SerializationStrategy<T>, data: T, encodeDefaults: Boolean = true)
suspend fun update(vararg fieldsAndValues: Pair<String, Any?>)
suspend fun update(vararg fieldsAndValues: Pair<FieldPath, Any?>)
suspend fun delete()
}
expect class CollectionReference : Query {
val path: String
@ImplicitReflectionSerializer
suspend fun add(data: Any, encodeDefaults: Boolean = true): DocumentReference
suspend fun <T> add(data: T, strategy: SerializationStrategy<T>, encodeDefaults: Boolean = true): DocumentReference
}
expect class FirebaseFirestoreException : FirebaseException
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
expect val FirebaseFirestoreException.code: FirestoreExceptionCode
expect enum class FirestoreExceptionCode {
OK,
CANCELLED,
UNKNOWN,
INVALID_ARGUMENT,
DEADLINE_EXCEEDED,
NOT_FOUND,
ALREADY_EXISTS,
PERMISSION_DENIED,
RESOURCE_EXHAUSTED,
FAILED_PRECONDITION,
ABORTED,
OUT_OF_RANGE,
UNIMPLEMENTED,
INTERNAL,
UNAVAILABLE,
DATA_LOSS,
UNAUTHENTICATED
}
expect class QuerySnapshot {
val documents: List<DocumentSnapshot>
}
expect class DocumentSnapshot {
@ImplicitReflectionSerializer
inline fun <reified T> get(field: String): T
fun <T> get(field: String, strategy: DeserializationStrategy<T>): T
fun contains(field: String): Boolean
@ImplicitReflectionSerializer
inline fun <reified T: Any> data(): T
fun <T> data(strategy: DeserializationStrategy<T>): T
val exists: Boolean
val id: String
val reference: DocumentReference
}
expect class FieldPath
expect fun FieldPath(vararg fieldNames: String): FieldPath
expect object FieldValue {
fun delete(): Any
fun arrayUnion(vararg elements: Any): Any
fun arrayRemove(vararg elements: Any): Any
}