48 lines
1.1 KiB
TypeScript
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,
|
|
);
|
|
}
|
|
}
|