init
This commit is contained in:
191
database/schema.sql
Normal file
191
database/schema.sql
Normal file
@@ -0,0 +1,191 @@
|
||||
-- 短视频解析平台数据库表结构设计
|
||||
-- 数据库: video_parser
|
||||
-- 字符集: utf8mb4
|
||||
|
||||
-- 1. 用户表
|
||||
CREATE TABLE IF NOT EXISTS `users` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
|
||||
`email` VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
|
||||
`password` VARCHAR(255) NOT NULL COMMENT '加密后的密码',
|
||||
`group_id` INT NOT NULL DEFAULT 2 COMMENT '用户分组ID',
|
||||
`register_ip` VARCHAR(45) COMMENT '注册IP',
|
||||
`last_login_ip` VARCHAR(45) COMMENT '最近登录IP',
|
||||
`total_parse_count` INT DEFAULT 0 COMMENT '总解析次数',
|
||||
`is_active` TINYINT(1) DEFAULT 1 COMMENT '账号是否激活',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX `idx_email` (`email`),
|
||||
INDEX `idx_group_id` (`group_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
|
||||
|
||||
-- 2. 用户分组表
|
||||
CREATE TABLE IF NOT EXISTS `user_groups` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`name` VARCHAR(50) NOT NULL UNIQUE COMMENT '分组名称',
|
||||
`daily_limit` INT NOT NULL DEFAULT 10 COMMENT '每日解析次数限制',
|
||||
`description` VARCHAR(255) COMMENT '分组描述',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户分组表';
|
||||
|
||||
-- 插入默认分组
|
||||
INSERT INTO `user_groups` (`id`, `name`, `daily_limit`, `description`) VALUES
|
||||
(1, '游客', 5, '未登录用户'),
|
||||
(2, '普通用户', 10, '已注册用户'),
|
||||
(3, 'VIP用户', 50, 'VIP会员'),
|
||||
(4, 'SVIP用户', 200, 'SVIP会员');
|
||||
|
||||
-- 3. 管理员表
|
||||
CREATE TABLE IF NOT EXISTS `admins` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`username` VARCHAR(50) NOT NULL UNIQUE COMMENT '管理员用户名',
|
||||
`password` VARCHAR(255) NOT NULL COMMENT '加密后的密码',
|
||||
`email` VARCHAR(100) COMMENT '管理员邮箱',
|
||||
`totp_secret` VARCHAR(100) COMMENT '2FA密钥',
|
||||
`is_2fa_enabled` TINYINT(1) DEFAULT 0 COMMENT '是否启用2FA',
|
||||
`last_login_ip` VARCHAR(45) COMMENT '最近登录IP',
|
||||
`last_login_at` DATETIME COMMENT '最近登录时间',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';
|
||||
|
||||
-- 插入默认管理员账号 (密码需要在应用中加密后插入)
|
||||
-- 用户名: shihao, 密码: 80012029Lz
|
||||
|
||||
-- 4. 解析接口配置表
|
||||
CREATE TABLE IF NOT EXISTS `parser_apis` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`name` VARCHAR(100) NOT NULL COMMENT '接口名称',
|
||||
`platform` VARCHAR(50) NOT NULL COMMENT '平台类型(douyin/tiktok/bilibili)',
|
||||
`api_url` VARCHAR(500) NOT NULL COMMENT 'API地址',
|
||||
`api_key` VARCHAR(255) COMMENT 'API密钥',
|
||||
`weight` INT DEFAULT 1 COMMENT '权重(用于负载均衡)',
|
||||
`is_enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
|
||||
`health_status` TINYINT(1) DEFAULT 1 COMMENT '健康状态(1正常/0异常)',
|
||||
`last_check_at` DATETIME COMMENT '最后检查时间',
|
||||
`fail_count` INT DEFAULT 0 COMMENT '连续失败次数',
|
||||
`total_calls` INT DEFAULT 0 COMMENT '总调用次数',
|
||||
`success_calls` INT DEFAULT 0 COMMENT '成功调用次数',
|
||||
`avg_response_time` INT DEFAULT 0 COMMENT '平均响应时间(ms)',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX `idx_platform` (`platform`),
|
||||
INDEX `idx_enabled` (`is_enabled`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='解析接口配置表';
|
||||
|
||||
-- 5. 站点配置表
|
||||
CREATE TABLE IF NOT EXISTS `site_config` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`config_key` VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
|
||||
`config_value` TEXT COMMENT '配置值',
|
||||
`config_type` VARCHAR(50) DEFAULT 'string' COMMENT '配置类型(string/int/json)',
|
||||
`description` VARCHAR(255) COMMENT '配置描述',
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='站点配置表';
|
||||
|
||||
-- 插入默认配置
|
||||
INSERT INTO `site_config` (`config_key`, `config_value`, `config_type`, `description`) VALUES
|
||||
('site_title', '短视频解析平台', 'string', '网站标题'),
|
||||
('site_logo', '', 'string', '网站Logo URL'),
|
||||
('site_notice', '欢迎使用短视频解析平台', 'string', '网站公告'),
|
||||
('site_footer', '', 'string', '网站底部信息'),
|
||||
('max_concurrent', '3', 'int', '最大并发解析数'),
|
||||
('guest_daily_limit', '5', 'int', '游客每日解析次数'),
|
||||
('user_daily_limit', '10', 'int', '普通用户每日解析次数');
|
||||
|
||||
-- 6. SMTP配置表
|
||||
CREATE TABLE IF NOT EXISTS `smtp_config` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`name` VARCHAR(100) NOT NULL COMMENT 'SMTP配置名称',
|
||||
`host` VARCHAR(255) NOT NULL COMMENT 'SMTP服务器地址',
|
||||
`port` INT NOT NULL COMMENT 'SMTP端口',
|
||||
`username` VARCHAR(255) NOT NULL COMMENT 'SMTP用户名',
|
||||
`password` VARCHAR(255) NOT NULL COMMENT 'SMTP密码',
|
||||
`from_email` VARCHAR(255) NOT NULL COMMENT '发件人邮箱',
|
||||
`from_name` VARCHAR(100) COMMENT '发件人名称',
|
||||
`use_tls` TINYINT(1) DEFAULT 1 COMMENT '是否使用TLS',
|
||||
`is_enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
|
||||
`is_default` TINYINT(1) DEFAULT 0 COMMENT '是否为默认配置',
|
||||
`weight` INT DEFAULT 1 COMMENT '权重(用于负载均衡)',
|
||||
`send_count` INT DEFAULT 0 COMMENT '发送次数',
|
||||
`fail_count` INT DEFAULT 0 COMMENT '失败次数',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='SMTP配置表';
|
||||
|
||||
-- 插入默认SMTP配置
|
||||
INSERT INTO `smtp_config` (`name`, `host`, `port`, `username`, `password`, `from_email`, `from_name`, `is_default`) VALUES
|
||||
('默认SMTP', 'smtp.resend.com', 587, 'resend', 're_TSgVYFuT_HG9g3Mu6P4i6LEdYgqVpW6S5', 'noreply@example.com', '短视频解析平台', 1);
|
||||
|
||||
-- 7. 邮箱验证码表
|
||||
CREATE TABLE IF NOT EXISTS `email_verification` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`email` VARCHAR(100) NOT NULL COMMENT '邮箱地址',
|
||||
`code` VARCHAR(10) NOT NULL COMMENT '验证码',
|
||||
`purpose` VARCHAR(50) NOT NULL COMMENT '用途(register/reset_password/forgot_password)',
|
||||
`is_used` TINYINT(1) DEFAULT 0 COMMENT '是否已使用',
|
||||
`expires_at` DATETIME NOT NULL COMMENT '过期时间',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX `idx_email_code` (`email`, `code`),
|
||||
INDEX `idx_expires` (`expires_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邮箱验证码表';
|
||||
|
||||
-- 8. 解析记录表
|
||||
CREATE TABLE IF NOT EXISTS `parse_logs` (
|
||||
`id` BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
`user_id` INT COMMENT '用户ID(NULL表示游客)',
|
||||
`ip_address` VARCHAR(45) NOT NULL COMMENT '请求IP',
|
||||
`platform` VARCHAR(50) NOT NULL COMMENT '平台类型',
|
||||
`video_url` VARCHAR(1000) NOT NULL COMMENT '视频链接',
|
||||
`parser_api_id` INT COMMENT '使用的解析接口ID',
|
||||
`status` VARCHAR(20) NOT NULL COMMENT '状态(success/failed/queued)',
|
||||
`error_message` TEXT COMMENT '错误信息',
|
||||
`response_time` INT COMMENT '响应时间(ms)',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX `idx_user_id` (`user_id`),
|
||||
INDEX `idx_ip` (`ip_address`),
|
||||
INDEX `idx_platform` (`platform`),
|
||||
INDEX `idx_status` (`status`),
|
||||
INDEX `idx_created` (`created_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='解析记录表';
|
||||
|
||||
-- 9. 每日解析统计表
|
||||
CREATE TABLE IF NOT EXISTS `daily_parse_stats` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`user_id` INT COMMENT '用户ID(NULL表示游客)',
|
||||
`ip_address` VARCHAR(45) COMMENT 'IP地址(游客使用)',
|
||||
`date` DATE NOT NULL COMMENT '日期',
|
||||
`parse_count` INT DEFAULT 0 COMMENT '解析次数',
|
||||
`success_count` INT DEFAULT 0 COMMENT '成功次数',
|
||||
`fail_count` INT DEFAULT 0 COMMENT '失败次数',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY `uk_user_date` (`user_id`, `date`),
|
||||
UNIQUE KEY `uk_ip_date` (`ip_address`, `date`),
|
||||
INDEX `idx_date` (`date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='每日解析统计表';
|
||||
|
||||
-- 10. 健康检查配置表
|
||||
CREATE TABLE IF NOT EXISTS `health_check_config` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`platform` VARCHAR(50) NOT NULL COMMENT '平台类型',
|
||||
`test_url` VARCHAR(1000) NOT NULL COMMENT '测试视频链接',
|
||||
`check_interval` INT DEFAULT 300 COMMENT '检查间隔(秒)',
|
||||
`is_enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
|
||||
`alert_email` VARCHAR(255) COMMENT '告警邮箱',
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康检查配置表';
|
||||
|
||||
-- 11. 健康检查日志表
|
||||
CREATE TABLE IF NOT EXISTS `health_check_logs` (
|
||||
`id` BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
`parser_api_id` INT NOT NULL COMMENT '解析接口ID',
|
||||
`status` VARCHAR(20) NOT NULL COMMENT '检查结果(success/failed)',
|
||||
`response_time` INT COMMENT '响应时间(ms)',
|
||||
`error_message` TEXT COMMENT '错误信息',
|
||||
`checked_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX `idx_api_id` (`parser_api_id`),
|
||||
INDEX `idx_checked` (`checked_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康检查日志表';
|
||||
Reference in New Issue
Block a user