Packages

phoenix_kit

1.7.90
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
phoenix_kit lib phoenix_kit migrations postgres v10.ex
Raw

lib/phoenix_kit/migrations/postgres/v10.ex

defmodule PhoenixKit.Migrations.Postgres.V10 do
@moduledoc """
PhoenixKit V10 Migration: User Registration Analytics
This migration adds user registration analytics functionality to track geographical
and technical information about user registrations for statistics and insights.
## Changes
### User Analytics Columns
- Adds registration analytics columns to phoenix_kit_users table
- Creates indexes for efficient analytics queries
- Supports IP address tracking with privacy-focused design
- Provides geographical data (country, region, city)
### New Features
- **Registration Analytics**: Track IP and location data directly on user records
- **Privacy Focused**: Designed for easy data purging and compliance
- **Performance Optimized**: Efficient indexes for analytics queries
- **Simplified Data Model**: Analytics data stored directly with user records
- **Audit Trail**: Registration analytics linked to user accounts
## PostgreSQL Support
- Supports PostgreSQL prefix for schema isolation
- Uses string type for IP address storage (IPv4/IPv6 compatible)
- Optimized indexes for common analytics queries
- No additional foreign key constraints needed
"""
use Ecto.Migration
@doc """
Run the V10 migration to add user registration analytics.
"""
def up(%{prefix: prefix} = _opts) do
# Add registration analytics columns to existing phoenix_kit_users table
alter table(:phoenix_kit_users, prefix: prefix) do
# Registration IP address (stored as string for IPv4/IPv6 compatibility)
add :registration_ip, :string, size: 45, null: true
# Geographic information (ISO codes and names)
# ISO 3166-1 alpha-2 country code
add :registration_country, :string, size: 2, null: true
# State/province/region name
add :registration_region, :string, size: 100, null: true
# City name
add :registration_city, :string, size: 100, null: true
end
# Create indexes for efficient analytics queries on users table
# Geographic analytics queries
create_if_not_exists index(:phoenix_kit_users, [:registration_country, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_country_date_idx
)
create_if_not_exists index(:phoenix_kit_users, [:registration_region, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_region_date_idx
)
create_if_not_exists index(:phoenix_kit_users, [:registration_city, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_city_date_idx
)
# IP-based queries (for rate limiting and security)
create_if_not_exists index(:phoenix_kit_users, [:registration_ip, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_ip_date_idx
)
# Composite index for geographic distribution queries
create_if_not_exists index(
:phoenix_kit_users,
[:registration_country, :registration_region, :registration_city],
prefix: prefix,
name: :phoenix_kit_users_reg_geo_idx
)
# Set version comment on phoenix_kit table for version tracking
execute "COMMENT ON TABLE #{prefix_table_name("phoenix_kit", prefix)} IS '10'"
end
@doc """
Rollback the V10 migration.
"""
def down(%{prefix: prefix} = _opts) do
# Drop indexes first
drop_if_exists index(
:phoenix_kit_users,
[:registration_country, :registration_region, :registration_city],
prefix: prefix,
name: :phoenix_kit_users_reg_geo_idx
)
drop_if_exists index(:phoenix_kit_users, [:registration_ip, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_ip_date_idx
)
drop_if_exists index(:phoenix_kit_users, [:registration_city, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_city_date_idx
)
drop_if_exists index(:phoenix_kit_users, [:registration_region, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_region_date_idx
)
drop_if_exists index(:phoenix_kit_users, [:registration_country, :inserted_at],
prefix: prefix,
name: :phoenix_kit_users_reg_country_date_idx
)
# Remove analytics columns from users table
alter table(:phoenix_kit_users, prefix: prefix) do
remove :registration_city
remove :registration_region
remove :registration_country
remove :registration_ip
end
# Update version comment on phoenix_kit table
execute "COMMENT ON TABLE #{prefix_table_name("phoenix_kit", prefix)} IS '9'"
end
# Helper function to build table name with prefix
defp prefix_table_name(table_name, nil), do: table_name
defp prefix_table_name(table_name, prefix), do: "#{prefix}.#{table_name}"
end