icydraw/src/server/object/history.ts

48 lines
1.1 KiB
TypeScript

import { join } from 'path';
import sqlite3 from 'sqlite3';
import { open, Database } from 'sqlite';
import { CanvasRecord } from '../../common/types/canvas';
export class History {
private db!: Database;
constructor(
private _store = join(__dirname, '..', '..', '..', 'canvas.db'),
) {}
async initialize(): Promise<void> {
this.db = await open({
filename: this._store,
driver: sqlite3.cached.Database,
});
await this.db.migrate();
}
async insert(record: CanvasRecord): Promise<void> {
const color = record.color || 0;
await this.db.run(
`INSERT INTO Placement (user, x, y, ts, color) VALUES (?,?,?,?,?)`,
record.user,
record.x,
record.y,
record.ts,
color,
);
}
async getUserPlacements(user: string): Promise<CanvasRecord[]> {
return this.db.all<CanvasRecord[]>(
`SELECT * FROM Placement WHERE user = ?`,
user,
);
}
async getPlacerAt(x: number, y: number): Promise<CanvasRecord | undefined> {
return this.db.get<CanvasRecord>(
`SELECT * FROM Placement WHERE x = ? AND y = ? ORDER BY ts DESC`,
x,
y,
);
}
}