CREATE DATABASE IF NOT EXISTS kbase DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE kbase;


-- 1. 用户基础表
CREATE TABLE IF NOT EXISTS user (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID，主键',
    username VARCHAR(64) NOT NULL UNIQUE COMMENT '登录用户名，唯一',
    password VARCHAR(128) NOT NULL COMMENT '用户密码（建议加密存储）',
    add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT='用户基础表';


-- 2. 角色表
CREATE TABLE IF NOT EXISTS role (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '角色ID',
    role_code VARCHAR(64) NOT NULL UNIQUE COMMENT '角色编码（如 admin/user/guest）',
    role_name VARCHAR(64) NOT NULL COMMENT '角色名称',
    add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT='系统角色表';


-- 3. 用户-角色关联表
CREATE TABLE IF NOT EXISTS user_role (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
    user_id BIGINT NOT NULL COMMENT '用户ID',
    role_id BIGINT NOT NULL COMMENT '角色ID',
    add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    INDEX idx_user_id(user_id),
    INDEX idx_role_id(role_id)
) COMMENT='用户与角色关联表';


-- 4. 文件表
CREATE TABLE IF NOT EXISTS file (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '文件ID',
    file_name VARCHAR(255) NOT NULL COMMENT '文件名或路径',
    file_path VARCHAR(512) NOT NULL COMMENT '存储路径',
    add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT='知识库文件表';


-- 5. 角色-文件可见规则表（适合批量规则分配权限）
CREATE TABLE IF NOT EXISTS role_file_rule (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
    role_id BIGINT NOT NULL COMMENT '角色ID',
    file_pattern VARCHAR(255) NOT NULL COMMENT '可访问文件名/路径模式（如前缀、正则）',
    remark VARCHAR(255) COMMENT '规则说明',
    add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    INDEX idx_role_id(role_id)
) COMMENT='角色-文件可访问规则表';

-- 6. 用户token表
CREATE TABLE IF NOT EXISTS user_token (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键，自增',
    user_id BIGINT NOT NULL COMMENT '用户ID，业务逻辑关联user表',
    token VARCHAR(128) NOT NULL UNIQUE COMMENT '用户登录token',
    login_at DATETIME NOT NULL COMMENT '登录时间',
    expired_at DATETIME NOT NULL COMMENT '过期时间',
    add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    INDEX idx_user_id(user_id),
    INDEX idx_token(token)
) COMMENT='用户登录Token表';


-- 7. 用户-文件直接授权关联表
CREATE TABLE IF NOT EXISTS user_file (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
    user_id BIGINT NOT NULL COMMENT '用户ID',
    file_id BIGINT NOT NULL COMMENT '文件ID',
    add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    INDEX idx_user_id(user_id),
    INDEX idx_file_id(file_id),
    UNIQUE INDEX uniq_user_file(user_id, file_id)
) COMMENT='用户-文件直接授权关联表（用于特殊文件个别授权）';



