Files
qitongxue-api/manifest/sql/migrate.sql

123 lines
5.7 KiB
Go
Raw Normal View History

2026-09-17 14:42:44 +08:00
-- 工具箱项目数据库初始化脚本
-- 种子数据管理员/模块/等级/工具由服务启动时自动写入logic.Seed无需手工插入
CREATE DATABASE IF NOT EXISTS `nl_toolbox` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `nl_toolbox`;
-- 功能模块
CREATE TABLE IF NOT EXISTS `modules` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`module_key` VARCHAR(32) NOT NULL COMMENT 'image/doc/calc/time/create/life',
`name` VARCHAR(64) NOT NULL COMMENT '模块名称',
`icon` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '图标 keywot 图标名',
`description` VARCHAR(255) NOT NULL DEFAULT '',
`sort` INT NOT NULL DEFAULT 0,
`is_enabled` TINYINT NOT NULL DEFAULT 1,
`created_at` DATETIME NULL DEFAULT NULL,
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_module_key` (`module_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='功能模块';
-- 用户等级模块权限
CREATE TABLE IF NOT EXISTS `levels` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`level_key` VARCHAR(32) NOT NULL COMMENT 'v1/v2/v3...',
`name` VARCHAR(64) NOT NULL COMMENT '展示名基础版/进阶版',
`modules` JSON NOT NULL COMMENT '["image","doc"] 模块 key 数组',
`sort` INT NOT NULL DEFAULT 0,
`is_enabled` TINYINT NOT NULL DEFAULT 1,
`remark` VARCHAR(255) NOT NULL DEFAULT '',
`created_at` DATETIME NULL DEFAULT NULL,
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_level_key` (`level_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户等级模块权限';
-- 小程序/H5 用户
-- username/password_hashH5 账号登录用微信账号绑定 H5 账号后同样有值合并账号
CREATE TABLE IF NOT EXISTS `users` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`openid` VARCHAR(64) NOT NULL COMMENT '微信openidH5 独立账号为 h5- 前缀占位',
`username` VARCHAR(64) NULL DEFAULT NULL COMMENT 'H5 登录名唯一可空',
`password_hash` VARCHAR(255) NULL DEFAULT NULL COMMENT 'bcrypt',
`nickname` VARCHAR(64) NOT NULL DEFAULT '',
`avatar_url` VARCHAR(512) NOT NULL DEFAULT '',
`level_key` VARCHAR(32) NOT NULL DEFAULT 'v1',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1正常 0禁用',
`created_at` DATETIME NULL DEFAULT NULL,
`last_login_at` DATETIME NULL DEFAULT NULL,
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_openid` (`openid`),
UNIQUE KEY `uk_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小程序用户';
-- ===== v0.2 升级已有库手动执行MySQL 8.0 不支持 ADD COLUMN IF NOT EXISTS =====
-- ALTER TABLE `users`
-- ADD COLUMN `username` VARCHAR(64) NULL DEFAULT NULL COMMENT 'H5 登录名唯一可空' AFTER `openid`,
-- ADD COLUMN `password_hash` VARCHAR(255) NULL DEFAULT NULL COMMENT 'bcrypt' AFTER `username`,
-- ADD UNIQUE KEY `uk_username` (`username`);
-- 工具目录
CREATE TABLE IF NOT EXISTS `tools` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`tool_key` VARCHAR(64) NOT NULL COMMENT '与前端注册表 src/config/tools.ts 强约定一致',
`module_key` VARCHAR(32) NOT NULL COMMENT '所属模块',
`name` VARCHAR(64) NOT NULL,
`icon` VARCHAR(64) NOT NULL DEFAULT '',
`description` VARCHAR(255) NOT NULL DEFAULT '',
`sort` INT NOT NULL DEFAULT 0,
`is_enabled` TINYINT NOT NULL DEFAULT 1,
`is_hot` TINYINT NOT NULL DEFAULT 0 COMMENT '工作台推荐位',
`usage_count` BIGINT NOT NULL DEFAULT 0,
`created_at` DATETIME NULL DEFAULT NULL,
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tool_key` (`tool_key`),
KEY `idx_module_key` (`module_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工具目录';
-- 工具使用日志
CREATE TABLE IF NOT EXISTS `tool_usage_logs` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` BIGINT UNSIGNED NOT NULL,
`tool_key` VARCHAR(64) NOT NULL,
`used_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_user_tool_time` (`user_id`, `tool_key`, `used_at`),
KEY `idx_used_at` (`used_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工具使用日志';
-- 工作台配置
CREATE TABLE IF NOT EXISTS `user_workbench` (
`user_id` BIGINT UNSIGNED NOT NULL,
`tool_keys` JSON NOT NULL COMMENT '["img-compress",...] 有序',
`updated_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作台配置';
-- 后台管理员
CREATE TABLE IF NOT EXISTS `admin_users` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`account` VARCHAR(64) NOT NULL,
`password` VARCHAR(255) NOT NULL COMMENT 'bcrypt',
`nick_name` VARCHAR(64) NOT NULL DEFAULT '',
`role_name` VARCHAR(64) NOT NULL DEFAULT '超级管理员',
`role_value` VARCHAR(32) NOT NULL DEFAULT 'super',
`created_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_account` (`account`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='后台管理员';
-- 用户反馈
CREATE TABLE IF NOT EXISTS `feedbacks` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` BIGINT UNSIGNED NULL,
`content` VARCHAR(1000) NOT NULL,
`contact` VARCHAR(128) NOT NULL DEFAULT '',
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待处理 1已处理',
`created_at` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户反馈';