SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_product
-- 产品表：所有权限、角色、用户归属的顶层作用域
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_product` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `code` varchar(64) NOT NULL DEFAULT '' COMMENT '产品编码（唯一标识）',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '产品名称',
  `appKey` varchar(64) NOT NULL DEFAULT '' COMMENT '产品接入密钥',
  `appSecret` varchar(128) NOT NULL DEFAULT '' COMMENT '产品接入签名密钥',
  `remark` varchar(255) DEFAULT '' COMMENT '备注',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1启用 2禁用',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`) USING BTREE,
  UNIQUE KEY `uk_app_key` (`appKey`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_dept
-- 部门表：树形组织架构，实现跨部门管理隔离
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_dept` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `parentId` bigint NOT NULL DEFAULT '0' COMMENT '父部门ID，0表示顶级部门',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '部门名称',
  `path` varchar(512) NOT NULL DEFAULT '' COMMENT '层级路径，如 /1/3/7/ 用于快速判断祖先关系',
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序值',
  `deptType` varchar(16) NOT NULL DEFAULT 'NORMAL' COMMENT '部门类型 NORMAL普通 DEV研发',
  `remark` varchar(255) DEFAULT '' COMMENT '备注',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1启用 2禁用',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_parent` (`parentId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_perm
-- 权限表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_perm` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `productCode` varchar(64) NOT NULL DEFAULT '' COMMENT '所属产品编码',
  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '权限名',
  `code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '权限code',
  `remark` varchar(255) DEFAULT '' COMMENT '备注',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1启用 2禁用',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_product_code` (`productCode`,`code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14955 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_role
-- 角色表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_role` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `productCode` varchar(64) NOT NULL DEFAULT '' COMMENT '所属产品编码',
  `name` varchar(64) NOT NULL DEFAULT '' COMMENT '角色名',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '备注',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1启用 2禁用',
  `permsLevel` int NOT NULL DEFAULT '0' COMMENT '权限等级，值越大权限越小，用于上下级管控',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_product_name` (`productCode`,`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_role_perm
-- 角色-权限关联表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_role_perm` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `roleId` bigint NOT NULL COMMENT '角色ID',
  `permId` bigint NOT NULL COMMENT '权限ID',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_role_perm` (`roleId`,`permId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3346 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_user
-- 用户表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_user` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '登录名',
  `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '登录密码',
  `nickname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '昵称',
  `avatar` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '头像',
  `email` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '邮箱',
  `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '手机号',
  `remark` varchar(255) DEFAULT '' COMMENT '备注',
  `deptId` bigint NOT NULL DEFAULT '0' COMMENT '所属部门ID',
  `isSuperAdmin` tinyint(1) NOT NULL DEFAULT '2' COMMENT '是否为超级管理员 1是 2否',
  `mustChangePassword` tinyint(1) NOT NULL DEFAULT '2' COMMENT '是否需要强制修改密码 1是 2否',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1正常 2冻结',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_username` (`username`) USING BTREE,
  KEY `idx_dept` (`deptId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_product_member
-- 产品成员表：将用户与产品关联，并标记成员类型
-- memberType 决定自动权限行为：
--   DEVELOPER = 开发者，自动拥有该产品所有权限
--   ADMIN     = 管理员，自动拥有该产品所有权限
--   MEMBER    = 普通成员，权限由角色和用户权限表决定
-- 管理层级顺序：超级管理员 > DEVELOPER > ADMIN > MEMBER
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_product_member` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `productCode` varchar(64) NOT NULL DEFAULT '' COMMENT '产品编码',
  `userId` bigint NOT NULL COMMENT '用户ID',
  `memberType` enum('DEVELOPER','ADMIN','MEMBER') NOT NULL DEFAULT 'MEMBER' COMMENT '成员类型',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1启用 2禁用',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_product_user` (`productCode`,`userId`) USING BTREE,
  KEY `idx_user` (`userId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_user_perm
-- 用户-权限关联表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_user_perm` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `userId` bigint NOT NULL COMMENT '用户ID',
  `permId` bigint NOT NULL COMMENT '权限ID',
  `effect` enum('ALLOW','DENY') NOT NULL DEFAULT 'ALLOW' COMMENT '权限控制策略 ALLOW允许 DENY拒绝',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_user_perm` (`userId`,`permId`) USING BTREE,
  KEY `idx_user_effect` (`userId`,`effect`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Table structure for sys_user_role
-- 用户-角色关联表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `sys_user_role` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `userId` bigint NOT NULL COMMENT '用户ID',
  `roleId` bigint NOT NULL COMMENT '角色ID',
  `createTime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updateTime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_role` (`userId`,`roleId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

SET FOREIGN_KEY_CHECKS = 1;
