Explorar el Código

feat: cicd 测试

dbfu hace 1 semana
padre
commit
225cc8d793
Se han modificado 6 ficheros con 1289 adiciones y 346 borrados
  1. 1 0
      .dockerignore
  2. 20 0
      Dockerfile
  3. 13 0
      ecosystem.config.js
  4. 303 0
      init.sql
  5. 89 3
      main.js
  6. 863 343
      pnpm-lock.yaml

+ 1 - 0
.dockerignore

@@ -0,0 +1 @@
+node_modules

+ 20 - 0
Dockerfile

@@ -0,0 +1,20 @@
+FROM registry.cn-hangzhou.aliyuncs.com/dbfu/pnpm:8.4.0 as builder
+
+WORKDIR /app
+
+COPY pnpm-lock.yaml .
+COPY package.json .
+
+RUN --mount=type=cache,target=/pnpm/store pnpm install
+
+COPY . .
+
+FROM registry.cn-hangzhou.aliyuncs.com/dbfu/pm2:latest
+
+WORKDIR /app
+
+COPY --from=builder /app/ ./
+ENV TZ="Asia/Shanghai"
+
+EXPOSE 3001
+CMD ["pm2-runtime", "start", "ecosystem.config.js"]

+ 13 - 0
ecosystem.config.js

@@ -0,0 +1,13 @@
+module.exports = {
+  apps: [
+    {
+      name: 'editor',
+      script: './main.js',
+      instances: '1',
+      exec_mode: 'cluster',
+      env: {
+        NODE_ENV: 'production',
+      },
+    },
+  ],
+};

+ 303 - 0
init.sql

@@ -0,0 +1,303 @@
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = firefly   */
+/******************************************/
+CREATE TABLE `firefly` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '增长ID',
+  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
+  `type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '种类',
+  `avatar` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '头像',
+  `time` smallint NOT NULL COMMENT '繁殖周期',
+  `skill` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '技能',
+  `sales` float NOT NULL COMMENT '售价',
+  `area` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '分布区域',
+  `status` tinyint(1) NOT NULL COMMENT '状态:1 在售 2 停售 3 下架',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间戳',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='数据测试表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = imgcloud   */
+/******************************************/
+CREATE TABLE `imgcloud` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
+  `origin_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件原名称',
+  `file_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件hash名称',
+  `type` varchar(30) NOT NULL COMMENT '文件类型',
+  `size` int NOT NULL COMMENT '文件大小,单位byte',
+  `url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '图片cdn地址',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='图片云服务'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = lib   */
+/******************************************/
+CREATE TABLE `lib` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '组件ID',
+  `tag` varchar(50) NOT NULL COMMENT '组件标识',
+  `name` varchar(50) NOT NULL COMMENT '组件中文名称',
+  `description` varchar(200) DEFAULT NULL COMMENT '组件描述',
+  `react_code` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '组件源码',
+  `less_code` text COMMENT '组件样式',
+  `config_code` text COMMENT '组件配置',
+  `md_code` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT 'markdown内容',
+  `hash` varchar(100) DEFAULT NULL COMMENT '组件hash',
+  `user_id` int NOT NULL COMMENT '通行证ID',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '通行证名称',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `ix_user_id` (`user_id`),
+  KEY `ix_name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='自定义组件库表,用来满足自定义业务'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = lib_publish   */
+/******************************************/
+CREATE TABLE `lib_publish` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '索引',
+  `release_id` varchar(100) NOT NULL COMMENT '发布ID',
+  `lib_id` varchar(100) NOT NULL COMMENT '组件库关联ID',
+  `react_url` varchar(100) NOT NULL COMMENT 'React远程地址',
+  `css_url` varchar(100) DEFAULT NULL COMMENT 'css远程地址',
+  `config_url` varchar(100) DEFAULT NULL COMMENT 'config远程地址',
+  `release_hash` varchar(50) DEFAULT NULL COMMENT '版本hash',
+  `user_id` int NOT NULL COMMENT '通行证ID',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '通行证名称',
+  `count` int NOT NULL DEFAULT '0' COMMENT '记录更新次数',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `ix_release_id` (`release_id`),
+  KEY `ix_lib_id` (`lib_id`),
+  KEY `ix_updated_at` (`updated_at`),
+  KEY `ix_created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='组件库发布表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = menu   */
+/******************************************/
+CREATE TABLE `menu` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
+  `project_id` bigint NOT NULL COMMENT '项目ID',
+  `name` varchar(20) NOT NULL COMMENT '菜单名称',
+  `parent_id` bigint DEFAULT NULL COMMENT '父级菜单ID',
+  `type` int NOT NULL COMMENT '方法 1-菜单 2-按钮 3-页面 4-外链',
+  `icon` varchar(100) DEFAULT NULL COMMENT '菜单图标',
+  `path` varchar(100) DEFAULT NULL COMMENT '路径',
+  `page_id` bigint DEFAULT NULL COMMENT '页面ID',
+  `sort_num` int NOT NULL COMMENT '排序',
+  `status` int NOT NULL DEFAULT '1' COMMENT '状态 1-启用 0-禁用',
+  `code` varchar(30) DEFAULT NULL COMMENT '按钮标识',
+  `user_id` int NOT NULL COMMENT '通行证id',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_project_id` (`project_id`),
+  KEY `idx_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='菜单列表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = pages   */
+/******************************************/
+CREATE TABLE `pages` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '项目ID',
+  `name` varchar(20) NOT NULL COMMENT '项目名称',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
+  `page_data` longtext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '页面数据',
+  `remark` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '页面描述',
+  `is_template` tinyint(1) DEFAULT '0' COMMENT '是否为模板 1-是 0-否',
+  `is_public` tinyint(1) DEFAULT '2' COMMENT '是否开放 1-公开 2-私有',
+  `is_edit` tinyint(1) DEFAULT '2' COMMENT '是否可编辑 1-编辑 2-只读',
+  `preview_img` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '页面预览图',
+  `stg_publish_id` bigint NOT NULL DEFAULT '0' COMMENT 'stg 页面发布ID',
+  `pre_publish_id` bigint NOT NULL DEFAULT '0' COMMENT 'pre 页面发布ID',
+  `prd_publish_id` bigint NOT NULL DEFAULT '0' COMMENT 'prd 页面发布ID',
+  `stg_state` tinyint(1) NOT NULL DEFAULT '1' COMMENT '发布状态:1未保存 2已保存 3已发布',
+  `pre_state` tinyint(1) NOT NULL DEFAULT '1' COMMENT '发布状态:1未保存 2已保存 3已发布',
+  `prd_state` tinyint(1) NOT NULL DEFAULT '1' COMMENT '发布状态:1未保存 2已保存 3已发布',
+  `project_id` int DEFAULT '0' COMMENT '所属项目ID',
+  `app_type` int(1) NULL DEFAULT 1 COMMENT '应用类型',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 AVG_ROW_LENGTH=11371 COMMENT='项目列表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = pages_publish   */
+/******************************************/
+CREATE TABLE `pages_publish` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '页面发布ID',
+  `page_id` bigint NOT NULL COMMENT '页面ID',
+  `page_name` varchar(20) NOT NULL COMMENT '页面名称',
+  `page_data` longtext COMMENT '页面数据',
+  `user_id` int NOT NULL COMMENT '通行证id',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
+  `version` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '版本号',
+  `env` enum('stg','pre','prd') NOT NULL DEFAULT 'stg' COMMENT '状态:stg、pre、 prd',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `ix_updated_at` (`updated_at`),
+  KEY `ix_created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='页面发布列表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = pages_role   */
+/******************************************/
+CREATE TABLE `pages_role` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `page_id` bigint NOT NULL COMMENT '页面ID',
+  `role` bigint DEFAULT NULL COMMENT '角色权限 1-developer 2-visitor',
+  `type` int NOT NULL DEFAULT '1' COMMENT '项目类型 1-项目 2-页面',
+  `user_id` int NOT NULL COMMENT '用户id',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
+  `created_uid` int DEFAULT NULL COMMENT '创建用户ID',
+  `created_uname` varchar(30) DEFAULT '' COMMENT '创建用户名称',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `ix_updated_at` (`updated_at`),
+  KEY `ix_created_at` (`created_at`),
+  KEY `ix_page_id` (`page_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='页面权限列表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = project_user   */
+/******************************************/
+CREATE TABLE `project_user` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `system_role` int NOT NULL DEFAULT '1' COMMENT '系统角色:1:管理员 2:普通用户',
+  `project_id` bigint NOT NULL DEFAULT '0' COMMENT '项目ID',
+  `role_id` int NOT NULL DEFAULT '0' COMMENT '项目角色ID',
+  `user_id` int NOT NULL COMMENT '通行证id',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
+  `created_uid` int DEFAULT NULL COMMENT '创建用户ID',
+  `created_uname` varchar(30) DEFAULT '' COMMENT '创建用户名',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_user_id` (`user_id`),
+  KEY `idx_project_id` (`project_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 AVG_ROW_LENGTH=4096 COMMENT='用户列表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = projects   */
+/******************************************/
+CREATE TABLE `projects` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '项目ID',
+  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '项目名称',
+  `remark` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '项目描述',
+  `logo` varchar(100) NOT NULL COMMENT 'logo 地址',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `is_template` tinyint(1) DEFAULT '0' COMMENT '是否为模板 1-是 0-否',
+  `is_public` tinyint(1) DEFAULT '2' COMMENT '是否开放 1-公开 2-私有',
+  `breadcrumb` tinyint(1) DEFAULT '1' COMMENT '面包屑 1-有 0 无',
+  `layout` tinyint(1) DEFAULT '1' COMMENT '布局 1-上下 2-左右 3-上中下',
+  `menu_mode` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'inline' COMMENT '菜单模式:inline-内嵌 vertical-垂直  horizontal-水平',
+  `menu_theme_color` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'dark' COMMENT '菜单主题色:dark 深色 light-浅色 支持16进制',
+  `tag` tinyint(1) DEFAULT '1' COMMENT '多页签 1-显示 0-不显示',
+  `footer` tinyint(1) DEFAULT '0' COMMENT '页脚 1-显示 0-不显示',
+  `system_theme_color` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '#1677ff' COMMENT '系统主题色',
+  `show_header` tinyint(1) DEFAULT '1' COMMENT '显示Header组件',
+  `show_tab_bar` tinyint(1) DEFAULT '0' COMMENT '显示标签栏',
+  `home_page` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'welcome' COMMENT '首页定制页面ID',
+  `extra_data` text COMMENT '项目额外数据',
+  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_user_id` (`user_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5968 DEFAULT CHARSET=utf8mb3 AVG_ROW_LENGTH=2048 COMMENT='项目列表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = roles   */
+/******************************************/
+CREATE TABLE `roles` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
+  `project_id` bigint DEFAULT NULL COMMENT '项目ID',
+  `name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
+  `half_checked` varchar(4000) DEFAULT NULL COMMENT '全选的菜单ID',
+  `checked` varchar(4000) DEFAULT NULL COMMENT '半全选的菜单ID',
+  `remark` varchar(50) DEFAULT '' COMMENT '角色备注',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `user_id` int NOT NULL COMMENT '通行证id',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
+  PRIMARY KEY (`id`),
+  KEY `ix_updated_at` (`updated_at`) USING BTREE,
+  KEY `ix_created_at` (`created_at`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 AVG_ROW_LENGTH=4096 COMMENT='页面权限列表'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = templates   */
+/******************************************/
+CREATE TABLE `templates` (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `union_id` int NOT NULL COMMENT '关联ID',
+  `type` tinyint(1) NOT NULL COMMENT '1: 项目 2:页面 3:组件',
+  `name` varchar(100) NOT NULL COMMENT '模板名称',
+  `description` varchar(100) NOT NULL COMMENT '模板描述',
+  `user_id` int NOT NULL COMMENT '创建人ID',
+  `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '创建人名称',
+  `install_count` int NOT NULL DEFAULT '0' COMMENT '安装次数',
+  `image_url` varchar(100) DEFAULT NULL COMMENT '封面图片',
+  `tags` varchar(200) DEFAULT NULL COMMENT '模板标签',
+  `is_recommend` tinyint(1) DEFAULT '0' COMMENT '1:推荐 0:不推荐',
+  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='项目、页面和组件库模板'
+;
+
+/******************************************/
+/*   DatabaseName = mars_async   */
+/*   TableName = users   */
+/******************************************/
+CREATE TABLE `users` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '昵称',
+  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户邮箱',
+  `user_pwd` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
+  `open_id` varchar(30) DEFAULT NULL COMMENT '微信openid',
+  `union_id` varchar(30) DEFAULT NULL COMMENT '微信unionid',
+  `phone_number` int DEFAULT NULL COMMENT '手机号',
+  `avatar` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '用户头像',
+  `team_id` int DEFAULT '1' COMMENT '团队ID',
+  `parent_id` int DEFAULT NULL COMMENT '主账号id',
+  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_user_name` (`user_name`)
+) ENGINE=InnoDB AUTO_INCREMENT=4647 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci AVG_ROW_LENGTH=4096 ROW_FORMAT=DYNAMIC COMMENT='用户列表'
+;

+ 89 - 3
main.js

@@ -1,6 +1,92 @@
 const app = require('./app');
 const { SERVER_HOST, SERVER_PORT } = require('./config');
+const mysql2 = require('mysql2/promise');
+const config = require('./config');
+const fs = require('fs');
+const md5 = require('md5.js');
 
-app.listen(SERVER_PORT, () => {
-  console.log(`Marsview服务已启动 ${SERVER_HOST}:${SERVER_PORT}`);
-});
+async function initDatabase() {
+  const connection = await mysql2.createConnection({
+    host: config.DATABASE_HOST,
+    port: config.DATABASE_PORT,
+    user: config.DATABASE_USER,
+    password: config.DATABASE_PASSWORD,
+    multipleStatements: true,
+  });
+
+  const dbName = config.DATABASE_NAME;
+
+  await connection.connect();
+
+  async function createUserIfNotExists() {
+    await connection.query(`USE \`${dbName}\`;`);
+    try {
+      const [userRows] = await connection.query('SELECT * FROM `users`;');
+
+      if (userRows.length === 0) {
+        const userName = config.USERNAME || 'admin@marsview.com';
+        const userPassword = config.PASSWORD || 'admin';
+        const pwd = new md5().update(userPassword).digest('hex');
+        console.log(`用户 ${userName} 不存在,正在创建...`);
+        await connection.query(`INSERT INTO \`users\` (\`nick_name\`, \`user_name\`, \`user_pwd\`, \`avatar\`) VALUES ('admin', '${userName}', '${pwd}', '');`);
+        console.log(`用户 ${userName} 创建成功。`);
+      } else {
+        console.log(`用户表已存在数据,跳过创建用户。`);
+      }
+    } catch (error) {
+      console.error(`创建用户失败: ${error.message}`);
+    }
+  }
+
+  // 检查数据库是否存在,如果不存在则创建
+  async function createDatabaseIfNotExists() {
+    let [rows] = await connection.query('SHOW DATABASES LIKE ?', [dbName]);
+    if (rows.length === 0) {
+      console.log('数据库不存在,自动创建中...');
+      await connection.query(`CREATE DATABASE \`${dbName}\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`);
+      console.log(`Database ${dbName} created successfully.`);
+      // 选择当前数据库
+      await connection.query(`USE \`${dbName}\`;`);
+      // 读取并执行初始化SQL脚本
+      console.log('正在执行初始化SQL脚本...');
+      const initSql = fs.readFileSync('./init.sql', 'utf8');
+      await connection.query(initSql);
+      console.log(`Database ${dbName} created successfully.`);
+    } else {
+      console.log(`数据库已经存在,跳过创建。`);
+    }
+
+    [rows] = await connection.query('SHOW DATABASES LIKE ?', [config.MODEL_DATABASE_NAME]);
+
+    if (rows.length === 0) {
+      console.log(`创建数据库 ${config.MODEL_DATABASE_NAME}`);
+      const statement = `CREATE DATABASE IF NOT EXISTS ${config.MODEL_DATABASE_NAME} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;`;
+      await connection.query(statement);
+      console.log(`创建数据库 ${config.MODEL_DATABASE_NAME} 成功`);
+    } else {
+      console.log(`数据库 ${config.MODEL_DATABASE_NAME} 已经存在, 跳过创建。`);
+    }
+
+    // 判断有没有用户,如果没有,再创建
+    await createUserIfNotExists();
+  }
+
+  try {
+    await createDatabaseIfNotExists();
+  } catch (err) {
+    console.error(`初始化数据库失败: ${err.message}`);
+  } finally {
+    await connection.end();
+  }
+}
+async function main() {
+
+  await initDatabase();
+
+
+  app.listen(SERVER_PORT, () => {
+    console.log(`Marsview服务已启动 ${SERVER_HOST}:${SERVER_PORT}`);
+  });
+}
+
+main();

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 863 - 343
pnpm-lock.yaml


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio