Просмотр исходного кода

♻️ refactor(data-source): 优化数据源初始化与迁移配置

- 为 `createDataSource` 和 `initializeDataSource` 函数添加可选的 `migrations` 参数
- 调整非测试环境的 `synchronize` 逻辑:当传入 `migrations` 参数(即使是空数组)时,自动设为 `false`,否则沿用环境变量配置
- 在 `packages/server/src/index.ts` 中调用 `initializeDataSource` 时传入空数组作为 `migrations` 参数,以明确禁用自动同步
yourname 1 день назад
Родитель
Сommit
5d8b45f56e
2 измененных файлов с 15 добавлено и 8 удалено
  1. 1 1
      packages/server/src/index.ts
  2. 14 7
      packages/shared-utils/src/data-source.ts

+ 1 - 1
packages/server/src/index.ts

@@ -37,7 +37,7 @@ initializeDataSource([
   OrderMt, OrderGoodsMt, OrderRefundMt,
   SupplierMt, SystemConfigMt,
   CreditBalanceMt, CreditBalanceLogMt
-])
+], [])
 
 if(!AppDataSource || !AppDataSource.isInitialized) {
   await AppDataSource.initialize();

+ 14 - 7
packages/shared-utils/src/data-source.ts

@@ -1,5 +1,5 @@
 import "reflect-metadata"
-import { DataSource, EntitySchema } from "typeorm"
+import { DataSource, EntitySchema, MixedList } from "typeorm"
 import process from 'node:process'
 
 // 实体目标类型,可以是类、函数或实体模式
@@ -8,19 +8,25 @@ export type EntityTarget = Function | EntitySchema<any> | string
 /**
  * 创建数据源配置
  * @param entities 实体类数组
+ * @param migrations 迁移文件数组(可选),当传入此参数时(即使是空数组),非测试环境的 synchronize 自动为 false
  * @returns DataSource 实例
  */
-export function createDataSource(entities: EntityTarget[]): DataSource {
+export function createDataSource(entities: EntityTarget[], migrations?: MixedList<string | Function>): DataSource {
   // 在测试环境下使用测试数据库配置
   const isTestEnv = process.env.NODE_ENV === 'test';
   const testDatabaseUrl = process.env.TEST_DATABASE_URL || 'postgresql://postgres:test_password@localhost:5432/test_d8dai';
 
+  // 非测试环境的 synchronize 逻辑
+  const shouldSynchronize = migrations !== undefined
+    ? false // 传入了 migrations 参数(即使是空数组),synchronize 设为 false
+    : process.env.DB_SYNCHRONIZE !== "false"; // 否则使用环境变量配置
+
   return isTestEnv && testDatabaseUrl
     ? new DataSource({
         type: "postgres",
         url: testDatabaseUrl,
         entities,
-        migrations: [],
+        migrations: [], // 测试环境忽略迁移文件
         synchronize: true, // 测试环境总是同步schema
         dropSchema: true,  // 测试环境每次重新创建schema
         logging: false,    // 测试环境关闭日志
@@ -33,8 +39,8 @@ export function createDataSource(entities: EntityTarget[]): DataSource {
         password: process.env.DB_PASSWORD || "",
         database: process.env.DB_DATABASE || "postgres",
         entities,
-        migrations: [],
-        synchronize: process.env.DB_SYNCHRONIZE !== "false",
+        migrations: migrations || [],
+        synchronize: shouldSynchronize,
         logging: process.env.DB_LOGGING === "true",
       });
 }
@@ -48,7 +54,8 @@ export let AppDataSource: DataSource;
 /**
  * 初始化默认数据源
  * @param entities 实体类数组
+ * @param migrations 迁移文件数组(可选)
  */
-export function initializeDataSource(entities: EntityTarget[]): void {
-  AppDataSource = createDataSource(entities);
+export function initializeDataSource(entities: EntityTarget[], migrations?: MixedList<string | Function>): void {
+  AppDataSource = createDataSource(entities, migrations);
 }