disable synchronize when typeorm db init, all schema change depend on migration

This commit is contained in:
geekgeekrun
2025-05-03 15:03:25 +08:00
parent 5174da2c6c
commit 6986fbdc3c
5 changed files with 82 additions and 41 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@geekgeekrun/sqlite-plugin", "name": "@geekgeekrun/sqlite-plugin",
"version": "0.0.1", "version": "0.0.2",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"dependencies": { "dependencies": {
+2 -1
View File
@@ -1,6 +1,7 @@
import "reflect-metadata"; import "reflect-metadata";
import { type DataSource } from "typeorm"; import { type DataSource } from "typeorm";
import { requireTypeorm } from "./utils/module-loader"; import { requireTypeorm } from "./utils/module-loader";
import fs from 'node:fs'
import { BossInfo } from "./entity/BossInfo"; import { BossInfo } from "./entity/BossInfo";
import { BossInfoChangeLog } from "./entity/BossInfoChangeLog"; import { BossInfoChangeLog } from "./entity/BossInfoChangeLog";
@@ -33,7 +34,7 @@ export function initDb(dbFilePath) {
const { DataSource } = requireTypeorm() const { DataSource } = requireTypeorm()
const appDataSource = new DataSource({ const appDataSource = new DataSource({
type: "sqlite", type: "sqlite",
synchronize: true, synchronize: !fs.existsSync(dbFilePath),
logging: true, logging: true,
logger: "simple-console", logger: "simple-console",
database: dbFilePath, database: dbFilePath,
@@ -1,19 +1,24 @@
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"; import { DataSource, MigrationInterface, QueryRunner, TableColumn } from "typeorm";
import { VBossLibrary } from "../entity/VBossLibrary";
import { VChatStartupLog } from "../entity/VChatStartupLog";
import { VCompanyLibrary } from "../entity/VCompanyLibrary";
import { VJobLibrary } from "../entity/VJobLibrary";
import { VMarkAsNotSuitLog } from "../entity/VMarkAsNotSuitLog";
const viewNames = [ const ViewEntities = [
"v_boss_library", VBossLibrary,
"v_chat_startup_log", VChatStartupLog,
"v_company_library", VCompanyLibrary,
"v_job_library", VJobLibrary,
"v_mark_as_not_suit_log" VMarkAsNotSuitLog,
]; ]
export class UpdateChatStartupLogTable1729182577167 export class UpdateChatStartupLogTable1729182577167 implements MigrationInterface {
implements MigrationInterface
{
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
for (const viewName of viewNames) { for (const EntityDefinition of ViewEntities) {
await queryRunner.query(`DROP VIEW IF EXISTS "${viewName}"`); const dataSource = queryRunner.connection as DataSource;
const viewMetadata = dataSource.getMetadata(EntityDefinition);
await queryRunner.query(`DROP VIEW IF EXISTS "${viewMetadata.tableName}"`);
} }
if (await queryRunner.hasTable("boss_active_status_record")) { if (await queryRunner.hasTable("boss_active_status_record")) {
if (await queryRunner.hasColumn("boss_active_status_record", "updateDate")) { if (await queryRunner.hasColumn("boss_active_status_record", "updateDate")) {
@@ -40,14 +45,17 @@ export class UpdateChatStartupLogTable1729182577167
}) })
) )
} }
for (const EntityDefinition of ViewEntities) {
const dataSource = queryRunner.connection as DataSource;
const viewMetadata = dataSource.getMetadata(EntityDefinition);
let expression = viewMetadata.expression;
if (typeof expression === 'function') {
expression = expression(dataSource).getQuery();
}
await queryRunner.query(`CREATE VIEW "${viewMetadata.tableName}" AS ${expression}`);
}
} }
public async down(queryRunner: QueryRunner): Promise<void> { public async down(queryRunner: QueryRunner): Promise<void> {
for (const viewName of viewNames) {
await queryRunner.query(`DROP VIEW IF EXISTS "${viewName}"`);
}
await queryRunner.query(
`ALTER TABLE boss_active_status_record RENAME COLUMN updateTime TO updateDate`
);
} }
} }
@@ -1,17 +1,24 @@
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"; import { DataSource, MigrationInterface, QueryRunner, TableColumn } from "typeorm";
import { VBossLibrary } from "../entity/VBossLibrary";
import { VChatStartupLog } from "../entity/VChatStartupLog";
import { VCompanyLibrary } from "../entity/VCompanyLibrary";
import { VJobLibrary } from "../entity/VJobLibrary";
import { VMarkAsNotSuitLog } from "../entity/VMarkAsNotSuitLog";
const viewNames = [ const ViewEntities = [
"v_boss_library", VBossLibrary,
"v_chat_startup_log", VChatStartupLog,
"v_company_library", VCompanyLibrary,
"v_job_library", VJobLibrary,
"v_mark_as_not_suit_log", VMarkAsNotSuitLog,
]; ]
export class UpdateBossInfoTable1732032381304 implements MigrationInterface { export class UpdateBossInfoTable1732032381304 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
for (const viewName of viewNames) { for (const EntityDefinition of ViewEntities) {
await queryRunner.query(`DROP VIEW IF EXISTS "${viewName}"`); const dataSource = queryRunner.connection as DataSource;
const viewMetadata = dataSource.getMetadata(EntityDefinition);
await queryRunner.query(`DROP VIEW IF EXISTS "${viewMetadata.tableName}"`);
} }
if (await queryRunner.hasTable("boss_info")) { if (await queryRunner.hasTable("boss_info")) {
if (await queryRunner.hasColumn("boss_info", "encryptCompanyId")) { if (await queryRunner.hasColumn("boss_info", "encryptCompanyId")) {
@@ -26,6 +33,15 @@ export class UpdateBossInfoTable1732032381304 implements MigrationInterface {
); );
} }
} }
for (const EntityDefinition of ViewEntities) {
const dataSource = queryRunner.connection as DataSource;
const viewMetadata = dataSource.getMetadata(EntityDefinition);
let expression = viewMetadata.expression;
if (typeof expression === 'function') {
expression = expression(dataSource).getQuery();
}
await queryRunner.query(`CREATE VIEW "${viewMetadata.tableName}" AS ${expression}`);
}
} }
public async down(queryRunner: QueryRunner): Promise<void> {} public async down(queryRunner: QueryRunner): Promise<void> {}
@@ -1,17 +1,24 @@
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"; import { DataSource, MigrationInterface, QueryRunner, TableColumn } from "typeorm";
import { VBossLibrary } from "../entity/VBossLibrary";
import { VChatStartupLog } from "../entity/VChatStartupLog";
import { VCompanyLibrary } from "../entity/VCompanyLibrary";
import { VJobLibrary } from "../entity/VJobLibrary";
import { VMarkAsNotSuitLog } from "../entity/VMarkAsNotSuitLog";
const viewNames = [ const ViewEntities = [
"v_boss_library", VBossLibrary,
"v_chat_startup_log", VChatStartupLog,
"v_company_library", VCompanyLibrary,
"v_job_library", VJobLibrary,
"v_mark_as_not_suit_log", VMarkAsNotSuitLog,
]; ]
export class AddColumnForMarkAsNotSuitLog1746092370665 implements MigrationInterface { export class AddColumnForMarkAsNotSuitLog1746092370665 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
for (const viewName of viewNames) { for (const EntityDefinition of ViewEntities) {
await queryRunner.query(`DROP VIEW IF EXISTS "${viewName}"`); const dataSource = queryRunner.connection as DataSource;
const viewMetadata = dataSource.getMetadata(EntityDefinition);
await queryRunner.query(`DROP VIEW IF EXISTS "${viewMetadata.tableName}"`);
} }
if (await queryRunner.hasTable("mark_as_not_suit_log")) { if (await queryRunner.hasTable("mark_as_not_suit_log")) {
if (!await queryRunner.hasColumn("mark_as_not_suit_log", "markOp")) { if (!await queryRunner.hasColumn("mark_as_not_suit_log", "markOp")) {
@@ -25,6 +32,15 @@ export class AddColumnForMarkAsNotSuitLog1746092370665 implements MigrationInter
); );
} }
} }
for (const EntityDefinition of ViewEntities) {
const dataSource = queryRunner.connection as DataSource;
const viewMetadata = dataSource.getMetadata(EntityDefinition);
let expression = viewMetadata.expression;
if (typeof expression === 'function') {
expression = expression(dataSource).getQuery();
}
await queryRunner.query(`CREATE VIEW "${viewMetadata.tableName}" AS ${expression}`);
}
} }
public async down(queryRunner: QueryRunner): Promise<void> {} public async down(queryRunner: QueryRunner): Promise<void> {}