Creates or removes Ithibati's versioned database schema from an application migration.
defmodule MyApp.Repo.Migrations.AddIthibati do
use Ecto.Migration
def up, do: Ithibati.Migration.up(version: 2)
def down, do: Ithibati.Migration.down(version: 2)
endUse explicit up/0 and down/0, not change/0: catalogue checks flush queued DDL and
cannot be reversed automatically by Ecto.
Create the account table and identifier column first. If invitations are configured, their
table must also exist when up/1 validates the application tables.
Options
:version— required target schema version supported by the installed release.:from— existing version, exclusive; defaults to0. A later upgrade uses a new application migration with the original version as:from.
Keep versions pinned in applied migrations. current_version/0 reports the newest version
this release supports. down/1 removes the changes covered by the matching range.
Version 3 adds the operator-code digest table used by protected first claims.
Table names and account foreign-key types come from the configured schemas. up/1 verifies
required columns, key types and unique indexes before creating its tables. The application
continues to own its account and invitation tables.
Getting started shows initial setup; Configuration and schemas covers index ownership and upgrades.
Summary
Functions
The newest schema version this release knows.
Removes what the matching up/1 built.
Adds the required invitation columns inside an application's create table block.
Creates or verifies the invitation table's unique token_hash index.
Adds the inviter column to an invitation table that was created before version 4.
Builds Ithibati's tables. See the module documentation for options.
Functions
The newest schema version this release knows.
Removes what the matching up/1 built.
Adds the required invitation columns inside an application's create table block.
The configured invitation schema supplies the identifier field name. version: is required
and must name a supported schema version.
create table(:invitations) do
Ithibati.Migration.invitation_columns(version: 1)
add :role, :string
timestamps(type: :utc_datetime_usec)
endDeclare field :role, Ecto.Enum, values: [:admin, :author] in the application's Ecto schema
when using that string column as an enum.
The helper adds:
- the identifier,
:stringby default,null: false :token_hash,:binary,null: false:expires_at,:utc_datetime_usec,null: false:accepted_at,:utc_datetime_usec, nullable for pending invitations
The schema's virtual :token is not stored. Add application-specific fields and timestamps
separately. :type overrides only the identifier's database type and is passed to
Ecto.Migration.add/3. For type: :citext, install the PostgreSQL extension first.
See the invitation guide for setup and type choices.
up/1 also validates existing invitation tables.
This function does not create the token index; use invitation_index/1 when adding invitations
after Ithibati's initial migration.
Creates or verifies the invitation table's unique token_hash index.
Use this when adding invitations after Ithibati's initial migration has already run.
version: is required, and the configured invitation table must exist.
defmodule MyApp.Repo.Migrations.AddInvitations do
use Ecto.Migration
def change do
create table(:invitations) do
Ithibati.Migration.invitation_columns(version: 1)
timestamps(type: :utc_datetime_usec)
end
Ithibati.Migration.invitation_index(version: 1)
end
endup/1 also maintains this index. Both paths create it only when absent and verify its
uniqueness. If the schema uses unique_index: false, the application must create the index;
this call checks it without creating it.
Adds the inviter column to an invitation table that was created before version 4.
For an application that turned invitations on earlier. A table created with
invitation_columns(version: 4) already has it. The column type follows users_key_type,
which is why this exists rather than a line in the guide: an application that guessed
:binary_id against a :id account table would only find out at the first invitation.
defmodule MyApp.Repo.Migrations.AddInvitedBy do
use Ecto.Migration
def change do
alter table(:invitations) do
Ithibati.Migration.invitation_inviter_column(version: 4)
end
end
endNullable, and Ithibati writes no foreign key: rows written before the column existed have no inviter, and whether one is enforced is the application's to decide about its own table.
Builds Ithibati's tables. See the module documentation for options.