CREATE TABLE IF NOT EXISTS auth_email_bind_requests ( id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, email VARCHAR(255) NOT NULL, token VARCHAR(255) UNIQUE NOT NULL, expires_at TIMESTAMPTZ NOT NULL, used_at TIMESTAMPTZ NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT auth_email_bind_requests_email_not_empty CHECK (length(trim(email)) > 0) ); CREATE UNIQUE INDEX IF NOT EXISTS idx_auth_email_bind_requests_user_unused ON auth_email_bind_requests(user_id) WHERE used_at IS NULL; CREATE INDEX IF NOT EXISTS idx_auth_email_bind_requests_expires_at ON auth_email_bind_requests(expires_at);