diff --git a/packages/sqlite-plugin/package.json b/packages/sqlite-plugin/package.json index 46b9798..d61ad33 100644 --- a/packages/sqlite-plugin/package.json +++ b/packages/sqlite-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@geekgeekrun/sqlite-plugin", - "version": "0.0.1", + "version": "0.0.2", "description": "", "main": "dist/index.js", "dependencies": { diff --git a/packages/sqlite-plugin/src/index.ts b/packages/sqlite-plugin/src/index.ts index f9bf251..ad14341 100644 --- a/packages/sqlite-plugin/src/index.ts +++ b/packages/sqlite-plugin/src/index.ts @@ -1,6 +1,7 @@ import "reflect-metadata"; import { type DataSource } from "typeorm"; import { requireTypeorm } from "./utils/module-loader"; +import fs from 'node:fs' import { BossInfo } from "./entity/BossInfo"; import { BossInfoChangeLog } from "./entity/BossInfoChangeLog"; @@ -33,7 +34,7 @@ export function initDb(dbFilePath) { const { DataSource } = requireTypeorm() const appDataSource = new DataSource({ type: "sqlite", - synchronize: true, + synchronize: !fs.existsSync(dbFilePath), logging: true, logger: "simple-console", database: dbFilePath, diff --git a/packages/sqlite-plugin/src/migrations/1729182577167-UpdateChatStartupLogTable.ts b/packages/sqlite-plugin/src/migrations/1729182577167-UpdateChatStartupLogTable.ts index 9e6e1f4..972a5d4 100644 --- a/packages/sqlite-plugin/src/migrations/1729182577167-UpdateChatStartupLogTable.ts +++ b/packages/sqlite-plugin/src/migrations/1729182577167-UpdateChatStartupLogTable.ts @@ -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 = [ - "v_boss_library", - "v_chat_startup_log", - "v_company_library", - "v_job_library", - "v_mark_as_not_suit_log" -]; +const ViewEntities = [ + VBossLibrary, + VChatStartupLog, + VCompanyLibrary, + VJobLibrary, + VMarkAsNotSuitLog, +] -export class UpdateChatStartupLogTable1729182577167 - implements MigrationInterface -{ +export class UpdateChatStartupLogTable1729182577167 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { - for (const viewName of viewNames) { - await queryRunner.query(`DROP VIEW IF EXISTS "${viewName}"`); + for (const EntityDefinition of ViewEntities) { + 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.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 { - 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` - ); } } diff --git a/packages/sqlite-plugin/src/migrations/1732032381304-UpdateBossInfoTable.ts b/packages/sqlite-plugin/src/migrations/1732032381304-UpdateBossInfoTable.ts index 1a3a979..1f56a98 100644 --- a/packages/sqlite-plugin/src/migrations/1732032381304-UpdateBossInfoTable.ts +++ b/packages/sqlite-plugin/src/migrations/1732032381304-UpdateBossInfoTable.ts @@ -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 = [ - "v_boss_library", - "v_chat_startup_log", - "v_company_library", - "v_job_library", - "v_mark_as_not_suit_log", -]; +const ViewEntities = [ + VBossLibrary, + VChatStartupLog, + VCompanyLibrary, + VJobLibrary, + VMarkAsNotSuitLog, +] export class UpdateBossInfoTable1732032381304 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { - for (const viewName of viewNames) { - await queryRunner.query(`DROP VIEW IF EXISTS "${viewName}"`); + for (const EntityDefinition of ViewEntities) { + 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.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 {} diff --git a/packages/sqlite-plugin/src/migrations/1746092370665-AddColumnForMarkAsNotSuitLog.ts b/packages/sqlite-plugin/src/migrations/1746092370665-AddColumnForMarkAsNotSuitLog.ts index 536ed7f..db98e30 100644 --- a/packages/sqlite-plugin/src/migrations/1746092370665-AddColumnForMarkAsNotSuitLog.ts +++ b/packages/sqlite-plugin/src/migrations/1746092370665-AddColumnForMarkAsNotSuitLog.ts @@ -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 = [ - "v_boss_library", - "v_chat_startup_log", - "v_company_library", - "v_job_library", - "v_mark_as_not_suit_log", -]; +const ViewEntities = [ + VBossLibrary, + VChatStartupLog, + VCompanyLibrary, + VJobLibrary, + VMarkAsNotSuitLog, +] export class AddColumnForMarkAsNotSuitLog1746092370665 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { - for (const viewName of viewNames) { - await queryRunner.query(`DROP VIEW IF EXISTS "${viewName}"`); + for (const EntityDefinition of ViewEntities) { + 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.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 {}