Packages

phoenix_kit

1.7.151
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 v94.ex
Raw

lib/phoenix_kit/migrations/postgres/v94.ex

defmodule PhoenixKit.Migrations.Postgres.V94 do
@moduledoc """
V94: Add Google Drive metadata columns to Document Creator tables.
Adds columns needed for local DB mirroring of Google Drive file metadata:
- `google_doc_id` (VARCHAR(255)) on templates, documents, and headers_footers
- `status` (VARCHAR(20), DEFAULT 'published') on documents (templates already have it)
- `path` (VARCHAR(500)) on templates and documents for the accepted folder path
- `folder_id` (VARCHAR(255)) on templates and documents for the accepted parent folder
- Partial unique indexes on `google_doc_id WHERE google_doc_id IS NOT NULL`
All operations are idempotent.
"""
use Ecto.Migration
def up(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
schema = if prefix == "public", do: "public", else: prefix
# 1. Add google_doc_id to phoenix_kit_doc_templates
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_templates'
AND column_name = 'google_doc_id'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_templates
ADD COLUMN google_doc_id VARCHAR(255);
END IF;
END $$;
""")
# 2. Add google_doc_id to phoenix_kit_doc_documents
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_documents'
AND column_name = 'google_doc_id'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_documents
ADD COLUMN google_doc_id VARCHAR(255);
END IF;
END $$;
""")
# 3. Add status to phoenix_kit_doc_documents
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_documents'
AND column_name = 'status'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_documents
ADD COLUMN status VARCHAR(20) DEFAULT 'published';
END IF;
END $$;
""")
# 4. Add path to phoenix_kit_doc_templates
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_templates'
AND column_name = 'path'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_templates
ADD COLUMN path VARCHAR(500);
END IF;
END $$;
""")
# 5. Add folder_id to phoenix_kit_doc_templates
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_templates'
AND column_name = 'folder_id'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_templates
ADD COLUMN folder_id VARCHAR(255);
END IF;
END $$;
""")
# 6. Add path to phoenix_kit_doc_documents
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_documents'
AND column_name = 'path'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_documents
ADD COLUMN path VARCHAR(500);
END IF;
END $$;
""")
# 7. Add folder_id to phoenix_kit_doc_documents
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_documents'
AND column_name = 'folder_id'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_documents
ADD COLUMN folder_id VARCHAR(255);
END IF;
END $$;
""")
# 8. Add google_doc_id to phoenix_kit_doc_headers_footers
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = '#{schema}'
AND table_name = 'phoenix_kit_doc_headers_footers'
AND column_name = 'google_doc_id'
) THEN
ALTER TABLE #{p}phoenix_kit_doc_headers_footers
ADD COLUMN google_doc_id VARCHAR(255);
END IF;
END $$;
""")
# 9. Partial unique indexes on google_doc_id (only for non-null values)
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM pg_indexes
WHERE schemaname = '#{schema}'
AND tablename = 'phoenix_kit_doc_templates'
AND indexname = 'phoenix_kit_doc_templates_google_doc_id_unique_idx'
) THEN
CREATE UNIQUE INDEX phoenix_kit_doc_templates_google_doc_id_unique_idx
ON #{p}phoenix_kit_doc_templates (google_doc_id)
WHERE google_doc_id IS NOT NULL;
END IF;
END $$;
""")
execute("""
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM pg_indexes
WHERE schemaname = '#{schema}'
AND tablename = 'phoenix_kit_doc_documents'
AND indexname = 'phoenix_kit_doc_documents_google_doc_id_unique_idx'
) THEN
CREATE UNIQUE INDEX phoenix_kit_doc_documents_google_doc_id_unique_idx
ON #{p}phoenix_kit_doc_documents (google_doc_id)
WHERE google_doc_id IS NOT NULL;
END IF;
END $$;
""")
# 10. Status index on documents
create_if_not_exists(index(:phoenix_kit_doc_documents, [:status], prefix: prefix))
execute("COMMENT ON TABLE #{p}phoenix_kit IS '94'")
end
def down(opts) do
prefix = Map.get(opts, :prefix, "public")
p = prefix_str(prefix)
drop_if_exists(index(:phoenix_kit_doc_documents, [:status], prefix: prefix))
execute("DROP INDEX IF EXISTS #{p}phoenix_kit_doc_documents_google_doc_id_unique_idx")
execute("DROP INDEX IF EXISTS #{p}phoenix_kit_doc_templates_google_doc_id_unique_idx")
execute("ALTER TABLE #{p}phoenix_kit_doc_headers_footers DROP COLUMN IF EXISTS google_doc_id")
execute("ALTER TABLE #{p}phoenix_kit_doc_documents DROP COLUMN IF EXISTS folder_id")
execute("ALTER TABLE #{p}phoenix_kit_doc_documents DROP COLUMN IF EXISTS path")
execute("ALTER TABLE #{p}phoenix_kit_doc_documents DROP COLUMN IF EXISTS status")
execute("ALTER TABLE #{p}phoenix_kit_doc_documents DROP COLUMN IF EXISTS google_doc_id")
execute("ALTER TABLE #{p}phoenix_kit_doc_templates DROP COLUMN IF EXISTS folder_id")
execute("ALTER TABLE #{p}phoenix_kit_doc_templates DROP COLUMN IF EXISTS path")
execute("ALTER TABLE #{p}phoenix_kit_doc_templates DROP COLUMN IF EXISTS google_doc_id")
execute("COMMENT ON TABLE #{p}phoenix_kit IS '93'")
end
defp prefix_str("public"), do: "public."
defp prefix_str(prefix), do: "#{prefix}."
end