Packages

phoenix_kit

1.7.205
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 v39.ex
Raw

lib/phoenix_kit/migrations/postgres/v39.ex

defmodule PhoenixKit.Migrations.Postgres.V39 do
@moduledoc """
PhoenixKit V39 Migration: Admin Notes System
Adds a notes system for administrators to record internal notes about users.
These notes are only visible to admins and serve as admin-to-admin communication.
## Changes
### Admin Notes Table (phoenix_kit_admin_notes)
- Internal notes that admins can write about users
- Tracks which admin wrote each note
- Full edit history with updated_at timestamps
- Any admin can view/edit/delete any note
## Features
- Simple text-based notes
- Author tracking for accountability
- Efficient indexes for user and author lookups
- Timestamps for audit trail
"""
use Ecto.Migration
@doc """
Run the V39 migration to add admin notes system.
"""
def up(%{prefix: prefix} = _opts) do
create_admin_notes_table(prefix)
execute("COMMENT ON TABLE #{prefix_table_name("phoenix_kit", prefix)} IS '39'")
end
@doc """
Rollback the V39 migration.
"""
def down(%{prefix: prefix} = _opts) do
drop_if_exists(table(:phoenix_kit_admin_notes, prefix: prefix))
execute("COMMENT ON TABLE #{prefix_table_name("phoenix_kit", prefix)} IS '38'")
end
defp create_admin_notes_table(prefix) do
create_if_not_exists table(:phoenix_kit_admin_notes, prefix: prefix) do
# User being noted about
add(
:user_id,
references(:phoenix_kit_users, on_delete: :delete_all, prefix: prefix, type: :bigint),
null: false
)
# Admin who wrote the note
add(
:author_id,
references(:phoenix_kit_users, on_delete: :delete_all, prefix: prefix, type: :bigint),
null: false
)
# Note content
add(:content, :text, null: false)
timestamps(type: :naive_datetime)
end
# Index for fetching notes about a user (most common query)
create_if_not_exists(index(:phoenix_kit_admin_notes, [:user_id], prefix: prefix))
# Index for fetching notes by an author
create_if_not_exists(index(:phoenix_kit_admin_notes, [:author_id], prefix: prefix))
# Index for ordering by creation time
create_if_not_exists(index(:phoenix_kit_admin_notes, [:inserted_at], prefix: prefix))
execute("""
COMMENT ON TABLE #{prefix_table_name("phoenix_kit_admin_notes", prefix)} IS
'Internal admin notes about users (admin-to-admin communication)'
""")
end
defp prefix_table_name(table_name, nil), do: table_name
defp prefix_table_name(table_name, prefix), do: "#{prefix}.#{table_name}"
end