feat(email): require verified approval email

Backfill approved legacy users with verified emails and replace the old unverified-email warning setting with a single approval email policy.
This commit is contained in:
2026-05-06 22:12:23 +08:00
parent a17a913618
commit ce55cfc6b3
18 changed files with 328 additions and 55 deletions
@@ -0,0 +1,31 @@
from __future__ import annotations
from sqlalchemy import text
from sqlalchemy.engine import Connection
def _table_columns(conn: Connection, table_name: str) -> set[str]:
rows = conn.execute(text(f"PRAGMA table_info({table_name})")).fetchall()
return {str(row[1]) for row in rows}
def apply(conn: Connection) -> None:
columns = _table_columns(conn, "email_notification_settings")
if "require_verified_email_for_approval" not in columns:
conn.execute(
text(
"ALTER TABLE email_notification_settings "
"ADD COLUMN require_verified_email_for_approval BOOLEAN NOT NULL DEFAULT 1"
)
)
conn.commit()
columns = _table_columns(conn, "email_notification_settings")
if "warn_unverified_email_before_approval" in columns:
conn.execute(
text(
"ALTER TABLE email_notification_settings "
"DROP COLUMN warn_unverified_email_before_approval"
)
)
conn.commit()