123 lines
5.7 KiB
Go
123 lines
5.7 KiB
Go
-- 工具箱项目数据库初始化脚本
|
||
-- 种子数据(管理员/模块/等级/工具)由服务启动时自动写入(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 '图标 key(wot 图标名)',
|
||
`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_hash:H5 账号登录用;微信账号绑定 H5 账号后同样有值(合并账号)
|
||
CREATE TABLE IF NOT EXISTS `users` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
`openid` VARCHAR(64) NOT NULL COMMENT '微信openid;H5 独立账号为 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='用户反馈';
|