This commit is contained in:
dcr_xuxgc
2026-06-12 17:49:54 +08:00
commit d759a9e740
69 changed files with 14243 additions and 0 deletions

108
server/src/config/schema.js Normal file
View File

@@ -0,0 +1,108 @@
/**
* 数据库表结构定义
* 包含所有表的 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
};