Files
geekgeekrun/packages/sqlite-plugin/src/index.ts

123 lines
4.1 KiB
TypeScript

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<DataSource>;
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
});
});
}
}