-- 角色表
CREATE TABLE IF NOT EXISTS `t_auth_role` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
    `tenant_id` BIGINT NOT NULL COMMENT '租户 ID',
    `name` VARCHAR(50) NOT NULL COMMENT '角色名称（在租户内唯一）',
    `code` VARCHAR(50) NOT NULL COMMENT '角色编码（在租户内唯一）',
    `description` VARCHAR(200) DEFAULT NULL COMMENT '角色描述',
    `valid_state` TINYINT DEFAULT 1 COMMENT '有效状态：1-有效，2-失效',
    `create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建人',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新人',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除标识（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_tenant_code` (`tenant_id`, `code`),
    UNIQUE KEY `uk_tenant_name` (`tenant_id`, `name`),
    KEY `idx_tenant_id` (`tenant_id`),
    KEY `idx_valid_state` (`valid_state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';

-- 权限表
CREATE TABLE IF NOT EXISTS `t_auth_permission` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
    `tenant_id` BIGINT NOT NULL COMMENT '租户 ID',
    `name` VARCHAR(50) NOT NULL COMMENT '权限名称',
    `code` VARCHAR(50) NOT NULL COMMENT '权限编码（在租户内唯一）',
    `resource` VARCHAR(50) NOT NULL COMMENT '资源名称，如 user, role, menu',
    `action` VARCHAR(50) NOT NULL COMMENT '操作类型，如 create, read, update, delete',
    `description` VARCHAR(200) DEFAULT NULL COMMENT '权限描述',
    `valid_state` TINYINT DEFAULT 1 COMMENT '有效状态：1-有效，2-失效',
    `create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建人',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新人',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除标识（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_tenant_code` (`tenant_id`, `code`),
    UNIQUE KEY `uk_tenant_resource_action` (`tenant_id`, `resource`, `action`),
    KEY `idx_tenant_id` (`tenant_id`),
    KEY `idx_resource_action` (`resource`, `action`),
    KEY `idx_valid_state` (`valid_state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';

-- 菜单表
CREATE TABLE IF NOT EXISTS `t_auth_menu` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
    `name` VARCHAR(50) NOT NULL COMMENT '菜单名称',
    `path` VARCHAR(200) DEFAULT NULL COMMENT '路由路径',
    `icon` VARCHAR(50) DEFAULT NULL COMMENT '图标',
    `component` VARCHAR(200) DEFAULT NULL COMMENT '组件路径',
    `parent_id` BIGINT DEFAULT NULL COMMENT '父菜单 ID',
    `permission` VARCHAR(50) DEFAULT NULL COMMENT '权限编码（用于控制菜单显示）',
    `sort` INT DEFAULT 0 COMMENT '排序',
    `valid_state` TINYINT DEFAULT 1 COMMENT '有效状态：1-有效，2-失效',
    `create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建人',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新人',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` TINYINT DEFAULT 0 COMMENT '逻辑删除标识（0-未删除，1-已删除）',
    PRIMARY KEY (`id`),
    KEY `idx_parent_id` (`parent_id`),
    KEY `idx_sort` (`sort`),
    KEY `idx_valid_state` (`valid_state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表';

-- 角色权限关联表
CREATE TABLE IF NOT EXISTS `t_auth_role_permission` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
    `role_id` BIGINT NOT NULL COMMENT '角色 ID',
    `permission_id` BIGINT NOT NULL COMMENT '权限 ID',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_role_permission` (`role_id`, `permission_id`),
    KEY `idx_role_id` (`role_id`),
    KEY `idx_permission_id` (`permission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';

-- 初始化默认角色
INSERT INTO `t_auth_role` (`tenant_id`, `name`, `code`, `description`, `valid_state`) VALUES
(1, '超级管理员', 'super_admin', '系统超级管理员角色', 1),
(1, '管理员', 'admin', '系统管理员角色', 1),
(1, '普通用户', 'user', '普通用户角色', 1)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);

-- 初始化基础权限
INSERT INTO `t_auth_permission` (`tenant_id`, `name`, `code`, `resource`, `action`, `description`, `valid_state`) VALUES
(1, '用户创建', 'user:create', 'user', 'create', '创建用户权限', 1),
(1, '用户查询', 'user:read', 'user', 'read', '查询用户权限', 1),
(1, '用户更新', 'user:update', 'user', 'update', '更新用户权限', 1),
(1, '用户删除', 'user:delete', 'user', 'delete', '删除用户权限', 1),
(1, '用户管理', 'user:manage', 'user', 'manage', '用户管理权限', 1),
(1, '角色创建', 'role:create', 'role', 'create', '创建角色权限', 1),
(1, '角色查询', 'role:read', 'role', 'read', '查询角色权限', 1),
(1, '角色更新', 'role:update', 'role', 'update', '更新角色权限', 1),
(1, '角色删除', 'role:delete', 'role', 'delete', '删除角色权限', 1),
(1, '租户创建', 'tenant:create', 'tenant', 'create', '创建租户权限', 1),
(1, '租户查询', 'tenant:read', 'tenant', 'read', '查询租户权限', 1),
(1, '租户更新', 'tenant:update', 'tenant', 'update', '更新租户权限', 1),
(1, '租户删除', 'tenant:delete', 'tenant', 'delete', '删除租户权限', 1),
(1, '超级管理员权限', 'super_admin', 'system', 'all', '系统超级管理员权限', 1)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
