Files
sexy/lib/db/queries/session-events.ts
T

43 lines
1.1 KiB
TypeScript
Raw Normal View History

import { asc, eq } from "drizzle-orm";
import { db, sqlite } from "@/lib/db/client";
import { sessionEvents } from "@/lib/db/schema";
export interface IncomingEvent {
sessionDeviceId: number;
tsMs: number;
commandType: "vibrate" | "rotate" | "linear" | "stop";
featureIndex: number;
value: number;
durationMs?: number;
}
export async function insertEvents(playSessionId: number, events: IncomingEvent[]): Promise<void> {
if (events.length === 0) return;
const insertMany = sqlite.transaction((rows: IncomingEvent[]) => {
for (const row of rows) {
db.insert(sessionEvents)
.values({
playSessionId,
sessionDeviceId: row.sessionDeviceId,
tsMs: row.tsMs,
commandType: row.commandType,
featureIndex: row.featureIndex,
value: row.value,
durationMs: row.durationMs,
})
.run();
}
});
insertMany(events);
}
export async function getEventsForSession(playSessionId: number) {
return db
.select()
.from(sessionEvents)
.where(eq(sessionEvents.playSessionId, playSessionId))
.orderBy(asc(sessionEvents.tsMs));
}