108 lines
3.4 KiB
JavaScript
108 lines
3.4 KiB
JavaScript
/**
|
||
* 数据库表结构定义
|
||
* 包含所有表的 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
|
||
}; |