Files
LingChair/server/api/EventStorer.ts
2025-09-21 14:06:08 +08:00

54 lines
1.5 KiB
TypeScript

import { DatabaseSync } from "node:sqlite"
import path from 'node:path'
import config from "../config.ts"
import User from "../data/User.ts";
import EventBean from "./EventBean.ts";
export default class EventStorer {
static database: DatabaseSync = this.init()
private static init(): DatabaseSync {
const db: DatabaseSync = new DatabaseSync(path.join(config.data_path, 'Events.db'))
return db
}
static getInstanceForUser(user: User) {
return new EventStorer(user)
}
declare user: User
constructor(user: User) {
this.user = user
EventStorer.database.exec(`
CREATE TABLE IF NOT EXISTS ${this.getTableName()} (
/* 序号 */ count INTEGER PRIMARY KEY AUTOINCREMENT,
/* 事件 */ event_name TEXT NOT NULL,
/* 數據 */ data TEXT NOT NULL,
);
`)
}
protected getTableName() {
return `events_${this.user.bean.id}`
}
addEvent(eventName: string, data: unknown) {
EventStorer.database.prepare(`INSERT INTO ${this.getTableName()} (
event_name,
data
) VALUES (?, ?);`).run(
eventName,
JSON.stringify(data)
)
}
getEvents() {
return EventStorer.database.prepare(`SELECT * FROM ${this.getTableName()};`).all().map((v: any) => ({
...v,
data: JSON.parse(v.data)
})) as unknown as EventBean[]
}
clearEvents() {
EventStorer.database.prepare(`DELETE FROM ${this.getTableName()};`).run()
}
}