Skip to content

Commit f4afeec

Browse files
committed
Added shortcuts
1 parent bd145c4 commit f4afeec

File tree

1 file changed

+56
-2
lines changed
  • firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore

1 file changed

+56
-2
lines changed

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

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import kotlinx.serialization.KSerializer
1111
import kotlinx.serialization.Serializable
1212
import kotlinx.serialization.SerializationException
1313
import kotlinx.serialization.SerializationStrategy
14+
import kotlin.jvm.JvmName
1415

1516
/** Returns the [FirebaseFirestore] instance of the default [FirebaseApp]. */
1617
expect val Firebase.firestore: FirebaseFirestore
@@ -68,8 +69,8 @@ sealed class WhereClause {
6869
val safeValues get() = values.map { it.safeValue }
6970
}
7071

71-
data class EqualTo(override val value: Any) : ForNullableObject()
72-
data class NotEqualTo(override val value: Any) : ForNullableObject()
72+
data class EqualTo(override val value: Any?) : ForNullableObject()
73+
data class NotEqualTo(override val value: Any?) : ForNullableObject()
7374
data class LessThan(override val value: Any) : ForObject()
7475
data class GreaterThan(override val value: Any) : ForObject()
7576
data class LessThanOrEqualTo(override val value: Any) : ForObject()
@@ -112,6 +113,59 @@ private val Any.safeValue: Any get() = when (this) {
112113
else -> this
113114
}
114115

116+
fun Query.where(field: String, equalTo: Any?) = where(field, WhereClause.EqualTo(equalTo))
117+
fun Query.where(path: FieldPath, equalTo: Any?) = where(path, WhereClause.EqualTo(equalTo))
118+
fun Query.whereNot(field: String, notEqualTo: Any?) = where(field, WhereClause.NotEqualTo(notEqualTo))
119+
fun Query.whereNot(path: FieldPath, notEqualTo: Any?) = where(path, WhereClause.NotEqualTo(notEqualTo))
120+
fun Query.where(field: String,
121+
lessThan: Any? = null,
122+
greaterThan: Any? = null,
123+
lessThanOrEqualTo: Any? = null,
124+
greaterThanOrEqualTo: Any? = null,
125+
arrayContains: Any? = null,
126+
arrayContainsAny: List<Any>? = null,
127+
inArray: List<Any>? = null,
128+
notInArray: List<Any>? = null,
129+
) =
130+
where(
131+
field,
132+
listOfNotNull(
133+
lessThan?.let { WhereClause.LessThan(it) },
134+
greaterThan?.let { WhereClause.GreaterThan(it) },
135+
lessThanOrEqualTo?.let { WhereClause.LessThanOrEqualTo(it) },
136+
greaterThanOrEqualTo?.let { WhereClause.GreaterThanOrEqualTo(it) },
137+
arrayContains?.let { WhereClause.ArrayContains(it) },
138+
arrayContainsAny?.let { WhereClause.ArrayContainsAny(it) },
139+
inArray?.let { WhereClause.InArray(it) },
140+
notInArray?.let { WhereClause.NotInArray(it) }
141+
)
142+
)
143+
144+
fun Query.where(path: FieldPath,
145+
lessThan: Any? = null,
146+
greaterThan: Any? = null,
147+
lessThanOrEqualTo: Any? = null,
148+
greaterThanOrEqualTo: Any? = null,
149+
arrayContains: Any? = null,
150+
arrayContainsAny: List<Any>? = null,
151+
inArray: List<Any>? = null,
152+
notInArray: List<Any>? = null,
153+
) =
154+
where(
155+
path,
156+
listOfNotNull(
157+
lessThan?.let { WhereClause.LessThan(it) },
158+
greaterThan?.let { WhereClause.GreaterThan(it) },
159+
lessThanOrEqualTo?.let { WhereClause.LessThanOrEqualTo(it) },
160+
greaterThanOrEqualTo?.let { WhereClause.GreaterThanOrEqualTo(it) },
161+
arrayContains?.let { WhereClause.ArrayContains(it) },
162+
arrayContainsAny?.let { WhereClause.ArrayContainsAny(it) },
163+
inArray?.let { WhereClause.InArray(it) },
164+
notInArray?.let { WhereClause.NotInArray(it) }
165+
)
166+
)
167+
168+
115169
fun Query.orderBy(field: String, direction: Direction = Direction.ASCENDING) = _orderBy(field, direction)
116170
fun Query.orderBy(field: FieldPath, direction: Direction = Direction.ASCENDING) = _orderBy(field, direction)
117171

0 commit comments

Comments
 (0)