IzumiSy/elm-firestore/11.0.1

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 pathType

A path type

firestore
    |> Firestore.root
    |> Firestore.collection "users"
    |> Firestore.document "user0"
    |> Firestore.subCollection "tags"
    |> Firestore.list tagDecoder ListOptions.default
    |> Task.attempt GotUserItemTags
root : Firestore -> Path RootType

A root path

collection : String -> Path RootType -> Path CollectionType

A collection path

subCollection : String -> Path DocumentType -> Path CollectionType

A sub-collection path

document : String -> Path CollectionType -> Path DocumentType

A document path

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
= 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

Transaction

Data type for Transaction

Transaction ID

type alias CommitTime =
Posix

A time transaction commited at

Starts a new transaction.

commit : Transaction -> Firestore -> 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.commit
        (transaction
            |> Firestore.updateTx "users/user1" newUser1
            |> Firestore.updateTx "users/user2" newUser2
            |> Firestore.deleteTx "users/user3"
            |> Firestore.deleteTx "users/user4"
        )
    |> 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.

Adds update into the transaction

Adds deletion into the transaction