Files
2026-04-07 14:11:45 +08:00

8.0 KiB
Raw Permalink Blame History

///

DATABASE.md

描述:WXAuto Center 数据库设计文档

作者:AI Generated

创建日期:2026-04-05

更新日期:2026-04-06

///

WXAuto Center 数据库设计文档

概述

本系统使用 PostgreSQL 数据库,通过 SQLAlchemy ORM 进行数据访问。数据库包含以下表:

表名 说明
nodes 节点配置表
webhook_urls Webhook URL 表
logs 日志表
plugin_configs 插件配置表

ER 图

┌─────────────────┐     ┌─────────────────┐
│     nodes       │     │ webhook_urls    │
├─────────────────┤     ├─────────────────┤
│ node_id (PK)    │     │ id (PK)         │
│ name            │     │ name            │
│ api_url         │     │ url             │
│ api_key         │     │ format          │
│ enabled         │     │ enabled         │
│ description     │     │ event_types     │
│ group           │     │ created_at      │
│ status          │     │ updated_at      │
│ wechat_status   │     └─────────────────┘
│ is_healthy      │
│ health_message  │
│ created_at      │
│ updated_at      │
└─────────────────┘

┌─────────────────┐     ┌─────────────────┐
│     logs        │     │ plugin_configs  │
├─────────────────┤     ├─────────────────┤
│ id (PK)         │     │ id (PK)         │
│ timestamp       │     │ plugin_name     │
│ level           │     │ config_json     │
│ source          │     │ enabled         │
│ message         │     │ created_at      │
└─────────────────┘     │ updated_at      │
                        └─────────────────┘

表结构详解

1. nodes - 节点配置表

存储所有微信节点的信息。

字段 类型 约束 说明
node_id VARCHAR(50) PK 节点唯一标识
name VARCHAR(100) NOT NULL 节点显示名称
api_url VARCHAR(255) NOT NULL 节点 API 地址
api_key VARCHAR(255) NOT NULL 节点 API 密钥
enabled BOOLEAN DEFAULT true 是否启用
description TEXT DEFAULT '' 节点描述
group VARCHAR(50) DEFAULT 'default' 节点分组
status VARCHAR(20) DEFAULT 'inactive' API 状态
wechat_status VARCHAR(20) DEFAULT 'online' 微信状态
is_healthy BOOLEAN DEFAULT false 健康检查状态
health_message VARCHAR(255) DEFAULT '' 健康检查消息
created_at TIMESTAMP DEFAULT now 创建时间
updated_at TIMESTAMP DEFAULT now 更新时间

状态值说明:

status 值 说明
active API 正常响应
inactive API 未响应
error API 返回错误
wechat_status 值 说明
online 微信已登录
offline 微信未登录

SQL

CREATE TABLE nodes (
    node_id VARCHAR(50) PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    api_url VARCHAR(255) NOT NULL,
    api_key VARCHAR(255) NOT NULL,
    enabled BOOLEAN DEFAULT true,
    description TEXT DEFAULT '',
    group VARCHAR(50) DEFAULT 'default',
    status VARCHAR(20) DEFAULT 'inactive',
    wechat_status VARCHAR(20) DEFAULT 'online',
    is_healthy BOOLEAN DEFAULT false,
    health_message VARCHAR(255) DEFAULT '',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. webhook_urls - Webhook URL 表

存储告警 webhook 配置。

字段 类型 约束 说明
id INTEGER PK, AUTO 主键
name VARCHAR(100) NOT NULL Webhook 名称
url VARCHAR(500) NOT NULL Webhook URL
format VARCHAR(20) DEFAULT 'bark' 消息格式
enabled BOOLEAN DEFAULT true 是否启用
event_types TEXT DEFAULT '' 触发事件类型(逗号分隔)
created_at TIMESTAMP DEFAULT now 创建时间
updated_at TIMESTAMP DEFAULT now 更新时间

format 支持的格式:

  • bark - Bark 推送格式
  • wecom - 企业微信
  • dingtalk - 钉钉
  • feishu - 飞书
  • telegram - Telegram
  • serverchan - Server酱

event_types 支持的类型:

  • node_offline - 节点离线
  • node_error - 节点错误
  • wechat_offline - 微信离线
  • all - 所有事件

3. logs - 日志表

存储系统运行日志。

字段 类型 约束 说明
id INTEGER PK, AUTO 主键
timestamp TIMESTAMP DEFAULT now 日志时间
level VARCHAR(20) NOT NULL 日志级别
source VARCHAR(50) NOT NULL 日志来源
message TEXT NOT NULL 日志消息

level 值:

  • INFO - 信息
  • WARNING - 警告
  • ERROR - 错误
  • SUCCESS - 成功
  • DEBUG - 调试

4. plugin_configs - 插件配置表

存储插件的配置和启用状态。

字段 类型 约束 说明
id INTEGER PK, AUTO 主键
plugin_name VARCHAR(100) UNIQUE, NOT NULL 插件名称
config_json TEXT DEFAULT '{}' 插件配置(JSON格式)
enabled BOOLEAN DEFAULT false 是否启用
created_at TIMESTAMP DEFAULT now 创建时间
updated_at TIMESTAMP DEFAULT now 更新时间

config_json 示例:

{
    "node_id": "wx1",
    "receiver": "文件传输助手",
    "cron": "0 8 * * *",
    "http_url": "https://api.example.com/news",
    "message_template": "📰 {title}\n{url}"
}

数据库操作

DatabaseService 主要方法

节点操作

# 获取所有节点
db_service.get_all_nodes() -> List[Node]

# 获取指定节点
db_service.get_node(node_id: str) -> Optional[Node]

# 添加节点
db_service.add_node(node_id, name, api_url, api_key, description, group)

# 更新节点
db_service.update_node(node_id, **kwargs) -> bool

# 删除节点
db_service.delete_node(node_id) -> bool

# 获取启用的节点
db_service.get_enabled_nodes() -> List[Node]

Webhook 操作

# 获取所有 Webhook
db_service.get_all_webhooks() -> List[WebhookUrl]

# 获取启用的 Webhook
db_service.get_enabled_webhooks() -> List[WebhookUrl]

# 添加 Webhook
db_service.add_webhook(name, url, format, event_types) -> bool

# 更新 Webhook
db_service.update_webhook(webhook_id, **kwargs) -> bool

# 删除 Webhook
db_service.delete_webhook(webhook_id) -> bool

插件配置操作

# 获取插件配置
db_service.get_plugin_config(plugin_name: str) -> Optional[PluginConfig]

# 获取所有插件配置
db_service.get_all_plugin_configs() -> List[PluginConfig]

# 保存插件配置
db_service.save_plugin_config(plugin_name, config, enabled) -> bool

# 更新插件启用状态
db_service.update_plugin_enabled(plugin_name, enabled) -> bool

索引

-- nodes 表索引
CREATE INDEX idx_nodes_enabled ON nodes(enabled);
CREATE INDEX idx_nodes_group ON nodes(group);
CREATE INDEX idx_nodes_status ON nodes(status);

-- webhook_urls 表索引
CREATE INDEX idx_webhook_enabled ON webhook_urls(enabled);

-- logs 表索引
CREATE INDEX idx_logs_timestamp ON logs(timestamp);
CREATE INDEX idx_logs_level ON logs(level);

迁移注意

如果数据库已存在,新增 plugin_configs 表:

CREATE TABLE IF NOT EXISTS plugin_configs (
    id SERIAL PRIMARY KEY,
    plugin_name VARCHAR(100) UNIQUE NOT NULL,
    config_json TEXT DEFAULT '{}',
    enabled BOOLEAN DEFAULT false,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);