Search documentation of phoenix_kit

# PhoenixKit.Migrations.UUIDRepair (phoenix_kit v1.7.87)

Copy Markdown View Source

Repairs missing UUID columns for databases upgrading from PhoenixKit < 1.7.0.

## Problem

PhoenixKit 1.7.x added UUID columns to all legacy tables in migration V40. However, some migrations before V40 (e.g., V31) use Ecto schemas that expect the `uuid` column to exist. This creates a chicken-and-egg problem for users upgrading from older versions.

## Solution

This module detects the condition and adds UUID columns BEFORE running migrations, ensuring V31+ can use Ecto schemas without errors.

Creates the `uuid_generate_v7()` PostgreSQL function (same as V40) and uses it for all UUID column defaults and backfills, ensuring UUIDv7 consistency from the start. V40 later runs `CREATE OR REPLACE` which is a safe no-op.

## When It Runs

Called automatically by `mix phoenix_kit.update` when:

1. Current database version is < 40
2. Tables exist but are missing uuid columns

## Tables Affected

Only repairs tables that:

1. Exist in the database
2. Are missing the uuid column
3. Are used by Ecto schemas in migrations before V40

Primary tables:

- phoenix_kit_users (used by all auth operations)
- phoenix_kit_users_tokens (used by login/registration)
- phoenix_kit_user_roles (used by role system)
- phoenix_kit_user_role_assignments (used by role system)
- phoenix_kit_settings (used by V35, V36)
- phoenix_kit_email_templates (used by V31)

## Summary

### Functions

maybe_repair(opts \\ [])

Checks if UUID repair is needed and performs it if necessary.

needs_repair?(opts \\ [])

Checks if repair is needed without performing it.

## Functions

# maybe_repair(opts \\ [])

Checks if UUID repair is needed and performs it if necessary.

Returns:

- `{:ok, :not_needed}` - No repair needed (fresh install or already has uuid)
- `{:ok, :repaired}` - Repair was performed successfully
- `{:error, reason}` - Repair failed

# needs_repair?(opts \\ [])

Checks if repair is needed without performing it.

Useful for dry-run or status checks.