From 5f1a90759b8ba5431637402f8ee323c4b91dcdd8 Mon Sep 17 00:00:00 2001 From: cotrin1208 Date: Wed, 27 Mar 2024 14:09:12 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20firestore=E3=81=AECRUD=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- firebase-firestore/build.gradle.kts | 2 +- .../src/jsMain/kotlin/CollectionReference.kt | 9 +++++ .../src/jsMain/kotlin/DocumentData.kt | 1 + .../src/jsMain/kotlin/DocumentReference.kt | 36 +++++++++++++++++++ .../src/jsMain/kotlin/DocumentSnapshot.kt | 13 +++++++ .../src/jsMain/kotlin/FieldPath.kt | 7 ++++ .../src/jsMain/kotlin/FirebaseFirestore.kt | 21 +++++++---- .../src/jsMain/kotlin/Firestore.kt | 10 ++++++ firebase-firestore/src/jsMain/kotlin/Query.kt | 8 +++++ .../jsMain/kotlin/QueryDocumentSnapshot.kt | 7 ++++ .../src/jsMain/kotlin/QueryType.kt | 18 ++++++++++ .../src/jsMain/kotlin/ServerTimeStamps.kt | 22 ++++++++++++ .../src/jsMain/kotlin/SnapshotMetadata.kt | 9 +++++ .../src/jsMain/kotlin/SnapshotOptions.kt | 7 ++++ firebase-wrapper-bom/build.gradle.kts | 2 +- 16 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 firebase-firestore/src/jsMain/kotlin/CollectionReference.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/DocumentData.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/DocumentReference.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/DocumentSnapshot.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/FieldPath.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/Firestore.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/Query.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/QueryDocumentSnapshot.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/QueryType.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/ServerTimeStamps.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/SnapshotMetadata.kt create mode 100644 firebase-firestore/src/jsMain/kotlin/SnapshotOptions.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index 40ba7a7..2304d43 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/firebase-firestore/build.gradle.kts b/firebase-firestore/build.gradle.kts index cb2b3ce..d3d4623 100644 --- a/firebase-firestore/build.gradle.kts +++ b/firebase-firestore/build.gradle.kts @@ -2,7 +2,7 @@ plugins { alias(libs.plugins.kotlin.libs.convention) } -version = "0.0.1" +version = "0.0.2" kotlin { sourceSets.jsMain { diff --git a/firebase-firestore/src/jsMain/kotlin/CollectionReference.kt b/firebase-firestore/src/jsMain/kotlin/CollectionReference.kt new file mode 100644 index 0000000..9302970 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/CollectionReference.kt @@ -0,0 +1,9 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +external interface CollectionReference : Query { + var id: String + var parent: DocumentReference? + var path: String +} diff --git a/firebase-firestore/src/jsMain/kotlin/DocumentData.kt b/firebase-firestore/src/jsMain/kotlin/DocumentData.kt new file mode 100644 index 0000000..82074ea --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/DocumentData.kt @@ -0,0 +1 @@ +interface DocumentData diff --git a/firebase-firestore/src/jsMain/kotlin/DocumentReference.kt b/firebase-firestore/src/jsMain/kotlin/DocumentReference.kt new file mode 100644 index 0000000..788b525 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/DocumentReference.kt @@ -0,0 +1,36 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +/** + * A DocumentReference refers to a document location in a Firestore database + * and can be used to write, read, or listen to the location. + * The document at the referenced location may or may not exist. + */ +external class DocumentReference { + /** + * The Firestore instance the document is in. + * This is useful for performing transactions, for example. + */ + val firestore: Firestore + + /** + * The document's identifier within its collection. + */ + var id: String + + /** + * The collection this DocumentReference belongs to. + */ + var parent: CollectionReference + + /** + * A string representing the path of the referenced document (relative to the root of the database). + */ + var path: String + + /** + * The type of this Firestore reference. + */ + val type: String = definedExternally +} diff --git a/firebase-firestore/src/jsMain/kotlin/DocumentSnapshot.kt b/firebase-firestore/src/jsMain/kotlin/DocumentSnapshot.kt new file mode 100644 index 0000000..1f1cd67 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/DocumentSnapshot.kt @@ -0,0 +1,13 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +open external class DocumentSnapshot { + var id: String + val metadata: SnapshotMetadata + var ref: DocumentReference + fun data(options: SnapshotOptions?): DocumentData? + fun exists(): Boolean + fun get(fieldPath: String, options: SnapshotOptions?): dynamic + fun get(fieldPath: FieldPath, options: SnapshotOptions?): dynamic +} diff --git a/firebase-firestore/src/jsMain/kotlin/FieldPath.kt b/firebase-firestore/src/jsMain/kotlin/FieldPath.kt new file mode 100644 index 0000000..3bd9f44 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/FieldPath.kt @@ -0,0 +1,7 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +external class FieldPath(vararg fieldNames: String) { + fun isEqual(other: FieldPath): Boolean +} diff --git a/firebase-firestore/src/jsMain/kotlin/FirebaseFirestore.kt b/firebase-firestore/src/jsMain/kotlin/FirebaseFirestore.kt index d9b3e9a..194c97b 100644 --- a/firebase-firestore/src/jsMain/kotlin/FirebaseFirestore.kt +++ b/firebase-firestore/src/jsMain/kotlin/FirebaseFirestore.kt @@ -2,11 +2,20 @@ @file:JsNonModule @file:Suppress("unused") -external class Firestore { - val app: FirebaseApp - val type: String = definedExternally - - fun toJson(): dynamic -} +import kotlin.js.Promise external fun getFirestore(app: FirebaseApp): Firestore + +external fun collection( + firestore: Firestore, + path: String, + vararg pathSegments: String +): CollectionReference + +external fun addDoc(reference: CollectionReference, data: DocumentData): Promise + +external fun getDoc(reference: CollectionReference): Promise + +external fun updateDoc(reference: CollectionReference, data: DocumentData): Promise + +external fun deleteDoc(reference: CollectionReference): Promise diff --git a/firebase-firestore/src/jsMain/kotlin/Firestore.kt b/firebase-firestore/src/jsMain/kotlin/Firestore.kt new file mode 100644 index 0000000..0b8f1dd --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/Firestore.kt @@ -0,0 +1,10 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +external class Firestore { + val app: FirebaseApp + val type: String = definedExternally + + fun toJson(): dynamic +} diff --git a/firebase-firestore/src/jsMain/kotlin/Query.kt b/firebase-firestore/src/jsMain/kotlin/Query.kt new file mode 100644 index 0000000..ce80b37 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/Query.kt @@ -0,0 +1,8 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +external interface Query { + val firestore: Firestore + val type: QueryType +} diff --git a/firebase-firestore/src/jsMain/kotlin/QueryDocumentSnapshot.kt b/firebase-firestore/src/jsMain/kotlin/QueryDocumentSnapshot.kt new file mode 100644 index 0000000..8a6c334 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/QueryDocumentSnapshot.kt @@ -0,0 +1,7 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +external class QueryDocumentSnapshot : DocumentSnapshot { + fun data(options: SnapshotOptions): DocumentData +} diff --git a/firebase-firestore/src/jsMain/kotlin/QueryType.kt b/firebase-firestore/src/jsMain/kotlin/QueryType.kt new file mode 100644 index 0000000..0a98291 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/QueryType.kt @@ -0,0 +1,18 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +import seskar.js.JsValue +import seskar.js.JsVirtual + +@Suppress("NESTED_CLASS_IN_EXTERNAL_INTERFACE") +@JsVirtual +sealed external interface QueryType { + companion object { + @JsValue("query") + val query: QueryType + + @JsValue("collection") + val collection: QueryType + } +} diff --git a/firebase-firestore/src/jsMain/kotlin/ServerTimeStamps.kt b/firebase-firestore/src/jsMain/kotlin/ServerTimeStamps.kt new file mode 100644 index 0000000..72845db --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/ServerTimeStamps.kt @@ -0,0 +1,22 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +import seskar.js.JsValue +import seskar.js.JsVirtual + + +@Suppress("NESTED_CLASS_IN_EXTERNAL_INTERFACE") +@JsVirtual +external interface ServerTimeStamps { + companion object { + @JsValue("estimate") + val estimate: ServerTimeStamps + + @JsValue("previous") + val previous: ServerTimeStamps + + @JsValue("none") + val none: ServerTimeStamps + } +} diff --git a/firebase-firestore/src/jsMain/kotlin/SnapshotMetadata.kt b/firebase-firestore/src/jsMain/kotlin/SnapshotMetadata.kt new file mode 100644 index 0000000..d6db080 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/SnapshotMetadata.kt @@ -0,0 +1,9 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +external class SnapshotMetadata { + val fromCache: Boolean + val hasPendingWrites: Boolean + fun isEqual(other: SnapshotMetadata): Boolean +} diff --git a/firebase-firestore/src/jsMain/kotlin/SnapshotOptions.kt b/firebase-firestore/src/jsMain/kotlin/SnapshotOptions.kt new file mode 100644 index 0000000..d6b02a6 --- /dev/null +++ b/firebase-firestore/src/jsMain/kotlin/SnapshotOptions.kt @@ -0,0 +1,7 @@ +@file:JsModule("firebase/firestore") +@file:JsNonModule +@file:Suppress("unused") + +external interface SnapshotOptions { + val serverTimestamps: ServerTimeStamps +} diff --git a/firebase-wrapper-bom/build.gradle.kts b/firebase-wrapper-bom/build.gradle.kts index 5f3ae75..43b7b43 100644 --- a/firebase-wrapper-bom/build.gradle.kts +++ b/firebase-wrapper-bom/build.gradle.kts @@ -3,7 +3,7 @@ plugins { alias(libs.plugins.publish.convention) } -version = "0.0.1" +version = "0.0.2" javaPlatform { allowDependencies()