-- Create verification_tokens table for email verification CREATE TABLE IF NOT EXISTS verification_tokens ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), token_hash VARCHAR(64) NOT NULL UNIQUE, user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, expires_at TIMESTAMP WITH TIME ZONE NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create indexes for performance CREATE INDEX IF NOT EXISTS idx_verification_tokens_token_hash ON verification_tokens(token_hash); CREATE INDEX IF NOT EXISTS idx_verification_tokens_user_id ON verification_tokens(user_id); CREATE INDEX IF NOT EXISTS idx_verification_tokens_expires_at ON verification_tokens(expires_at); -- Create function to clean up expired tokens CREATE OR REPLACE FUNCTION cleanup_expired_verification_tokens() RETURNS void AS $$ BEGIN DELETE FROM verification_tokens WHERE expires_at < NOW(); END; $$ LANGUAGE plpgsql;