init
This commit is contained in:
108
server/src/config/schema.js
Normal file
108
server/src/config/schema.js
Normal 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
|
||||
};
|
||||
Reference in New Issue
Block a user