84 lines
2.1 KiB
Python
84 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
from __future__ import annotations
|
|
|
|
import db_pool
|
|
|
|
|
|
def _to_bool_with_default(value, default: bool = True) -> bool:
|
|
if value is None:
|
|
return default
|
|
try:
|
|
return bool(int(value))
|
|
except Exception:
|
|
try:
|
|
return bool(value)
|
|
except Exception:
|
|
return default
|
|
|
|
|
|
def _normalize_notify_enabled(enabled) -> int:
|
|
if isinstance(enabled, bool):
|
|
return 1 if enabled else 0
|
|
try:
|
|
return 1 if int(enabled) else 0
|
|
except Exception:
|
|
return 1
|
|
|
|
|
|
def get_user_by_email(email):
|
|
"""根据邮箱获取用户"""
|
|
with db_pool.get_db() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("SELECT * FROM users WHERE email = ?", (email,))
|
|
user = cursor.fetchone()
|
|
return dict(user) if user else None
|
|
|
|
|
|
def update_user_email(user_id, email, verified=False):
|
|
"""更新用户邮箱"""
|
|
with db_pool.get_db() as conn:
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute(
|
|
"""
|
|
UPDATE users
|
|
SET email = ?, email_verified = ?
|
|
WHERE id = ?
|
|
""",
|
|
(email, 1 if verified else 0, user_id),
|
|
)
|
|
conn.commit()
|
|
return cursor.rowcount > 0
|
|
|
|
|
|
def update_user_email_notify(user_id, enabled):
|
|
"""更新用户邮件通知偏好"""
|
|
with db_pool.get_db() as conn:
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute(
|
|
"""
|
|
UPDATE users
|
|
SET email_notify_enabled = ?
|
|
WHERE id = ?
|
|
""",
|
|
(_normalize_notify_enabled(enabled), user_id),
|
|
)
|
|
conn.commit()
|
|
return cursor.rowcount > 0
|
|
|
|
|
|
def get_user_email_notify(user_id):
|
|
"""获取用户邮件通知偏好(默认开启)"""
|
|
with db_pool.get_db() as conn:
|
|
cursor = conn.cursor()
|
|
try:
|
|
cursor.execute("SELECT email_notify_enabled FROM users WHERE id = ?", (user_id,))
|
|
row = cursor.fetchone()
|
|
if row is None:
|
|
return True
|
|
return _to_bool_with_default(row[0], default=True)
|
|
except Exception:
|
|
return True
|