Files
Jnote-nodeJs/server/src/config/schema.js
dcr_xuxgc d759a9e740 init
2026-06-12 17:49:54 +08:00

108 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 数据库表结构定义
* 包含所有表的 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
};