# `Letterbox.Migrations`
[🔗](https://github.com/hattoriai/letterbox/blob/v0.1.0-rc.0/lib/letterbox/migrations.ex#L1)

The table of Letterbox, in a migration of the app.

    $ mix letterbox.gen.migration

writes a migration that pins the latest version:

    defmodule MyApp.Repo.Migrations.AddLetterbox do
      use Ecto.Migration

      def up, do: Letterbox.Migrations.up(version: 1)
      def down, do: Letterbox.Migrations.down(to: 0)
    end

The versions are `PhoenixMountable.Migrations`: tracked in the app's
database (per prefix), and run on PostgreSQL and on SQLite. A later
version of Letterbox that changes the table has a new version, and
`mix letterbox.gen.migration` writes the migration that upgrades.

Version 1 makes `letterbox_inbound`: a message a row (`Letterbox.Inbound`),
one for each provider's id (a webhook delivered twice is one message).

`up/1` takes `:version` and `:prefix` (the schema of the table, in
PostgreSQL); `down/1` takes `:to` and `:prefix`.

# `check`

`:ok`, `{:pending, message}` or `{:outdated, message}`. Takes `:repo` and `:prefix`.

# `down`

Rolls the library's tables back to `:to` (default `0`). Call it from a host migration.

# `latest_version`

The latest version of the library's schema.

# `migrated_version`

The version the database is at (`0` when not installed).

# `run_backfills`

Runs deferred backfills to completion. Takes `:repo` and `:prefix`.

# `status`

The version, compatibility and backfills of a database. Takes `:repo` and `:prefix`.

# `up`

Migrates the library's tables up. Call it from a host migration.

# `verify`

Checks the tables against the library's schema. Takes `:repo` and `:prefix`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
