Packages

phoenix_kit

1.5.2
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 v13.ex
Raw

lib/phoenix_kit/migrations/postgres/v13.ex

defmodule PhoenixKit.Migrations.Postgres.V13 do
@moduledoc """
PhoenixKit V13 Migration: Enhanced Email Tracking with AWS SES Integration
This migration enhances the email tracking system to support comprehensive
AWS SES event types and improved message ID synchronization.
## Changes
### Email Log Enhancements
- Adds aws_message_id column for improved AWS SES message correlation
- Adds timestamp columns for detailed event tracking (bounced_at, complained_at, opened_at, clicked_at)
- Expands status enum to include all AWS SES event types
- Adds unique constraint on aws_message_id for duplicate prevention
### Email Event Enhancements
- Adds support for reject, delivery_delay, subscription, and rendering_failure events
- Adds specific fields for new event types (reject_reason, delay_type, subscription_type, failure_reason)
- Expands event_type enum validation
### New Event Types Supported
- **reject**: Email rejected by SES before sending
- **delivery_delay**: Temporary delivery delays
- **subscription**: List subscription/unsubscription events
- **rendering_failure**: Template rendering failures
### New Status Types
- **rejected**: Email rejected by SES
- **delayed**: Email delivery temporarily delayed
- **hard_bounced**: Permanent bounce (non-recoverable)
- **soft_bounced**: Temporary bounce (recoverable)
- **complaint**: Spam complaint received
## PostgreSQL Support
- Supports PostgreSQL prefix for schema isolation
- Uses proper timestamp types for event tracking
- Adds necessary constraints for data integrity
- Backward compatible with existing data
"""
use Ecto.Migration
@doc """
Run the V13 migration to enhance email tracking system.
"""
def up(%{prefix: prefix} = _opts) do
# Enhance phoenix_kit_email_logs table
alter table(:phoenix_kit_email_logs, prefix: prefix) do
# Add aws_message_id for improved correlation with AWS SES
add :aws_message_id, :string, null: true
# Add specific timestamp fields for different event types
add :bounced_at, :utc_datetime_usec, null: true
add :complained_at, :utc_datetime_usec, null: true
add :opened_at, :utc_datetime_usec, null: true
add :clicked_at, :utc_datetime_usec, null: true
end
# Add unique constraint on aws_message_id to prevent duplicates
create unique_index(:phoenix_kit_email_logs, [:aws_message_id],
prefix: prefix,
name: "phoenix_kit_email_logs_aws_message_id_index"
)
# Enhance phoenix_kit_email_events table
alter table(:phoenix_kit_email_events, prefix: prefix) do
# Add fields for new event types
add :reject_reason, :string, null: true
add :delay_type, :string, null: true
add :subscription_type, :string, null: true
add :failure_reason, :string, null: true
end
# Update status enum validation in application code will handle:
# sent, delivered, bounced, hard_bounced, soft_bounced, opened,
# clicked, failed, rejected, delayed, complaint
# Update event_type enum validation in application code will handle:
# send, delivery, bounce, complaint, open, click, reject,
# delivery_delay, subscription, rendering_failure
# Set version comment on phoenix_kit table for version tracking
execute "COMMENT ON TABLE #{prefix_table_name("phoenix_kit", prefix)} IS '13'"
end
@doc """
Rollback the V13 migration.
"""
def down(%{prefix: prefix} = _opts) do
# Remove unique constraint on aws_message_id
drop_if_exists unique_index(:phoenix_kit_email_logs, [:aws_message_id],
prefix: prefix,
name: "phoenix_kit_email_logs_aws_message_id_index"
)
# Remove enhancements from phoenix_kit_email_logs table
alter table(:phoenix_kit_email_logs, prefix: prefix) do
remove :aws_message_id
remove :bounced_at
remove :complained_at
remove :opened_at
remove :clicked_at
end
# Remove enhancements from phoenix_kit_email_events table
alter table(:phoenix_kit_email_events, prefix: prefix) do
remove :reject_reason
remove :delay_type
remove :subscription_type
remove :failure_reason
end
# Update version comment on phoenix_kit table
execute "COMMENT ON TABLE #{prefix_table_name("phoenix_kit", prefix)} IS '12'"
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