Add invite email templates and delivery workflow
This commit is contained in:
@@ -210,6 +210,7 @@ def init_db() -> None:
|
||||
use_count INTEGER NOT NULL DEFAULT 0,
|
||||
enabled INTEGER NOT NULL DEFAULT 1,
|
||||
expires_at TEXT,
|
||||
recipient_email TEXT,
|
||||
created_by TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
@@ -362,6 +363,10 @@ def init_db() -> None:
|
||||
conn.execute("ALTER TABLE users ADD COLUMN invited_at TEXT")
|
||||
except sqlite3.OperationalError:
|
||||
pass
|
||||
try:
|
||||
conn.execute("ALTER TABLE signup_invites ADD COLUMN recipient_email TEXT")
|
||||
except sqlite3.OperationalError:
|
||||
pass
|
||||
try:
|
||||
conn.execute(
|
||||
"""
|
||||
@@ -1063,9 +1068,10 @@ def _row_to_signup_invite(row: Any) -> Dict[str, Any]:
|
||||
"use_count": use_count,
|
||||
"enabled": bool(row[8]),
|
||||
"expires_at": expires_at,
|
||||
"created_by": row[10],
|
||||
"created_at": row[11],
|
||||
"updated_at": row[12],
|
||||
"recipient_email": row[10],
|
||||
"created_by": row[11],
|
||||
"created_at": row[12],
|
||||
"updated_at": row[13],
|
||||
"is_expired": is_expired,
|
||||
"remaining_uses": remaining_uses,
|
||||
"is_usable": bool(row[8]) and not is_expired and (remaining_uses is None or remaining_uses > 0),
|
||||
@@ -1077,7 +1083,7 @@ def list_signup_invites() -> list[Dict[str, Any]]:
|
||||
rows = conn.execute(
|
||||
"""
|
||||
SELECT id, code, label, description, profile_id, role, max_uses, use_count, enabled,
|
||||
expires_at, created_by, created_at, updated_at
|
||||
expires_at, recipient_email, created_by, created_at, updated_at
|
||||
FROM signup_invites
|
||||
ORDER BY created_at DESC, id DESC
|
||||
"""
|
||||
@@ -1090,7 +1096,7 @@ def get_signup_invite_by_id(invite_id: int) -> Optional[Dict[str, Any]]:
|
||||
row = conn.execute(
|
||||
"""
|
||||
SELECT id, code, label, description, profile_id, role, max_uses, use_count, enabled,
|
||||
expires_at, created_by, created_at, updated_at
|
||||
expires_at, recipient_email, created_by, created_at, updated_at
|
||||
FROM signup_invites
|
||||
WHERE id = ?
|
||||
""",
|
||||
@@ -1106,7 +1112,7 @@ def get_signup_invite_by_code(code: str) -> Optional[Dict[str, Any]]:
|
||||
row = conn.execute(
|
||||
"""
|
||||
SELECT id, code, label, description, profile_id, role, max_uses, use_count, enabled,
|
||||
expires_at, created_by, created_at, updated_at
|
||||
expires_at, recipient_email, created_by, created_at, updated_at
|
||||
FROM signup_invites
|
||||
WHERE code = ? COLLATE NOCASE
|
||||
""",
|
||||
@@ -1127,6 +1133,7 @@ def create_signup_invite(
|
||||
max_uses: Optional[int] = None,
|
||||
enabled: bool = True,
|
||||
expires_at: Optional[str] = None,
|
||||
recipient_email: Optional[str] = None,
|
||||
created_by: Optional[str] = None,
|
||||
) -> Dict[str, Any]:
|
||||
timestamp = datetime.now(timezone.utc).isoformat()
|
||||
@@ -1135,9 +1142,9 @@ def create_signup_invite(
|
||||
"""
|
||||
INSERT INTO signup_invites (
|
||||
code, label, description, profile_id, role, max_uses, use_count, enabled,
|
||||
expires_at, created_by, created_at, updated_at
|
||||
expires_at, recipient_email, created_by, created_at, updated_at
|
||||
)
|
||||
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?, ?)
|
||||
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?, ?, ?)
|
||||
""",
|
||||
(
|
||||
code,
|
||||
@@ -1148,6 +1155,7 @@ def create_signup_invite(
|
||||
max_uses,
|
||||
1 if enabled else 0,
|
||||
expires_at,
|
||||
recipient_email,
|
||||
created_by,
|
||||
timestamp,
|
||||
timestamp,
|
||||
@@ -1171,6 +1179,7 @@ def update_signup_invite(
|
||||
max_uses: Optional[int],
|
||||
enabled: bool,
|
||||
expires_at: Optional[str],
|
||||
recipient_email: Optional[str],
|
||||
) -> Optional[Dict[str, Any]]:
|
||||
timestamp = datetime.now(timezone.utc).isoformat()
|
||||
with _connect() as conn:
|
||||
@@ -1178,7 +1187,7 @@ def update_signup_invite(
|
||||
"""
|
||||
UPDATE signup_invites
|
||||
SET code = ?, label = ?, description = ?, profile_id = ?, role = ?, max_uses = ?,
|
||||
enabled = ?, expires_at = ?, updated_at = ?
|
||||
enabled = ?, expires_at = ?, recipient_email = ?, updated_at = ?
|
||||
WHERE id = ?
|
||||
""",
|
||||
(
|
||||
@@ -1190,6 +1199,7 @@ def update_signup_invite(
|
||||
max_uses,
|
||||
1 if enabled else 0,
|
||||
expires_at,
|
||||
recipient_email,
|
||||
timestamp,
|
||||
invite_id,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user