# 数据模型 ## 一、plugin_state 表(新增) ```sql CREATE TABLE plugin_state ( plugin_id TEXT PRIMARY KEY, source TEXT NOT NULL DEFAULT 'builtin', enabled INTEGER DEFAULT 1, config TEXT, install_path TEXT, version TEXT, installed_at DATETIME, updated_at DATETIME, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_plugin_source ON plugin_state(source); CREATE INDEX idx_plugin_enabled ON plugin_state(enabled); ``` ### 字段说明 | 字段 | 类型 | 说明 | |------|------|------| | `plugin_id` | TEXT PK | 对应 PluginMetadata.ID,如 `"builtin-drawio"` | | `source` | TEXT | `'builtin'` 或 `'market'` | | `enabled` | INTEGER | 1=启用 0=停用 | | `config` | TEXT | JSON 格式的插件私有配置 | | `install_path` | TEXT | 外部插件磁盘路径(内置为 NULL) | | `version` | TEXT | 当前安装的版本号 | | `installed_at` | DATETIME | 安装时间 | | `updated_at` | DATETIME | 最后状态变更时间 | ## 二、与现有表的关系 ``` app_config 表(已有) plugin_state 表(新增) ┌──────────────┐ ┌──────────────┐ │ key='tab_config'│ │ plugin_id PK │ │ value=JSON │ ← 合并Tab →│ source │ │ (全局配置) │ │ enabled │ ├──────────────┤ │ version │ │ key='plugin_ │ ← 全局设置→│ config │ │ global' │ │ install_path │ │ (Phase 3 新增)│ └──────────────┘ └──────────────┘ ``` - `app_config`:存全局应用配置(tab_config、plugin_global 等) - `plugin_state`:存每个插件的运行状态和独立配置 - 两者通过 `plugin_id` 关联 ## 三、初始种子数据 应用首次启动时由 Go 代码写入: ```sql INSERT OR IGNORE INTO plugin_state (plugin_id, source, enabled, version) VALUES ('builtin-file-system', 'builtin', 1, '0.4.0'), ('builtin-markdown', 'builtin', 1, '0.4.0'), ('builtin-drawio', 'builtin', 0, '1.0.0'); ``` ## 四、配置存储策略 | 存储位置 | 内容 | 写入时机 | |---------|------|---------| | `app_config['tab_config']` | Tab 可见性/排序/默认值 | Phase 3 动态合并 | | `app_config['plugin_global']` | 插件全局设置(自动更新间隔等) | Phase 3 | | `plugin_state.enabled` | 每个插件的启停状态 | Phase 3 SetPluginEnabled | | `plugin_state.version` | 当前安装版本 | 安装/更新时 | | `plugin_state.config` | 插件私有配置(如 Draw.io 端口号) | 用户修改插件设置时 |