-- Migration 016: Password Reset Tokens -- Adds table for password reset token storage (hashed, single-use, short-lived). CREATE TABLE IF NOT EXISTS shared.password_reset_tokens ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID NOT NULL REFERENCES shared.users(id) ON DELETE CASCADE, token_hash VARCHAR(255) UNIQUE NOT NULL, expires_at TIMESTAMPTZ NOT NULL, used_at TIMESTAMPTZ, created_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_password_reset_tokens_hash ON shared.password_reset_tokens(token_hash); CREATE INDEX IF NOT EXISTS idx_password_reset_tokens_user ON shared.password_reset_tokens(user_id); -- Also ensure email_log table exists (may not exist if migration 015 hasn't been applied) CREATE TABLE IF NOT EXISTS shared.email_log ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), to_email VARCHAR(255) NOT NULL, subject VARCHAR(500) NOT NULL, body TEXT, template VARCHAR(100), metadata JSONB, sent_at TIMESTAMPTZ DEFAULT NOW() );