/** * 数据库表结构定义 * 包含所有表的 CREATE TABLE 语句 */ const DB_NAME = process.env.DB_NAME || 'jnote'; // posts 表 - content 改为 MEDIUMTEXT 支持更大内容 const CREATE_POSTS_TABLE = ` CREATE TABLE IF NOT EXISTS posts ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, date DATE NOT NULL, excerpt TEXT, content MEDIUMTEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_posts_date (date DESC) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `; // about 表 - features 和 contact 改为 JSON 类型 const CREATE_ABOUT_TABLE = ` CREATE TABLE IF NOT EXISTS about ( id INT PRIMARY KEY DEFAULT 1, title VARCHAR(255) DEFAULT '关于我', intro TEXT, blog TEXT, tech TEXT, features JSON, contact JSON, filing_number VARCHAR(100), updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `; // settings 表 - uploaded_images/icons 改为 JSON 类型,bg_image/favicon 改为更节省空间的 TEXT const CREATE_SETTINGS_TABLE = ` CREATE TABLE IF NOT EXISTS settings ( id INT PRIMARY KEY DEFAULT 1, bg_type VARCHAR(20) DEFAULT 'color', bg_color VARCHAR(20) DEFAULT '#f5f5f5', bg_image TEXT, bg_opacity DECIMAL(3,2) DEFAULT 1.00, language VARCHAR(10) DEFAULT 'zh', favicon TEXT, uploaded_images JSON, uploaded_icons JSON, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `; // cron_tasks 表 const CREATE_CRON_TASKS_TABLE = ` CREATE TABLE IF NOT EXISTS cron_tasks ( id VARCHAR(50) PRIMARY KEY, name VARCHAR(255) NOT NULL, cron VARCHAR(50) NOT NULL, url VARCHAR(500) NOT NULL, method VARCHAR(20) DEFAULT 'GET', headers TEXT, body TEXT, enabled TINYINT(1) DEFAULT 1, last_run DATETIME, next_run DATETIME, run_count INT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `; // 所有表创建的执行顺序(按依赖关系) const TABLE_DEFINITIONS = [ { name: 'posts', sql: CREATE_POSTS_TABLE }, { name: 'about', sql: CREATE_ABOUT_TABLE }, { name: 'settings', sql: CREATE_SETTINGS_TABLE }, { name: 'cron_tasks', sql: CREATE_CRON_TASKS_TABLE } ]; // 默认数据 const DEFAULT_DATA = { about: { title: '关于我', intro: '你好!我是一名热爱技术开发的开发者。', blog: '这个博客用于分享我在学习和工作中的一些心得体会。', tech: 'Vue / Vue 3, JavaScript / TypeScript, Node.js, Vite, Pinia, Vue Router', features: JSON.stringify([ '定时任务系统 - 支持 Cron表达式的自动化任务管理', '自定义背景 - 支持纯色和图片背景,可调节透明度', '多语言支持 - 中英文切换', '自定义图标 - 上传本地图片作为网站图标' ]), contact: JSON.stringify({ email: 'example@email.com', github: 'github.com/yourusername' }), filing_number: '桂ICP备2022004108号-1' }, settings: { bg_type: 'color', bg_color: '#f5f5f5', bg_opacity: 1.00, language: 'zh' } }; module.exports = { DB_NAME, TABLE_DEFINITIONS, DEFAULT_DATA };