Packages
phoenix_kit
1.7.21
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/phoenix_kit.gen.migration.ex
defmodule Mix.Tasks.PhoenixKit.Gen.Migration do
use Mix.Task
@moduledoc """
Generate PhoenixKit migration in parent application.
This task generates a new migration file with PhoenixKit tables
that can be customized before running.
## Usage
mix phoenix_kit.gen.migration
## Options
* `--table-prefix` - Custom prefix for tables (default: "phoenix_kit")
## Examples
# Generate with default phoenix_kit_users prefix
mix phoenix_kit.gen.migration
# Generate with custom prefix
mix phoenix_kit.gen.migration --table-prefix users
"""
@shortdoc "Generate PhoenixKit migration"
@impl Mix.Task
def run(args) do
opts = parse_args(args)
table_prefix = opts[:table_prefix] || "phoenix_kit"
timestamp = generate_timestamp()
filename = "#{timestamp}_create_#{table_prefix}_tables.exs"
path = Path.join("priv/repo/migrations", filename)
File.mkdir_p!("priv/repo/migrations")
migration_content = generate_migration_content(table_prefix)
File.write!(path, migration_content)
IO.puts("✅ Generated migration: #{filename}")
IO.puts("Run: mix ecto.migrate")
end
defp parse_args(args) do
{opts, _, _} = OptionParser.parse(args, switches: [table_prefix: :string])
opts
end
defp generate_timestamp do
{{year, month, day}, {hour, minute, second}} = :calendar.universal_time()
:io_lib.format(
"~4..0B~2..0B~2..0B~2..0B~2..0B~2..0B",
[year, month, day, hour, minute, second]
)
|> to_string()
end
defp generate_migration_content(table_prefix) do
module_name = Macro.camelize("create_#{table_prefix}_tables")
# For default phoenix_kit prefix, use phoenix_kit_users/phoenix_kit_users_tokens
# For custom prefixes, use prefix/prefix_tokens
{users_table, tokens_table} =
if table_prefix == "phoenix_kit" do
{"phoenix_kit_users", "phoenix_kit_users_tokens"}
else
{table_prefix, "#{table_prefix}_tokens"}
end
"""
defmodule #{Mix.Phoenix.context_app()}.Repo.Migrations.#{module_name} do
use Ecto.Migration
def change do
execute "CREATE EXTENSION IF NOT EXISTS citext", ""
create table(:#{users_table}) do
add :email, :citext, null: false
add :hashed_password, :string, null: false
add :confirmed_at, :naive_datetime
timestamps()
end
create unique_index(:#{users_table}, [:email])
create table(:#{tokens_table}) do
add :user_id, references(:#{users_table}, on_delete: :delete_all), null: false
add :token, :binary, null: false
add :context, :string, null: false
add :sent_to, :string
timestamps(updated_at: false)
end
create index(:#{tokens_table}, [:user_id])
create unique_index(:#{tokens_table}, [:context, :token])
end
end
"""
end
end