use school_news;
-- 操作日志表
DROP TABLE IF EXISTS `tb_sys_operation_log`;
CREATE TABLE `tb_sys_operation_log` (
  `id` VARCHAR(50) NOT NULL COMMENT '日志ID',
  `user_id` VARCHAR(50) NULL COMMENT '用户ID',
  `username` VARCHAR(50) NULL COMMENT '用户名',
  `module` VARCHAR(100) DEFAULT NULL COMMENT '操作模块',
  `operation` VARCHAR(100) DEFAULT NULL COMMENT '操作类型',
  `method` VARCHAR(200) DEFAULT NULL COMMENT '请求方法',
  `request_url` VARCHAR(500) DEFAULT NULL COMMENT '请求URL',
  `request_method` VARCHAR(20) DEFAULT NULL COMMENT '请求方式（GET/POST等）',
  `request_params` TEXT COMMENT '请求参数',
  `response_data` TEXT COMMENT '响应数据',
  `ip_address` VARCHAR(45) DEFAULT NULL COMMENT 'IP地址',
  `ip_source` VARCHAR(100) DEFAULT NULL COMMENT 'IP来源',
  `browser` VARCHAR(100) DEFAULT NULL COMMENT '浏览器',
  `os` VARCHAR(100) DEFAULT NULL COMMENT '操作系统',
  `status` INT(4) DEFAULT 1 COMMENT '操作状态（0失败 1成功）',
  `error_message` TEXT COMMENT '错误消息',
  `execute_time` INT(11) DEFAULT 0 COMMENT '执行时长（毫秒）',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  PRIMARY KEY (`id`),
  KEY `idx_user` (`user_id`),
  KEY `idx_module` (`module`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='操作日志表';

-- 系统配置表
DROP TABLE IF EXISTS `tb_sys_config`;
CREATE TABLE `tb_sys_config` (
  `id` VARCHAR(50) NOT NULL COMMENT '配置ID',
  `config_key` VARCHAR(100) NOT NULL COMMENT '配置键',
  `config_name` VARCHAR(100) DEFAULT NULL COMMENT '配置显示名称',
  `config_value` TEXT COMMENT '配置值',
  `config_type` VARCHAR(50) DEFAULT 'string' COMMENT '数据类型（string/number/boolean/json）',
  `render_type` VARCHAR(20) DEFAULT NULL COMMENT '前端渲染类型（input/textarea/number/switch/select/password）',
  `config_group` VARCHAR(50) DEFAULT NULL COMMENT '配置分组',
  `description` VARCHAR(255) DEFAULT NULL COMMENT '配置描述',
  `placeholder` VARCHAR(200) DEFAULT NULL COMMENT '输入框占位符',
  `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注说明（显示在表单项下方）',
  `rows` INT DEFAULT NULL COMMENT '文本框行数（textarea用）',
  `min_value` INT DEFAULT NULL COMMENT '最小值（number用）',
  `max_value` INT DEFAULT NULL COMMENT '最大值（number用）',
  `unit` VARCHAR(20) DEFAULT NULL COMMENT '单位（number用）',
  `options` TEXT COMMENT '下拉选项（select用，JSON格式）',
  `order_num` INT DEFAULT 0 COMMENT '排序号',
  `is_system` TINYINT(1) DEFAULT 0 COMMENT '是否系统配置',
  `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
  `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_config_key` (`config_key`),
  KEY `idx_group` (`config_group`),
  KEY `idx_order` (`order_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统配置表';


-- 系统访问统计表
DROP TABLE IF EXISTS `tb_sys_visit_statistics`;
CREATE TABLE `tb_sys_visit_statistics` (
  `id` VARCHAR(50) NOT NULL COMMENT '统计ID',
  `stat_date` DATE NOT NULL COMMENT '统计日期',
  `total_visits` INT(11) DEFAULT 0 COMMENT '总访问量',
  `unique_visitors` INT(11) DEFAULT 0 COMMENT '独立访客数',
  `new_users` INT(11) DEFAULT 0 COMMENT '新增用户数',
  `active_users` INT(11) DEFAULT 0 COMMENT '活跃用户数',
  `page_views` INT(11) DEFAULT 0 COMMENT '页面浏览量',
  `avg_visit_duration` INT(11) DEFAULT 0 COMMENT '平均访问时长（秒）',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_stat_date` (`stat_date`),
  KEY `idx_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统访问统计表';

-- 通知表
DROP TABLE IF EXISTS `tb_sys_notification`;
CREATE TABLE `tb_sys_notification` (
  `id` VARCHAR(50) NOT NULL COMMENT '通知ID',
  `user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
  `type` INT(4) DEFAULT 1 COMMENT '通知类型（1系统通知 2任务通知 3成就通知）',
  `title` VARCHAR(255) NOT NULL COMMENT '通知标题',
  `content` TEXT COMMENT '通知内容',
  `link_type` INT(4) DEFAULT NULL COMMENT '链接类型（1资源 2课程 3任务）',
  `link_id` VARCHAR(50) DEFAULT NULL COMMENT '链接ID',
  `is_read` TINYINT(1) DEFAULT 0 COMMENT '是否已读',
  `read_time` TIMESTAMP NULL DEFAULT NULL COMMENT '阅读时间',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user` (`user_id`),
  KEY `idx_is_read` (`is_read`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统通知表';

-- 文件上传记录表
-- --------------------------------------------------------
-- 文件上传记录表
-- --------------------------------------------------------
DROP TABLE IF EXISTS `tb_sys_file`;
CREATE TABLE IF NOT EXISTS `tb_sys_file` (
    `id` VARCHAR(50) NOT NULL COMMENT '主键ID',
    `file_id` VARCHAR(64) NOT NULL COMMENT '文件ID',
    `file_name` VARCHAR(255) NOT NULL COMMENT '存储文件名（UUID生成）',
    `original_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
    `file_path` VARCHAR(500) NOT NULL COMMENT '文件存储路径',
    `file_url` VARCHAR(500) DEFAULT NULL COMMENT '文件访问URL',
    `file_size` BIGINT NOT NULL COMMENT '文件大小（字节）',
    `file_type` VARCHAR(50) DEFAULT NULL COMMENT '文件类型（如：image、document、video等）',
    `mime_type` VARCHAR(100) DEFAULT NULL COMMENT 'MIME类型（如：image/jpeg）',
    `storage_type` VARCHAR(20) NOT NULL DEFAULT 'local' COMMENT '存储类型（local-本地存储、minio-MinIO存储、oss-阿里云OSS等）',
    `module` VARCHAR(50) DEFAULT NULL COMMENT '所属模块（如：user、news、course等）',
    `business_id` VARCHAR(64) DEFAULT NULL COMMENT '业务ID（关联的业务数据ID）',
    `uploader` VARCHAR(64) DEFAULT NULL COMMENT '上传者用户ID',
    `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `delete_time` DATETIME DEFAULT NULL COMMENT '删除时间',
    `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除（0-否，1-是）',
    PRIMARY KEY (`id`),
    INDEX `idx_file_id` (`file_id`),
    INDEX `idx_file_name` (`file_name`),
    INDEX `idx_uploader` (`uploader`),
    INDEX `idx_module_business` (`module`, `business_id`),
    INDEX `idx_storage_type` (`storage_type`),
    INDEX `idx_deleted` (`deleted`),
    INDEX `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件上传记录表';



-- 数据字典表
DROP TABLE IF EXISTS `tb_sys_dict_type`;
CREATE TABLE `tb_sys_dict_type` (
  `id` VARCHAR(50) NOT NULL COMMENT '字典类型ID',
  `dict_type` VARCHAR(100) NOT NULL COMMENT '字典类型',
  `dict_name` VARCHAR(100) NOT NULL COMMENT '字典名称',
  `description` VARCHAR(255) DEFAULT NULL COMMENT '描述',
  `status` INT(4) DEFAULT 1 COMMENT '状态（0禁用 1启用）',
  `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
  `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_dict_type` (`dict_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典类型表';

-- 数据字典详情表
DROP TABLE IF EXISTS `tb_sys_dict_data`;
CREATE TABLE `tb_sys_dict_data` (
  `id` VARCHAR(50) NOT NULL COMMENT '字典数据ID',
  `dict_type` VARCHAR(100) NOT NULL COMMENT '字典类型',
  `dict_label` VARCHAR(100) NOT NULL COMMENT '字典标签',
  `dict_value` VARCHAR(100) NOT NULL COMMENT '字典值',
  `dict_sort` INT(4) DEFAULT 0 COMMENT '排序',
  `css_class` VARCHAR(100) DEFAULT NULL COMMENT '样式类',
  `list_class` VARCHAR(100) DEFAULT NULL COMMENT '列表样式',
  `is_default` TINYINT(1) DEFAULT 0 COMMENT '是否默认',
  `status` INT(4) DEFAULT 1 COMMENT '状态（0禁用 1启用）',
  `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
  `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
  `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_dict_type` (`dict_type`),
  KEY `idx_dict_sort` (`dict_sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典数据表';

