一切皆为插件的开发者工具运行时框架
🧩 核心特性:
- 插件热插拔 (importlib 动态加载)
- 依赖自动解析 (拓扑排序 + 循环检测)
- 企业级稳定 (熔断/降级/重试/隔离)
- 事件驱动 (发布/订阅事件总线)
- 完整配置 (YAML 配置 + 热重载)
105 lines
3.8 KiB
SQL
105 lines
3.8 KiB
SQL
-- OSS Community 数据库结构
|
|
CREATE DATABASE IF NOT EXISTS oss_community CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
USE oss_community;
|
|
|
|
-- 用户表
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
username VARCHAR(50) NOT NULL UNIQUE,
|
|
email VARCHAR(100) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
avatar VARCHAR(255) DEFAULT '',
|
|
bio TEXT,
|
|
role ENUM('admin', 'moderator', 'member') DEFAULT 'member',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 分类表
|
|
CREATE TABLE IF NOT EXISTS categories (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
slug VARCHAR(100) NOT NULL UNIQUE,
|
|
description TEXT,
|
|
icon VARCHAR(50) DEFAULT 'folder',
|
|
sort_order INT DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 帖子表
|
|
CREATE TABLE IF NOT EXISTS posts (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
category_id INT NOT NULL,
|
|
title VARCHAR(200) NOT NULL,
|
|
slug VARCHAR(200) NOT NULL UNIQUE,
|
|
content TEXT NOT NULL,
|
|
views INT DEFAULT 0,
|
|
likes INT DEFAULT 0,
|
|
is_pinned TINYINT(1) DEFAULT 0,
|
|
is_locked TINYINT(1) DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE,
|
|
FULLTEXT(title, content)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 回复表
|
|
CREATE TABLE IF NOT EXISTS replies (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
post_id INT NOT NULL,
|
|
user_id INT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
likes INT DEFAULT 0,
|
|
is_solution TINYINT(1) DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 点赞表
|
|
CREATE TABLE IF NOT EXISTS likes (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
post_id INT DEFAULT NULL,
|
|
reply_id INT DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE KEY unique_like (user_id, post_id, reply_id),
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE SET NULL,
|
|
FOREIGN KEY (reply_id) REFERENCES replies(id) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 标签表
|
|
CREATE TABLE IF NOT EXISTS tags (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(50) NOT NULL UNIQUE,
|
|
slug VARCHAR(50) NOT NULL UNIQUE,
|
|
color VARCHAR(7) DEFAULT '#06b6d4'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 帖子标签关联表
|
|
CREATE TABLE IF NOT EXISTS post_tags (
|
|
post_id INT NOT NULL,
|
|
tag_id INT NOT NULL,
|
|
PRIMARY KEY (post_id, tag_id),
|
|
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
-- 初始数据
|
|
INSERT IGNORE INTO categories (name, slug, description, icon, sort_order) VALUES
|
|
('公告', 'announcements', '官方公告和重要通知', 'megaphone', 1),
|
|
('问答', 'q-a', '提问与解答,互助交流', 'question', 2),
|
|
('讨论', 'discussions', '技术讨论与想法分享', 'chat', 3),
|
|
('插件市场', 'plugins', '插件展示与推荐', 'puzzle', 4),
|
|
('反馈', 'feedback', 'Bug 反馈与功能建议', 'bug', 5);
|
|
|
|
INSERT IGNORE INTO tags (name, slug, color) VALUES
|
|
('Go', 'go', '#00add8'),
|
|
('插件', 'plugin', '#8b5cf6'),
|
|
('安装', 'install', '#22c55e'),
|
|
('配置', 'config', '#3b82f6'),
|
|
('求助', 'help', '#f59e0b');
|