diff --git a/backend/mci-server/src/main/java/com/sino/mci/config/FlywayConfig.java b/backend/mci-server/src/main/java/com/sino/mci/config/FlywayConfig.java new file mode 100644 index 0000000..8b1bb2a --- /dev/null +++ b/backend/mci-server/src/main/java/com/sino/mci/config/FlywayConfig.java @@ -0,0 +1,22 @@ +package com.sino.mci.config; + +import javax.sql.DataSource; + +import org.flywaydb.core.Flyway; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConditionalOnProperty(prefix = "spring.flyway", name = "enabled", havingValue = "true", matchIfMissing = true) +public class FlywayConfig { + + @Bean(initMethod = "migrate") + public Flyway flyway(DataSource dataSource) { + return Flyway.configure() + .dataSource(dataSource) + .locations("classpath:db/migration") + .baselineOnMigrate(true) + .load(); + } +} diff --git a/backend/mci-server/src/main/resources/db/migration/V1__init_account.sql b/backend/mci-server/src/main/resources/db/migration/V1__init_account.sql new file mode 100644 index 0000000..b811187 --- /dev/null +++ b/backend/mci-server/src/main/resources/db/migration/V1__init_account.sql @@ -0,0 +1,43 @@ +CREATE TABLE IF NOT EXISTS mci_tenant ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + tenant_code VARCHAR(64) NOT NULL UNIQUE COMMENT '租户编码', + tenant_name VARCHAR(128) NOT NULL COMMENT '租户名称', + auth_config JSON COMMENT '认证配置', + inbound_webhook_url VARCHAR(512) COMMENT '入站消息推送地址', + status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0禁用 1启用', + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + deleted TINYINT NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户/业务系统表'; + +CREATE TABLE IF NOT EXISTS mci_platform_role ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + role_code VARCHAR(64) NOT NULL UNIQUE COMMENT '角色编码', + role_name VARCHAR(128) NOT NULL COMMENT '角色名称', + permissions JSON COMMENT '权限列表', + status TINYINT NOT NULL DEFAULT 1, + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台角色表'; + +CREATE TABLE IF NOT EXISTS mci_user ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + tenant_code VARCHAR(64) NOT NULL COMMENT '所属租户', + username VARCHAR(64) NOT NULL COMMENT '用户名', + password VARCHAR(256) NOT NULL COMMENT '加密密码', + real_name VARCHAR(128) COMMENT '真实姓名', + phone VARCHAR(32) COMMENT '手机号', + email VARCHAR(128) COMMENT '邮箱', + status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0禁用 1启用', + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + deleted TINYINT NOT NULL DEFAULT 0, + UNIQUE KEY uk_tenant_username (tenant_code, username, deleted) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='中台用户表'; + +CREATE TABLE IF NOT EXISTS mci_user_role ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + user_id BIGINT NOT NULL COMMENT '用户ID', + role_id BIGINT NOT NULL COMMENT '角色ID', + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY uk_user_role (user_id, role_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关系表'; diff --git a/backend/mci-server/src/main/resources/db/migration/V2__seed_roles.sql b/backend/mci-server/src/main/resources/db/migration/V2__seed_roles.sql new file mode 100644 index 0000000..a423ccd --- /dev/null +++ b/backend/mci-server/src/main/resources/db/migration/V2__seed_roles.sql @@ -0,0 +1,4 @@ +INSERT INTO mci_platform_role (role_code, role_name, permissions) VALUES +('admin', '租户管理员', '["*"]'), +('operator', '运营操作员', '["send:write", "channel:read", "channel:write", "record:read"]'), +('viewer', '只读用户', '["record:read", "channel:read"]');