Files
wmailhub/migrations/0004_operation_logs_retain.sql
T
bigcode 8b255ef2e0 v2.5.0:操作日志 + 邮件保留 + 账号弹窗精简 + 复制按钮推广
- 操作日志:operation_logs 表(0004 迁移)记录 账号/域名/邮箱/Webhook 全部写操作,
  含操作账号(Console 登录名,系统动作为 system);/logs 日志页(类型筛选+搜索+分页);
  上限 10000 条,Cron housekeeping 超限删最旧
- 邮件保留:emails.retained;POST /api/emails/retain(单条/批量);
  TTL 清理与 Webhook 投递过期判定均跳过已保留;/inboxs 操作列图钉按钮 + 批量保留
- 添加账号弹窗:OAuth 与 API Token 同窗按钮组切换,去掉说明文字与账户 ID 字段
  (账户 ID 以 Token 实际所属账户为准);账号列表去掉 Email Worker 列
- 复制按钮推广:CopyText 组件;/domains 域名列、/inboxs 发件人与收件人(原「邮箱」改名)列
- 测试:104 bun tests(+10 日志/保留)、ui-smoke 35 项(+logs 页/新弹窗/复制/保留)
2026-10-01 00:25:38 +08:00

22 lines
1.4 KiB
SQL

-- v2.5.0:操作日志 + 邮件「保留」(不再过期)
-- - operation_logs:记录 Console 内所有人工/系统操作(账号 / 域名 / 邮箱 / Webhook),
-- 供「日志」页回看;detail 只存非敏感元信息(secret/token 永不入库该表)。
-- - emails.retained:1 = 用户点「保留」,过期清理(Cron TTL)跳过该邮件,永不过期。
/** # 数据库表:操作日志(Console 内所有操作的审计流水) **/
CREATE TABLE IF NOT EXISTS operation_logs (
id TEXT PRIMARY KEY,
action TEXT NOT NULL, -- account.create / account.delete / domain.setup / mailbox.create / webhook.save / webhook.deliver ...
target_type TEXT NOT NULL, -- account | domain | mailbox | email | webhook
target_id TEXT, -- 被操作资源 id(全局 webhook 等无 id 时为 NULL)
target_name TEXT, -- 展示名(账号名 / 域名 / 邮箱地址 / webhook url)
detail TEXT, -- JSON 补充信息(不含任何 secret)
operator TEXT NOT NULL DEFAULT '', -- 操作账号(Console 登录名;系统自动操作为 system)
created_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_operation_logs_created ON operation_logs(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_operation_logs_type ON operation_logs(target_type);
-- 邮件保留标记(1 = 永不过期,Cron TTL 清理跳过)
ALTER TABLE emails ADD COLUMN retained INTEGER NOT NULL DEFAULT 0;