IzumiSy/elm-firestore/12.0.0

NOTE: the latest version is 13.0.0

Firestore

A library to have your app interact with Firestore in Elm

Data type for Firestore.

Constructors

Builds a new Firestore connection with Config.

Updates configuration.

Path

type Path type_

A validated path type

An instance of this type can be constructed with build function. CRUDs function can accept this type to run their opration as follows.

firestore
    |> Firestore.root
    |> Firestore.collection "users"
    |> Firestore.document "user0"
    |> Firestore.subCollection "tags"
    |> Firestore.build
    |> ExResult.toTask
    |> Task.andThen (Firestore.list tagDecoder ListOptions.default)
    |> Task.attempt GotUserItemTags
root : Firestore -> PathBuilder RootType

A root path

collection : String -> PathBuilder RootType -> PathBuilder CollectionType

A collection path

subCollection : String -> PathBuilder DocumentType -> PathBuilder CollectionType

A sub-collection path

document : String -> PathBuilder CollectionType -> PathBuilder DocumentType

A document path

build : PathBuilder a -> Result Error (Path a)

Validates PathBuilder and converts it into Path if it is valid.

CRUDs

type alias Document a =
{ name : Name
, fields : a
, createTime : Posix
, updateTime : Posix
}

A record structure for a document fetched from Firestore.

type alias Documents a =
{ documents : List (Document a)
, nextPageToken : Maybe PageToken
}

A record structure composed of multiple documents fetched from Firestore.

type Name

Name field of Firestore document

id : Name -> String

Extracts ID from Name field

get : Decoder a -> Path (DocumentPath b) -> Task Error (Document a)

Gets a single document.

-> Path (CollectionPath b)
-> Task Error (Documents a)

Lists documents.

-> { id : String
, document : Encoder
}
-> Path (CollectionPath b)
-> Task Error (Document a)

Creates a document with a given document id.

Takes the document id as the first argument.

-> Path (CollectionPath b)
-> Task Error (Document a)

Insert a document into a collection.

The document will get a fresh document id.

-> Path (DocumentPath b)
-> Task Error (Document a)

Updates an existing document.

Creates one if not present.

-> Path (DocumentPath b)
-> Task Error (Document a)

Updates only specific fields.

If the fields do not exists, they will be created.

delete : Path (DocumentPath a) -> Task Error ()

Deletes a document.

Will succeed if document does not exist.

deleteExisting : Path (DocumentPath a) -> Task Error ()

Deletes a document.

Will fail if document does not exist.

Query

type alias Query a =
{ transaction : Maybe TransactionId
, document : Document a
, readTime : Posix
, skippedResults : Int
}

A record structure for query operation result

-> Query
-> Path (QueriablePath b)
-> Task Error (List (Query a))

Runs a query operation

This opeartion only accepts a path built with root or document.

Error

type Error
= Path_ PathError
| Http_ Error
| Response FirestoreError

An error type

This type is available in order to disregard type of errors between protocol related errors as Http_ or backend related errors as Response.

type alias FirestoreError =
{ code : Int
, message : String
, status : String
}

Data structure for errors from Firestore

= InvalidPath String

An error type for invalid path

Transaction

Data type for Transaction

Transaction ID

type alias CommitTime =
Posix

A time transaction commited at

Starts a new transaction.

commit : Firestore -> Transaction -> Task Error CommitTime

Commits a transaction, while optionally updating and deleting documents.

Only readWrite transaction is currently supported which requires authorization that can be set via Config.withAuthorization function. Transaction in Firetore works in a pattern of "unit of work". It requires sets of updates and deletes to be commited.

model.firestore
    |> Firestore.begin
    |> Task.map
        (\transaction ->
            transaction
                |> Firestore.updateTx user1 newUser1
                |> Firestore.deleteTx user2
        )
    |> Firestore.commit
    |> Task.attempt Commited
-> Decoder a
-> Path (DocumentPath b)
-> Task Error (Document a)

Gets a single document in transaction

-> Decoder a
-> Path (CollectionPath b)
-> Task Error (Documents a)

Lists documents in transaction

-> Decoder a
-> Query
-> Path (QueriablePath b)
-> Task Error (List (Query a))

Runs a query operation in transaction

This works as almost the same as runQuery function, but the difference is that this function accepts transaction.

updateTx : Path (DocumentPath a) -> Encoder -> Transaction -> Transaction

Adds update into the transaction

deleteTx : Path (DocumentPath a) -> Transaction -> Transaction

Adds deletion into the transaction