mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-07-25 07:47:34 +08:00
123 lines
4.1 KiB
TypeScript
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
|
|
});
|
|
});
|
|
}
|
|
}
|