import "reflect-metadata"; import { type DataSource } from "typeorm"; import { requireTypeorm } from "./utils/module-loader"; import { BossInfo } from "./entity/BossInfo"; import { BossInfoChangeLog } from "./entity/BossInfoChangeLog"; import { ChatStartupFrom, ChatStartupLog } from './entity/ChatStartupLog'; import { CompanyInfoChangeLog } from "./entity/CompanyInfoChangeLog"; import { CompanyInfo } from "./entity/CompanyInfo"; import { JobInfo } from "./entity/JobInfo"; import { JobInfoChangeLog } from "./entity/JobInfoChangeLog"; import { BossActiveStatusRecord } from "./entity/BossActiveStatusRecord"; import { UserInfo } from "./entity/UserInfo"; import { AutoStartChatRunRecord } from './entity/AutoStartChatRunRecord'; import { MarkAsNotSuitLog } from "./entity/MarkAsNotSuitLog" import { VChatStartupLog } from "./entity/VChatStartupLog"; import { VBossLibrary } from "./entity/VBossLibrary"; import { VJobLibrary } from "./entity/VJobLibrary"; import { VCompanyLibrary } from "./entity/VCompanyLibrary" import { VMarkAsNotSuitLog } from "./entity/VMarkAsNotSuitLog" import { ChatMessageRecord } from './entity/ChatMessageRecord' import sqlite3 from 'sqlite3'; import { saveChatStartupRecord, saveJobInfoFromRecommendPage, saveMarkAsNotSuitRecord } from "./handlers"; import { UpdateChatStartupLogTable1729182577167 } from "./migrations/1729182577167-UpdateChatStartupLogTable"; import minimist from 'minimist' import { UpdateBossInfoTable1732032381304 } from "./migrations/1732032381304-UpdateBossInfoTable"; export function initDb(dbFilePath) { const { DataSource } = requireTypeorm() const appDataSource = new DataSource({ type: "sqlite", synchronize: true, logging: true, logger: "simple-console", database: dbFilePath, driver: sqlite3, // The important line entities: [ ChatStartupLog, BossInfo, BossInfoChangeLog, CompanyInfo, CompanyInfoChangeLog, JobInfo, JobInfoChangeLog, BossActiveStatusRecord, UserInfo, AutoStartChatRunRecord, VChatStartupLog, VBossLibrary, VJobLibrary, VCompanyLibrary, MarkAsNotSuitLog, VMarkAsNotSuitLog, ChatMessageRecord, ], migrations: [ UpdateChatStartupLogTable1729182577167, UpdateBossInfoTable1732032381304 ], migrationsRun: true }); return appDataSource.initialize(); } export default class SqlitePlugin { initPromise: Promise; runRecordId: number; constructor(dbFilePath) { this.initPromise = initDb(dbFilePath); this.runRecordId = minimist(process.argv.slice(2))['run-record-id'] ?? 0 } userInfo = null apply(hooks) { hooks.userInfoResponse.tapPromise( "SqlitePlugin", async (userInfoResponse) => { if (userInfoResponse.code !== 0) { return; } const { zpData: userInfo } = userInfoResponse; this.userInfo = userInfo console.log(userInfo); const ds = await this.initPromise; const userInfoRepository = ds.getRepository(UserInfo); const user = new UserInfo(); user.encryptUserId = userInfo.encryptUserId; user.name = userInfo.name; return await userInfoRepository.save(user); } ); hooks.jobDetailIsGetFromRecommendList.tapPromise("SqlitePlugin", async (_jobInfo) => { const ds = await this.initPromise; await saveJobInfoFromRecommendPage(ds, _jobInfo); }); hooks.newChatStartup.tapPromise("SqlitePlugin", async (_jobInfo, { chatStartupFrom = ChatStartupFrom.AutoFromRecommendList } = {}) => { const ds = await this.initPromise; return await saveChatStartupRecord(ds, _jobInfo, this.userInfo, { autoStartupChatRecordId: this.runRecordId, chatStartupFrom }); }); hooks.jobMarkedAsNotSuit.tapPromise("SqlitePlugin", async (_jobInfo, { markFrom = ChatStartupFrom.AutoFromRecommendList, markReason = undefined, extInfo = undefined } = {}) => { const ds = await this.initPromise; return await saveMarkAsNotSuitRecord(ds, _jobInfo, this.userInfo, { autoStartupChatRecordId: this.runRecordId, markFrom, markReason, extInfo }); }); } }